This page contains information related to upcoming products, features, and functionality. It is important to note that the information presented is for informational purposes only. Please do not rely on this information for purchasing or planning purposes. The development, release, and timing of any products, features, or functionality may be subject to change or delay and remain at the sole discretion of GitLab Inc.
Status Authors Coach DRIs Owning Stage Created
proposed @alberts-gitlab @grzesiek @jocelynjane @shampton devops verify 2023-11-29

GCP Secrets Manager 지원을 위한 CI External Secrets

요약

이 청사진은 GCP Secrets Manager를 CI External Secrets의 소스로 추가하는 아키텍처를 설명합니다.

동기

GitLab CI를 통해 사용자는 외부 소스에서 시크릿을 GitLab CI 작업으로 가져올 수 있습니다. 그 전에는 지원되는 시크릿 매니저로 HashiCorp Vault와 Azure Key Vault가 있었습니다. GCP Secrets Manager는 또 다른 중요한 시크릿 매니저 제품이며, GCP Secrets Manager를 지원되는 시크릿 매니저 디렉터리에 추가하려는 다수의 요청과 피드백이 있었습니다.

목표

이 기능의 목표는 GitLab CI 사용자가 CI 작업에서 GCP Secrets Manager에 저장된 시크릿을 사용할 수 있도록 하는 것입니다.

비목표

이 기능은 다음을 포함하지 않습니다:

  • 다른 GitLab 워크로드에서 GCP Secrets Manager의 시크릿 사용.
  • GitLab을 통해 GCP Secrets Manager나 다른 시크릿 매니저에서 시크릿 관리.

제안

이 기능은 GCP Secrets Manager, GitLab Rails 및 GitLab Runner 간의 밀접한 통합이 필요합니다.

이 기능의 솔루션은 세 가지 주요 부분으로 구성됩니다.

  1. GCP Secrets Manager와의 인증
  2. GitLab Rails에서의 CI 구성
  3. GitLab Runner에 의한 시크릿 접근

GCP Secrets Manager와의 인증

GCP Secrets Manager는 GitLab Runner에서 오는 시크릿 접근 요청을 인증해야 합니다. GitLab Runner는 여러 모드에서 동작할 수 있기 때문에(Runner instance와 시크릿에 액세스할 수 있는 GCP 신원과 직접적인 상관관계가 없습니다), 시크릿에 액세스하기 위한 GCP 신원과 직접적인 상관관계가 없습니다. 이를 해결하기 위해 OIDC와 GCP의 Workload Identity Federation 메커니즘을 사용할 것입니다.

CI 작업은 이미 GitLab 인스턴스에서 발급된 ID 토큰을 포함하는 CI 변수를 통해 OIDC를 지원합니다. 이러한 ID 토큰은 이미 CI 작업의 컨텍스트를 설명하는 클레임을 가지고 있습니다. 예를 들어 group_id, group_path, project_id, project_path와 같은 세부 정보를 포함하고 있습니다.

GCP 측에서는 Workload Identity Federation을 통해 OIDC의 클레임을 통해 특정한 IAM 역할을 부여할 수 있습니다. 특정 group_id 클레임이 GCP Secrets Manager의 특정 시크릿에 액세스할 수 있는 IAM 역할이 부여될 수 있습니다. 이를 통해 GCP 사용자는 GCP Secrets Manager의 시크릿에 대한 세밀한 액세스를 부여할 수 있습니다.

GitLab Rails에서의 CI 구성

GitLab Rails은 사용자가 CI 작업을 구성하는 인터페이스가 될 것입니다. GCP Secrets Manager 통합을 위해, 추가 구성이 필요하며 GitLab Runner와 GCP Secrets Manager 간의 인증을 활성화하기 위한 GCP 특정 정보도 필요합니다.

제안된 CI 키워드는 다음과 같습니다:

job_name:
  id_tokens:
    GCP_SM_ID_TOKEN:
      aud: my-GCP-workload-identity-federation-audience
  secrets:
    DATABASE_PASSWORD:
      gcp_sm:
        name: my-project-secret  # 이것은 GCP Secrets Manager에 정의된 시크릿의 이름입니다.
        version: 1               # 선택 사항: 기본값은 `latest`.
      token: GCP_SM_ID_TOKEN

또한, GitLab Runner는 인증을 수행하고 시크릿에 액세스하기 위해 다음과 같은 정보를 알아야 합니다. 이것들은 작업의 CI 변수로 포함되어야 합니다.

  • GCP 프로젝트 번호 GCP_PROJECT_NUMBER
  • GCP Workload Federation Pool ID GCP_WORKLOAD_FEDERATION_POOL_ID
  • GCP Workload Federation Provider ID GCP_WORKLOAD_FEDERATION_PROVIDER_ID

GitLab Runner에 의한 시크릿 접근

위에서 정의된 작업 사양을 기반으로, GitLab Runner는 다음을 구현해야 합니다:

  1. GCP 보안 토큰 서비스와의 OIDC 인증을 통한 액세스 토큰 획득.
  2. GCP Secrets Manager에 시크릿 액세스 요청을 통한 원하는 시크릿 버전의 페이로드 획득.
  3. 빌드에 시크릿 추가.

대체 솔루션

해당 없음.