클라우드 서비스 연결
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
CI_JOB_JWT 및 CI_JOB_JWT_V2는 GitLab 15.9에서 지원 중단되었으며 GitLab 17.0에서 제거될 예정입니다. GitLab CI/CD는 OpenID Connect(OIDC)를 지원하여 빌드 및 배포 job에 클라우드 자격 증명 및 서비스에 대한 액세스를 제공합니다.
CI_JOB_JWT 및 CI_JOB_JWT_V2는 GitLab 15.9에서 지원 중단되었으며
GitLab 17.0에서 제거될 예정입니다. 대신 ID 토큰을 사용하세요.
GitLab CI/CD는 OpenID Connect(OIDC)를 지원하여 빌드 및 배포 job에 클라우드 자격 증명 및 서비스에 대한 액세스를 제공합니다. 역사적으로 팀들은 프로젝트에 비밀을 저장하거나 GitLab 러너 인스턴스에 권한을 적용하여 빌드 및 배포했습니다. OIDC 지원 ID 토큰은 CI/CD job에서 구성 가능하여 확장 가능하고 최소 권한 보안 접근 방식을 따를 수 있습니다.
GitLab 15.6 이하에서는 ID 토큰 대신 CI_JOB_JWT_V2를 사용해야 하지만 사용자 지정이 불가능합니다.
사전 요구 사항#
- GitLab 계정.
- 권한 부여를 구성하고 역할을 만들기 위해 OIDC를 지원하는 클라우드 공급자에 대한 액세스.
ID 토큰은 다음을 포함한 OIDC가 있는 클라우드 공급자를 지원합니다:
- AWS
- Azure
- GCP
- HashiCorp Vault
OIDC를 구성하면 모든 파이프라인에 대해 대상 환경에 JWT 토큰 액세스가 가능합니다. 파이프라인에 대해 OIDC를 구성할 때 추가 액세스에 중점을 두어 파이프라인에 대한 소프트웨어 공급망 보안 검토를 완료해야 합니다. 공급망 공격에 대한 자세한 내용은 DevOps Platform이 공급망 공격에 대한 보호를 어떻게 돕는가를 참조하세요.
사용 사례#
- GitLab 그룹 또는 프로젝트에 비밀을 저장할 필요가 없습니다. 임시 자격 증명은 OIDC를 통해 클라우드 공급자에서 가져올 수 있습니다.
- 그룹, 프로젝트, 브랜치 또는 태그를 포함하는 세분화된 GitLab 조건으로 클라우드 리소스에 대한 임시 액세스를 제공합니다.
- 환경에 대한 조건부 액세스로 CI/CD job에서 직무 분리를 정의할 수 있습니다. 역사적으로 앱은 스테이징 또는 프로덕션 환경에만 액세스할 수 있는 전용 GitLab 러너로 배포되었습니다. 이는 각 머신이 전용 권한을 갖게 되어 러너 증가로 이어졌습니다.
- 인스턴스 러너가 여러 클라우드 계정에 안전하게 액세스할 수 있습니다. 액세스는 파이프라인을 실행하는 사용자에게 특정한 JWT 토큰에 의해 결정됩니다.
- 기본적으로 임시 자격 증명을 가져와 비밀 순환 논리를 만들 필요가 없습니다.
클라우드 서비스의 ID 토큰 인증#
각 job은 ID 토큰으로 구성할 수 있으며, 이는 토큰 페이로드를 포함하는 CI/CD 변수로 제공됩니다. 이러한 JWT는 AWS, Azure, GCP 또는 Vault와 같은 OIDC 지원 클라우드 공급자로 인증하는 데 사용할 수 있습니다.
권한 부여 워크플로우#
소스 코드 보기
%%{init: { "fontFamily": "GitLab Sans" }}%%
sequenceDiagram
accTitle: Authorization workflow
accDescr: The flow of authorization requests between GitLab and a cloud provider.
participant GitLab
Note right of Cloud: Create OIDC identity provider
Note right of Cloud: Create role with conditionals
Note left of GitLab: CI/CD job with ID token
GitLab->>+Cloud: Call cloud API with ID token
Note right of Cloud: Decode & verify JWT with public key (https://gitlab.com/oauth/discovery/keys)
Note right of Cloud: Validate audience defined in OIDC
Note right of Cloud: Validate conditional (sub, aud) role
Note right of Cloud: Generate credential or fetch secret
Cloud->>GitLab: Return temporary credential
Note left of GitLab: Perform operation</code></pre></details></div>
- 클라우드에서 OIDC ID 공급자를 만듭니다(예: AWS, Azure, GCP, Vault).
- 그룹, 프로젝트, 브랜치 또는 태그로 필터링하는 클라우드 서비스에 조건부 역할을 만듭니다.
- CI/CD job에는 JWT 토큰인 ID 토큰이 포함됩니다. 이 토큰을 클라우드 API와의 권한 부여에 사용할 수 있습니다.
- 클라우드는 토큰을 확인하고 페이로드에서 조건부 역할을 검증하여 임시 자격 증명을 반환합니다.
OIDC 클레임으로 조건부 역할 구성#
GitLab과 OIDC 간의 신뢰를 구성하려면 JWT에 대해 확인하는 클라우드 공급자에 조건부 역할을 만들어야 합니다.
조건은 JWT에 대해 검증되어 대상(audience)과 주체(subject)의 두 클레임에 대한 신뢰를 구체적으로 만듭니다.
-
대상(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:*
특정 프로젝트, main 브랜치로 필터링
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 권한 부여#
클라우드 공급자와 연결하려면 다음 튜토리얼을 참조하세요:
