클라우드 서비스에 연결하기

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated
caution
CI_JOB_JWTCI_JOB_JWT_V2가 GitLab 15.9에서 폐기됐으며 GitLab 17.0에서 제거될 예정입니다. 대신 ID 토큰을 사용하세요.

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를 지원하는 클라우드 제공업체를 지원합니다.

note
OIDC를 구성하면 모든 파이프라인에서 대상 환경으로의 JWT 토큰 액세스가 가능해집니다. 파이프라인에 OIDC를 구성하면 해당 확장적 액세스를 중점으로 한 소프트웨어 공급망 보안 검토를 완료해야 합니다. 소프트웨어 공급망 공격에 대한 자세한 내용은 데브옵스 플랫폼이 공급망 공격에 대비하는 방법을 참조하세요.

사용 사례

  • GitLab 그룹이나 프로젝트에 비밀을 저장할 필요 없이 OIDC를 통해 임시 자격 증명을 클라우드 제공업체에서 검색할 수 있음
  • 그룹, 프로젝트, 브랜치 또는 태그와 같은 세부 조건을 포함한 GitLab 조건에 따라 클라우드 리소스에 임시 액세스를 제공함
  • CI/CD 작업에서 환경에 조건부 액세스를 정의하여 권한의 분리를 정의할 수 있음. 과거에는 응용 프로그램이 staging 또는 production 환경에만 액세스할 수 있는 지정된 GitLab Runner로 배포되었습니다. 이는 각 기계가 전용 권한을 갖는 Runner 확산으로 이어졌습니다.
  • 인스턴스 Runner가 파이프라인을 실행하는 사용자에 따라 여러 클라우드 계정에 안전하게 액세스할 수 있음. 액세스는 파이프라인을 실행하는 사용자에게 특정한 JWT 토큰을 통해 결정됩니다.
  • 임시 자격 증명을 기본 설정으로 검색하여 비밀을 회전시키는 논리를 생성할 필요를 없애줌

작동 방식

각 작업은 클라우드 API를 호출할 수 있는 ID 토큰을 포함하는 CI/CD 변수로 구성할 수 있습니다. 이러한 JWT는 AWS, Azure, GCP 또는 Vault와 같은 OIDC를 지원하는 클라우드 제공업체와의 인증에 사용할 수 있습니다.

인가 작업 흐름

sequenceDiagram participant GitLab Note right of Cloud: OIDC 신원 공급업체 생성 Note right of Cloud: 조건부로 역할 생성 Note left of GitLab: ID 토큰이 포함된 CI/CD 작업 GitLab->>+Cloud: ID 토큰으로 클라우드 API 호출 Note right of Cloud: 공개 키 (https://gitlab.com/oauth/discovery/keys)로 JWT 디코딩 및 확인 Note right of Cloud: OIDC에서 정의된 audience 유효성 검사 Note right of Cloud: 조건부(sub, aud) 역할 유효성 검사 Note right of Cloud: 자격 증명 생성 또는 비밀 검색 Cloud->>GitLab: 임시 자격 증명 반환 Note left of GitLab: 작업 수행
  1. 클라우드(예: AWS, Azure, GCP, Vault)에 OIDC 신원 공급업체 생성
  2. 클라우드 서비스에서 조건부 역할을 생성하여 그룹, 프로젝트, 브랜치 또는 태그로 필터링
  3. CI/CD 작업에는 JWT 토큰인 ID 토큰이 포함되어 있으며, 이를 사용하여 클라우드 API에 권한 부여
  4. 클라우드는 토큰을 검증하고, 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 인가

클라우드 제공업체와 연결하려면 다음 튜토리얼을 참조하세요: