Google Cloud 워크로드 ID 연동 및 IAM 정책
- 소개된 내용은 GitLab 16.10에 포함되어 있습니다.
google_cloud_support_feature_flag
라는 플래그로 Beta 단계에 있습니다.
이 기능은 Beta 단계에 있습니다. 이 기능을 테스트하는 사용자 목록에 추가하려면 대기 목록에 가입하세요.
Google Cloud Artifact Registry와 같은 Google Cloud 통합을 사용하려면 워크로드 ID 풀 및 제공자를 생성하고 구성해야 합니다. Google Cloud 통합은 워크로드 ID 연동을 사용하여 JSON Web Token (JWT) 토큰을 통해 GitLab 워크로드가 Google Cloud 리소스에 OpenID Connect (OIDC)를 통해 액세스할 수 있도록 합니다.
워크로드 ID 연동 생성 및 구성
워크로드 ID 연동을 설정하는 방법은 다음 중 하나를 사용할 수 있습니다:
- GitLab UI를 사용하여 안내 받기.
- Google Cloud CLI를 사용하여 워크로드 ID 연동을 수동으로 설정하기.
GitLab UI 사용
GitLab UI를 사용하여 워크로드 ID 연동을 설정하려면 다음 단계를 수행하세요:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 설정 > 통합을 선택합니다.
- Google Cloud IAM 통합을 찾아 구성을 선택합니다.
- 안내 설정을 선택하고 지시 사항을 따릅니다.
참고: 알려진 문제로 인해, Google Cloud IAM 통합 페이지의 필드가 안내 설정 스크립트를 실행한 후에 채워지지 않을 수 있습니다. 필드가 비어 있는 경우 페이지를 새로 고침하십시오. 자세한 내용은 issue 448831을 참조하십시오.
Google Cloud CLI 사용
필수 조건:
- Google Cloud CLI를 설치하고 Google Cloud에 대해 인증되어 있어야 합니다.
- Google Cloud의 워크로드 ID 연동을 관리하기 위한 권한을 가지고 있어야 합니다.
-
다음 명령을 사용하여 워크로드 ID 풀을 생성합니다. 다음 값을 대체하십시오:
-
<your_google_cloud_project_id>
: Google Cloud 프로젝트 ID. 보안을 개선하기 위해 리소스 및 CI/CD 프로젝트와는 별도의 프로젝트를 사용할 것을 권장합니다. -
<your_identity_pool_id>
: 풀에 사용할 ID로, 4~32자의 영문 소문자, 숫자 또는 하이픈을 사용해야 합니다. 충돌을 피하기 위해 고유한 ID를 사용해야 합니다. IAM 정책 관리를 용이하게 하기 위해 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 프로젝트 ID를 위한 워크로드 ID 풀"
-
-
다음 명령을 사용하여 워크로드 ID 풀에 OIDC 제공자를 추가합니다. 다음 값을 대체하십시오:
-
<your_identity_provider_id>
: 제공자에 사용할 ID로, 4~32자의 영문 소문자, 숫자 또는 하이픈을 사용해야 합니다. 풀 내에서 고유한 ID를 사용해야 합니다. 예:gitlab
. -
<your_google_cloud_project_id>
: Google Cloud 프로젝트 ID. -
<your_identity_pool_id>
: 이전 단계에서 생성한 워크로드 ID 풀의 ID. -
<your_issuer_uri>
: ID 제공자 발급자 URI로, IAM 통합 페이지를 선택하여 수동 설정을 선택할 때 복사할 수 있으며, 정확히 일치해야 합니다. 이 매개변수에는 루트 그룹의 경로를 포함해야 합니다. 예를 들어, 프로젝트가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 제공자" \ --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 정책에 액세스를 부여하는 데 사용되는 해당 ID 속성으로의 매핑이 포함되어야 합니다. 소유권 및 액세스 수준을 구성하는 사용자 지정 클레임의 목록에 대해서는 지원되는 OIDC 사용자 지정 클레임 목록을 참조하십시오. 클레임을 IAM 정책에 매핑하는 자세한 내용은 Google Cloud 액세스 제어을 참조하십시오.
-
워크로드 ID 풀과 제공자를 생성한 후, 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입니다. |
ref_path
| CI/CD 파이프라인 실행 중 | CI 작업에 대한 완전한 참조입니다. |
ref_protected
| CI/CD 파이프라인 실행 중 | Git ref가 보호되었는지 여부입니다. |
ref_type
| CI/CD 파이프라인 실행 중 | Git ref 유형입니다. |
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 토큰 클레임 문서를 참조하세요.