Vault 설치하기 클러스터 관리 프로젝트와 함께

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

HashiCorp Vault는 비밀번호, 자격 증명, 인증서 등을 안전하게 관리하고 저장할 수 있는 비밀 관리 솔루션입니다. Vault 설치는 귀하의 애플리케이션, GitLab CI/CD 작업 등에서 사용되는 자격 증명에 대한 단일 안전한 데이터 저장소를 제공하는 데 활용될 수 있습니다. 또한 귀하의 인프라 내에서 시스템 및 배포에 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 Key Management Service를 자동 개봉을 위해 구성하고 Google Cloud Storage 백엔드를 사용하는 Vault의 예제 값 파일(applications/vault/values.yaml)입니다. Vault UI를 활성화하고 3개의 pod 복제본으로 HA를 활성화합니다. 아래의 storageseal 구문은 예시이며, 귀하의 환경에 맞는 설정으로 교체해야 합니다.

# Vault WebUI 활성화
ui:
  enabled: true
server:
  # 고가용성 모드에 안전하지 않으므로 내장 데이터 저장소 볼륨을 비활성화합니다.
  dataStorage:
    enabled: false
  # 고가용성 모드 활성화
  ha:
    enabled: true
    # 정상 트래픽을 위해 포트 8200에서 수신하고, 클러스터 간 트래픽을 위해 포트 8201에서 수신하도록 Vault를 구성합니다.
    config: |
      listener "tcp" {
        tls_disable = 1
        address = "[::]:8200"
        cluster_address = "[::]:8201"
      }
      # Vault가 GCS 버킷 백엔드에 데이터를 저장하도록 구성합니다.
      storage "gcs" {
        path = "gcs://my-vault-storage/vault-bucket"
        ha_enabled = "true"
      }
      # Vault가 GKMS 키를 사용하여 저장소를 개봉하도록 구성합니다.
      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의 전체 수명 주기 동안 개봉하는 데 필요합니다.