클러스터 관리 프로젝트에 Vault 설치하기
- GitLab 14.0에 도입됨.
HashiCorp Vault는 비밀 관리 솔루션으로, 비밀번호, 자격 증명, 인증서 등을 안전하게 관리하고 저장할 수 있습니다. Vault 설치는 응용 프로그램, GitLab CI/CD 작업 등에서 사용되는 자격 증명을 위한 안전한 데이터 리포지터리를 제공하는 데 활용될 수 있습니다. 또한 인프라의 시스템 및 배포에 SSL/TLS 인증서를 제공하는 방법으로 사용될 수 있습니다. 이러한 자격 증명의 단일 소스를 활용하면 모든 중요 자격 증명 및 인증서에 대한 액세스, 제어 및 감사 추적을 단일 소스로 갖추어 더 높은 보안성을 확보할 수 있습니다. 그러나 GitLab이 침해당하면 해당 Vault 인스턴스의 보안도 위협받을 수 있으므로, 이 보안 위험을 피하려면 외부 비밀을 활용하여 GitLab에서 GitLab이 제공하는 Vault를 사용하지 말고 고유의 HashiCorp Vault를 사용하는 것이 권장됩니다. CI와 외부 비밀을 활용하여 보안 위험을 피하세요.
이미 관리 프로젝트 템플릿으로부터 프로젝트를 만들었다고 가정하면, Vault를 설치하려면 helmfile.yaml
에서 다음 라인을 주석 처리해제해야 합니다:
- path: applications/vault/helmfile.yaml
기본적으로 확장 가능한 리포지터리 백엔드가 없는 기본적인 Vault 설정을 받게됩니다. 이는 단순한 테스트 및 소규모 배포에는 충분하지만 확장 가능한 한계가 있으며, 단일 인스턴스 배포이기 때문에 Vault 애플리케이션 업그레이드는 다운타임을 유발시킵니다.
프로덕션 환경에서 Vault를 최적으로 활용하기 위해서는 Vault의 내부 및 구성에 대한 좋은 이해가 이상적입니다. 이는 Vault 구성 가이드, Vault 설명서 및 Vault Helm 차트의 values.yaml
파일을 읽음으로써 이루어질 수 있습니다.
대부분의 사용자는 최소한으로 다음을 설정합니다:
다음은 Google Key Management Service를 자동 언씨로 사용하고 Google Cloud Storage 백엔드를 구성하며, 3개의 포드 복제본으로 HA를 활성화한 예제 값 파일(applications/vault/values.yaml
)입니다. 아래의 storage
및 seal
부분은 예시이며 실제 환경에 맞게 설정해야 합니다.
# Vault 웹 UI 활성화
ui:
enabled: true
server:
# 고가용성 모드에는 안전하지 않으므로 기본 데이터 저장 볼륨 비활성화
dataStorage:
enabled: false
# 고가용성 모드 활성화
ha:
enabled: true
# 보통 트래픽을 위해 포트 8200에 Vault를, 클러스터 내 트래픽을 위해 포트 8201에 Vault를 수신하도록 Vault를 구성
config: |
listener "tcp" {
tls_disable = 1
address = "[::]:8200"
cluster_address = "[::]:8201"
}
# Vault 데이터를 GCS 버킷 백엔드에 저장하도록 Vault를 구성
storage "gcs" {
path = "gcs://my-vault-storage/vault-bucket"
ha_enabled = "true"
}
# GKMS 키를 사용하여 Vault 리포지터리를 언씨하는 Vault 구성
seal "gcpckms" {
project = "vault-helm-dev-246514"
region = "global"
key_ring = "vault-helm-unseal-kr"
crypto_key = "vault-helm-unseal-key"
}
Vault를 성공적으로 설치한 후에는, Vault 초기화를 하고 초기 루트 토큰을 얻어야 합니다. 이 작업을 수행하려면 Vault가 배포된 Kubernetes 클러스터에 액세스할 수 있어야 합니다. Vault를 초기화하려면 Kubernetes 내에서 실행 중인 Vault 중 하나에 쉘 액세스를 얻어야 합니다(kubectl
명령행 도구를 사용하면 보통 이를 수행합니다). Pod에 쉘 액세스를 얻은 후, vault operator init
명령을 실행하세요:
kubectl -n gitlab-managed-apps exec -it vault-0 sh
/ $ vault operator init
이렇게 하면 언씌인 키와 초기 루트 토큰을 얻을 수 있습니다. 이를 반드시 기록하고 안전한 곳에 보관해야 하며, 이 키와 토큰은 Vault를 전체 수명 주기 동안 언씌하기 위해 필요합니다.