클라우드 서비스에 연결하기
GitLab CI/CD는 클라우드 자격 증명 및 서비스에 접근할 수 있도록 OpenID Connect (OIDC)를 지원합니다. 과거에는 팀이 프로젝트에 비밀을 저장하거나 GitLab Runner 인스턴스에 권한을 적용했습니다. OIDC를 지원하는 ID 토큰은 CI/CD 작업에서 구성할 수 있어 확장 가능하고 최소 권한 보안 접근 방식을 따를 수 있습니다.
GitLab 15.6 이전에는 ID 토큰 대신 CI_JOB_JWT_V2
를 사용해야 하지만 이를 사용자 정의할 수 없습니다. 또한, GitLab 14.6 이전에는 제한적인 지원을 갖는 CI_JOB_JWT
를 사용해야 합니다.
전제 조건
- GitLab 계정
- OIDC를 지원하는 클라우드 제공업체에 대한 액세스
ID 토큰은 AWS, Azure, GCP, HashiCorp Vault를 포함한 OIDC를 지원하는 클라우드 제공업체를 지원합니다.
사용 사례
- GitLab 그룹이나 프로젝트에 비밀을 저장할 필요 없이 OIDC를 통해 임시 자격 증명을 클라우드 제공업체에서 검색할 수 있음
- 그룹, 프로젝트, 브랜치 또는 태그와 같은 세부 조건을 포함한 GitLab 조건에 따라 클라우드 리소스에 임시 액세스를 제공함
- CI/CD 작업에서 환경에 조건부 액세스를 정의하여 권한의 분리를 정의할 수 있음. 과거에는 응용 프로그램이 staging 또는 production 환경에만 액세스할 수 있는 지정된 GitLab Runner로 배포되었습니다. 이는 각 기계가 전용 권한을 갖는 Runner 확산으로 이어졌습니다.
- 인스턴스 Runner가 파이프라인을 실행하는 사용자에 따라 여러 클라우드 계정에 안전하게 액세스할 수 있음. 액세스는 파이프라인을 실행하는 사용자에게 특정한 JWT 토큰을 통해 결정됩니다.
- 임시 자격 증명을 기본 설정으로 검색하여 비밀을 회전시키는 논리를 생성할 필요를 없애줌
작동 방식
각 작업은 클라우드 API를 호출할 수 있는 ID 토큰을 포함하는 CI/CD 변수로 구성할 수 있습니다. 이러한 JWT는 AWS, Azure, GCP 또는 Vault와 같은 OIDC를 지원하는 클라우드 제공업체와의 인증에 사용할 수 있습니다.
인가 작업 흐름
- 클라우드(예: AWS, Azure, GCP, Vault)에 OIDC 신원 공급업체 생성
- 클라우드 서비스에서 조건부 역할을 생성하여 그룹, 프로젝트, 브랜치 또는 태그로 필터링
- CI/CD 작업에는 JWT 토큰인 ID 토큰이 포함되어 있으며, 이를 사용하여 클라우드 API에 권한 부여
- 클라우드는 토큰을 검증하고, payload에서 조건부 역할을 유효성 검사한 뒤 임시 자격 증명을 반환
OIDC 클레임을 사용한 조건부 역할 구성
GitLab과 OIDC 간의 신뢰를 구성하려면 클라우드 제공업체에서 JWT를 확인하는 조건부 역할을 생성해야 합니다. 조건부는 JWT를 기반으로 권한을 생성하기 위해 다음과 같은 두 가지 클레임을 특별히 검증합니다: audience 또는 sub.
-
Audience 또는
aud
: ID 토큰의 일부로 구성됨:job_needing_oidc_auth: id_tokens: OIDC_TOKEN: aud: https://oidc.provider.com script: - echo $OIDC_TOKEN
-
Subject 또는
sub
: 그룹, 프로젝트, 브랜치 및 태그를 포함하는 GitLab CI/CD 워크플로를 설명하는 메타데이터의 연결.sub
필드의 형식은 다음과 같습니다:project_path:{group}/{project}:ref_type:{type}:ref:{branch_name}
필터 유형 | 예시 |
---|---|
모든 브랜치로 필터링 | 와일드카드 지원됨. project_path:mygroup/myproject:ref_type:branch:ref:*
|
특정 프로젝트의 메인 브랜치로 필터링 | project_path:mygroup/myproject:ref_type:branch:ref:main
|
그룹 아래의 모든 프로젝트로 필터링 | 와일드카드 지원됨. project_path:mygroup/*:ref_type:branch:ref:main
|
Git 태그로 필터링 | 와일드카드 지원됨. project_path:mygroup/*:ref_type:tag:ref:1.0
|
클라우드 제공업체와의 OIDC 인가
클라우드 제공업체와 연결하려면 다음 튜토리얼을 참조하세요: