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

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated
  • GitLab 12.10에서 소개된 CI_JOB_JWT 변수를 사용하여 Vault에서 시크릿을 읽을 수 있습니다.
  • GitLab 14.7에서 소개된 추가 OIDC 공급자를 지원하기 위한 CI_JOB_JWT_V2 변수입니다.
  • GitLab 15.7에서 소개된 HashiCorp Vault를 포함한 모든 OIDC 공급자를 지원하기 위한 ID 토큰입니다.
caution
CI_JOB_JWTCI_JOB_JWT_V2GitLab 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 계정.
  • 권한 부여를 구성하고 역할을 생성할 OpenID Connect (OIDC)을 지원하는 클라우드 공급자에 대한 액세스 권한.

ID 토큰은 다음과 같은 OIDC를 지원하는 클라우드 공급자를 지원합니다:

  • AWS
  • Azure
  • GCP
  • HashiCorp Vault
note
OIDC를 구성하면 모든 파이프라인은 대상 환경에 대한 JWT 토큰 액세스를 가능하게 합니다. 파이프라인에 OIDC를 구성하면 파이프라인에 대한 소프트웨어 공급망 보안 검토를 완료해야 하며 추가 액세스에 중점을 두어야 합니다. 공급망 공격에 대한 자세한 정보는 DevOps 플랫폼이 어떻게 공급망 공격에 대비하는지를 참조하십시오.

사용 사례

  • GitLab 그룹이나 프로젝트에 시크릿을 저장할 필요가 없어집니다. 임시 자격 증명은 OIDC를 통해 클라우드 공급자에서 검색할 수 있습니다.
  • 그룹, 프로젝트, 브랜치 또는 태그를 포함한 GitLab 조건부를 사용하여 클라우드 리소스에 임시 액세스를 제공합니다.
  • 조건부 액세스로 CI/CD 작업에서 역할을 정의할 수 있으며, 앱이 이전에는 스테이징 또는 프로덕션 환경에만 액세스할 수 있는 특정한 GitLab Runner를 사용했습니다. 이는 각 기계가 전용 권한을 갖기 때문에 Runner 증가로 이어졌습니다.
  • 인스턴스 Runner가 특정 사용자를 위한 JWT 토큰에 따라 여러 클라우드 계정에 안전하게 액세스할 수 있습니다.
  • 임시 자격 증명을 기본값으로 검색하여 시크릿을 회전시키는 논리를 작성할 필요가 없어집니다.

작동 방식

각 작업은 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. 클라우드는 토큰을 확인하고 페이로드에서 조건부 역할을 확인하여 임시 자격 증명을 반환합니다.

OIDC 클레임을 사용한 조건부 역할 구성

GitLab과 OIDC 사이의 신뢰를 구성하려면, 공급업체(cloud provider)에서 JWT를 확인하는 조건부 역할을 만들어야 합니다. 이 조건은 JWT를 통해 검증되며, 특히 청중(audience) 및 주제(subject) 두 가지 클레임에 대한 신뢰를 구체적으로 생성합니다.

  • 청중 또는 aud: ID 토큰의 일부로 구성됩니다:

    job_needing_oidc_auth:
      id_tokens:
        OIDC_TOKEN:
          aud: https://oidc.provider.com
      script:
        - echo $OIDC_TOKEN
    
  • 주제 또는 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 인가

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