클러스터 관리 프로젝트로 Vault 설치
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
HashiCorp Vault는 비밀 관리 솔루션으로 비밀번호, 자격 증명, 인증서 등을 안전하게 관리하고 저장하는 데 사용할 수 있습니다. 관리 프로젝트 템플릿에서 만든 프로젝트가 이미 있다고 가정하면 Vault를 설치하려면 helmfile.yaml에서 이 줄의 주석을 제거해야 합니다:
HashiCorp Vault는 비밀 관리 솔루션으로 비밀번호, 자격 증명, 인증서 등을 안전하게 관리하고 저장하는 데 사용할 수 있습니다. Vault 설치는 애플리케이션, GitLab CI/CD job 등에 사용되는 자격 증명을 위한 단일 보안 데이터 저장소를 제공하는 데 활용할 수 있습니다. 인프라의 시스템 및 배포에 SSL/TLS 인증서를 제공하는 방법으로도 사용할 수 있습니다. 이러한 모든 자격 증명의 단일 소스로 Vault를 활용하면 모든 민감한 자격 증명 및 인증서에 대한 단일 액세스, 제어 및 감사 가능성 소스를 가짐으로써 더 높은 보안을 제공합니다. 이 기능은 GitLab에 최고 수준의 액세스 및 제어 권한을 부여해야 합니다. 따라서 GitLab이 손상되면 이 Vault 인스턴스의 보안도 손상됩니다. 이 보안 위험을 방지하기 위해 GitLab은 CI와 함께 외부 시크릿을 활용하기 위해 자체 HashiCorp Vault를 사용하는 것을 권장합니다.
관리 프로젝트 템플릿에서 만든 프로젝트가 이미 있다고 가정하면 Vault를 설치하려면 helmfile.yaml에서 이 줄의 주석을 제거해야 합니다:
- path: applications/vault/helmfile.yaml
기본적으로 확장 가능한 스토리지 백엔드 없이 기본 Vault 설정을 받습니다. 이것은 간단한 테스트와 소규모 배포에는 충분하지만 확장할 수 있는 방법에 한계가 있으며 단일 인스턴스 배포이므로 Vault 애플리케이션을 업그레이드하면 다운타임이 발생합니다.
프로덕션 환경에서 Vault를 최적으로 사용하려면 Vault의 내부 구조와 구성 방법에 대한 좋은 이해가 이상적입니다. Vault 구성 가이드, Vault 문서 및 Vault Helm 차트 values.yaml 파일을 읽어 이를 수행할 수 있습니다.
최소한 대부분의 사용자는 다음을 설정합니다:
다음은 Google Cloud Storage 백엔드를 사용하여 자동 잠금 해제를 위한 Google Key Management Service를 구성하고, Vault UI를 활성화하고, 3개의 pod 복제본으로 HA를 활성화하는 값 파일(applications/vault/values.yaml) 예시입니다. 아래의 storage 및 seal 구절은 예시이며 환경에 특정한 설정으로 교체해야 합니다.
# Vault WebUI 활성화
ui:
enabled: true
server:
# HA 모드에서 안전하지 않기 때문에 내장된 데이터 스토리지 볼륨 비활성화
dataStorage:
enabled: false
# HA 모드 활성화
ha:
enabled: true
# 일반 트래픽을 위해 포트 8200에서, 클러스터 간 트래픽을 위해 포트 8201에서 수신하도록 Vault 구성
config: |
listener "tcp" {
tls_disable = 1
address = "[::]:8200"
cluster_address = "[::]:8201"
}
# GCS 버킷 백엔드에 데이터를 저장하도록 Vault 구성
storage "gcs" {
path = "gcs://my-vault-storage/vault-bucket"
ha_enabled = "true"
}
# GKMS 키를 사용하여 스토리지를 잠금 해제하도록 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 pod 중 하나에 셸을 가져옵니다(일반적으로 kubectl 명령줄 도구를 사용하여 수행합니다). pod에 셸을 가져온 후 vault operator init 명령을 실행합니다:
kubectl -n gitlab-managed-apps exec -it vault-0 sh
/ $ vault operator init
이렇게 하면 잠금 해제 키와 초기 루트 토큰이 제공됩니다. Vault의 수명 주기 동안 Vault의 잠금을 해제하는 데 필요하므로 이를 기록해 두고 안전하게 보관하세요.
