Google Cloud 워크로드 신원 연계 및 IAM 정책

Tier: Free, Premium, Ultimate Offering: GitLab.com Status: Beta
GitLab.com에서 이 기능은 일부 사용자를 대상으로 이용 가능합니다. 그러나 GitLab Dedicated에서는 이 기능을 사용할 수 없습니다.

이 기능은 베타 상태입니다.

Google Cloud Artifact Management 통합과 같은 Google Cloud 통합을 사용하려면 워크로드 신원 풀과 제공자를 생성 및 구성해야 합니다. Google Cloud 통합은 워크로드 신원 연계를 사용하여 OpenID Connect (OIDC)를 통해 JSON Web Token (JWT) 토큰을 사용하여 GitLab 워크로드가 Google Cloud 리소스에 액세스할 수 있도록 합니다.

워크로드 신원 연계 생성 및 구성

워크로드 신원 연계를 설정하려면 다음 중 하나를 사용할 수 있습니다:

  • GitLab UI를 사용하여 안내 설정을 수행합니다.
  • Google Cloud CLI를 사용하여 워크로드 신원 연계를 매뉴얼으로 설정합니다.

GitLab UI 사용

GitLab UI를 사용하여 워크로드 신원 연계를 설정하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 설정 > 통합을 선택합니다.
  3. Google Cloud IAM 통합을 찾아 구성을 선택합니다.
  4. 안내 설정을 선택하고 지시 사항에 따릅니다.
note
알려진 문제로 인해 Google Cloud IAM 통합 페이지의 필드가 안내 설정 스크립트를 실행한 후에 채워지지 않을 수 있습니다. 필드가 비어 있는 경우 페이지를 새로 고침하세요. 자세한 내용은 문제 448831을 참조하십시오.

Google Cloud CLI 사용

준비 사항:

  • Google Cloud CLI는 설치 및 인증되어 있어야 합니다.
  • Google Cloud에서 워크로드 신원 연계를 관리하기 위한 권한을 가지고 있어야 합니다.
  1. 다음 명령어로 워크로드 신원 풀을 생성합니다. 다음 사항을 바꿉니다:
    • <your_google_cloud_project_id>Google Cloud 프로젝트 ID로 대체합니다. 보안을 강화하기 위해 리소스 및 CI/CD 프로젝트와 별도로 신원 관리 전용 프로젝트를 사용합니다.
    • <your_identity_pool_id>를 사용할 풀의 ID로 대체합니다. 이 값은 4~32자의 소문자, 숫자 또는 하이픈이어야 합니다. 중복을 피하기 위해 고유한 ID를 사용합니다. GitLab 프로젝트 ID 또는 프로젝트 경로가 포함되어 있는 것이 권장됩니다. 예를 들어 gitlab-my-project-name입니다.
    gcloud iam workload-identity-pools create <your_identity_pool_id> \
             --project="<your_google_cloud_project_id>" \
             --location="global" \
             --display-name="GitLab project ID용 워크로드 신원 풀"
    
  2. 다음 명령어로 워크로드 신원 풀에 OIDC 제공자를 추가합니다. 다음 사항을 바꿉니다:
    • <your_identity_provider_id>를 제공자에 사용할 ID로 대체합니다. 이 값은 신원 풀 내에서 고유한 ID여야 하며 4~32자의 소문자, 숫자 또는 하이픈이어야 합니다. 신원 풀 내에서 고유한 ID를 사용합니다. 예를 들어 gitlab입니다.
    • <your_google_cloud_project_id>Google Cloud 프로젝트 ID로 대체합니다.
    • <your_identity_pool_id>를 이전 단계에서 생성한 워크로드 신원 풀의 ID로 대체합니다.
    • <your_issuer_uri>를 신원 제공자 발급자 URI로 대체합니다. 단순히 IAM 통합 페이지에서 매뉴얼 설정을 선택할 때 복사한 URI여아 하며 정확히 일치해야 합니다. 이 매개변수에는 루트 그룹의 경로가 포함되어야 합니다. 예를 들어 프로젝트가 my-root-group/my-sub-group/project-a에 속해 있다면 issuer-urihttps://auth.gcp.gitlab.com/oidc/my-root-group로 설정해야 합니다.
    gcloud iam workload-identity-pools providers create-oidc "<your_identity_provider_id>" \
          --location="global" \
          --project="<your_google_cloud_project_id>" \
          --workload-identity-pool="<your_identity_pool_id>" \
          --issuer-uri="<your_issuer_uri>" \
          --display-name="GitLab OIDC provider" \
          --attribute-mapping="attribute.guest_access=assertion.guest_access,\
    attribute.reporter_access=assertion.reporter_access,\
    attribute.developer_access=assertion.developer_access,\
    attribute.maintainer_access=assertion.maintainer_access,\
    attribute.owner_access=assertion.owner_access,\
    attribute.namespace_id=assertion.namespace_id,\
    attribute.namespace_path=assertion.namespace_path,\
    attribute.project_id=assertion.project_id,\
    attribute.project_path=assertion.project_path,\
    attribute.user_id=assertion.user_id,\
    attribute.user_login=assertion.user_login,\
    attribute.user_email=assertion.user_email,\
    attribute.user_access_level=assertion.user_access_level,\
    google.subject=assertion.sub"
    

특정 GitLab 프로젝트 또는 그룹으로의 신원 토큰 액세스를 제한하려면 속성 조건을 사용하십시오. 프로젝트의 경우 assertion.project_id를 사용하고 그룹의 경우 assertion.namespace_id를 사용하십시오. 자세한 내용은 Google Cloud 문서의 속성 조건 정의워크로드 신원 제공자의 속성 조건 업데이트를 참조하십시오.

워크로드 신원 풀과 제공자를 생성한 후에 GitLab에서 설정을 완료하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 설정 > 통합을 선택합니다.
  3. Google Cloud IAM 통합을 찾아 구성을 선택합니다.
  4. 매뉴얼 설정을 선택하고 필드를 완성합니다.
    • 이 통합을 위해 생성한 워크로드 신원 풀 및 제공자가 있는 Google Cloud 프로젝트의 프로젝트 ID입니다. 예: my-sample-project-191923.
    • 동일한 Google Cloud 프로젝트의 프로젝트 번호입니다. 예: 314053285323.
    • 이 통합을 위해 만든 워크로드 신원 풀의 풀 ID입니다.
    • 이 통합을 위해 만든 워크로드 신원 제공자의 제공자 ID입니다.

OIDC 사용자 정의 클레임

ID 토큰에는 다음과 같은 사용자 정의 클레임이 포함됩니다:

클레임 이름 시점 설명
namespace_id 프로젝트 이벤트 발생 시 그룹 또는 사용자 수준 네임스페이스의 ID입니다.
namespace_path 프로젝트 이벤트 발생 시 그룹 또는 사용자 수준 네임스페이스의 경로입니다.
project_id 프로젝트 이벤트 발생 시 프로젝트의 ID입니다.
project_path 프로젝트 이벤트 발생 시 프로젝트의 경로입니다.
root_namespace_id 그룹 이벤트 발생 시 루트 그룹 또는 사용자 수준 네임스페이스의 ID입니다.
root_namespace_path 그룹 이벤트 발생 시 루트 그룹 또는 사용자 수준 네임스페이스의 경로입니다.
user_id 사용자 트리거 이벤트 발생 시 사용자의 ID입니다.
user_login 사용자 트리거 이벤트 발생 시 사용자의 사용자 이름입니다.
user_email 사용자 트리거 이벤트 발생 시 사용자의 이메일 주소입니다.
ci_config_ref_uri CI/CD 파이프라인 실행 중 최상위 CI 파이프라인 정의의 참조 경로입니다.
ci_config_sha CI/CD 파이프라인 실행 중 ci_config_ref_uri의 Git 커밋 SHA입니다.
job_id CI/CD 파이프라인 실행 중 CI 작업의 ID입니다.
pipeline_id CI/CD 파이프라인 실행 중 CI 파이프라인의 ID입니다.
pipeline_source CI/CD 파이프라인 실행 중 CI 파이프라인 출처입니다.
project_visibility CI/CD 파이프라인 실행 중 파이프라인이 실행되는 프로젝트의 가시성입니다.
ref CI/CD 파이프라인 실행 중 CI 작업의 Git 참조입니다.
ref_path CI/CD 파이프라인 실행 중 CI 작업의 완전히 정규화된 참조입니다.
ref_protected CI/CD 파이프라인 실행 중 Git 참조가 보호되었는지 여부입니다.
ref_type CI/CD 파이프라인 실행 중 Git 참조 유형입니다.
runner_environment CI/CD 파이프라인 실행 중 CI 작업에서 사용하는 실행자 유형입니다.
runner_id CI/CD 파이프라인 실행 중 CI 작업을 실행하는 실행자의 ID입니다.
sha CI/CD 파이프라인 실행 중 CI 작업의 커밋 SHA입니다.
environment CI/CD 파이프라인 실행 중 CI 작업이 배포된 환경입니다.
environment_protected CI/CD 파이프라인 실행 중 배포된 환경이 보호되었는지 여부입니다.
environment_action CI/CD 파이프라인 실행 중 CI 작업에서 지정된 환경 작업입니다.
deployment_tier CI/CD 파이프라인 실행 중 CI 작업이 지정한 환경의 배포 티어입니다.
user_access_level 사용자 트리거 이벤트 발생 시 사용자의 역할로 guest, reporter, developer, maintainer, owner 값이 있습니다.
guest_access 사용자 트리거 이벤트 발생 시 사용자가 적어도 guest 역할을 갖고 있는지 여부를 나타냅니다. “true” 또는 “false”로 값이 있습니다.
reporter_access 사용자 트리거 이벤트 발생 시 사용자가 적어도 reporter 역할을 갖고 있는지 여부를 나타냅니다. “true” 또는 “false”로 값이 있습니다.
developer_access 사용자 트리거 이벤트 발생 시 사용자가 적어도 developer 역할을 갖고 있는지 여부를 나타냅니다. “true” 또는 “false”로 값이 있습니다.
maintainer_access 사용자 트리거 이벤트 발생 시 사용자가 적어도 maintainer 역할을 갖고 있는지 여부를 나타냅니다. “true” 또는 “false”로 값이 있습니다.
owner_access 사용자 트리거 이벤트 발생 시 사용자가 적어도 owner 역할을 갖고 있는지 여부를 나타냅니다. “true” 또는 “false”로 값이 있습니다.

이러한 클레임들은 ID 토큰 클레임의 슈퍼셋입니다. 모든 값은 문자열 유형입니다. 자세한 내용 및 예제 값을 확인하려면 ID 토큰 클레임 문서를 참조하세요.