Google Cloud 워크로드 신원 연계 및 IAM 정책
- GitLab 16.10에 도입되었으며
google_cloud_support_feature_flag
라는 플래그와 함께 도입되었습니다. 이 기능은 베타 상태입니다.
이 기능은 베타 상태입니다.
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를 사용하여 워크로드 신원 연계를 설정하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 설정 > 통합을 선택합니다.
- Google Cloud IAM 통합을 찾아 구성을 선택합니다.
- 안내 설정을 선택하고 지시 사항에 따릅니다.
Google Cloud CLI 사용
준비 사항:
- 다음 명령어로 워크로드 신원 풀을 생성합니다. 다음 사항을 바꿉니다:
-
<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용 워크로드 신원 풀"
-
- 다음 명령어로 워크로드 신원 풀에 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-uri
를https://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"
-
-
attribute-mapping
매개변수에는 JWT ID 토큰에 포함된 OIDC 사용자 지정 클레임을 IAM 정책에서 액세스를 부여하는 데 사용되는 해당 신원 속성으로의 매핑이 포함되어야 합니다. 자세한 내용은 지원되는 OIDC 사용자 지정 클레임 및 Google Cloud에 대한 액세스 제어을 참조하십시오.
특정 GitLab 프로젝트 또는 그룹으로의 신원 토큰 액세스를 제한하려면 속성 조건을 사용하십시오. 프로젝트의 경우 assertion.project_id
를 사용하고 그룹의 경우 assertion.namespace_id
를 사용하십시오. 자세한 내용은 Google Cloud 문서의 속성 조건 정의 및 워크로드 신원 제공자의 속성 조건 업데이트를 참조하십시오.
워크로드 신원 풀과 제공자를 생성한 후에 GitLab에서 설정을 완료하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 설정 > 통합을 선택합니다.
- Google Cloud IAM 통합을 찾아 구성을 선택합니다.
- 매뉴얼 설정을 선택하고 필드를 완성합니다.
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 토큰 클레임 문서를 참조하세요.