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. As with all projects, the items mentioned on this page are subject to change or delay. The development, release, and timing of any products, features, or functionality 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

CI 외부 시크릿을 위한 GCP Secrets Manager 지원

요약

이 설계안은 CI 외부 시크릿으로 GCP Secrets Manager를 추가하는 아키텍처를 설명합니다.

동기

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는 다양한 모드(GitLab.com SaaS 러너, SaaS with self-managed 러너, GitLab Self-Managed 등)에서 작동할 수 있기 때문에 러너 인스턴스와 시크릿에 액세스할 수 있는 GCP 신원 사이에는 직접적인 상관 관계가 없습니다.

이를 해결하기 위해 OIDC와 GCP의 Workload Identity Federation 메커니즘을 사용하여 요청을 허가할 것입니다.

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

GCP 측에서 Workload Identity Federation은 OIDC를 사용하여 ID 토큰으로 표현된 외부 신원에게 GCP IAM 역할을 부여할 수 있습니다. Workload Identity Federation을 통해 GCP 사용자는 OIDC ‘claim’를 통해 특정 IAM 역할을 특정 주체에게 부여할 수 있습니다. 예를 들어, 특정 ‘group_id’ claim은 GCP Secrets Manager의 특정 시크릿 집합에 액세스할 IAM 역할을 부여할 수 있습니다. 이를 통해 GCP 사용자는 GCP Secrets Manager의 시크릿에 대한 세밀한 액세스를 부여할 수 있습니다.

GitLab Rails에서의 CI 구성

GitLab Rails은 사용자가 CI 작업을 구성하는 인터페이스가 될 것입니다. GCP Secrets Manager 통합을 위해 외부 시크릿 소스로 GCP Secrets Manager를 지정하고, GitLab Runner와 GCP Secrets Manager 간의 인증을 활성화하기 위해 추가 구성이 필요합니다.

제안된 CI 키워드는 다음과 같을 것입니다:

job_name:
  id_tokens:
    GCP_SM_ID_TOKEN:
      aud: 내-GCP-워크로드-아이덴티티-페더레이션-청중
  secrets:
    DATABASE_PASSWORD:
      gcp_sm:
        name: 내-프로젝트-시크릿  # 이것은 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. 빌드에 시크릿 추가

대체 솔루션

없음.