클라우드 서비스에 연결

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-Managed형, GitLab Dedicated
  • ID 토큰은 HashiCorp Vault를 포함한 모든 OIDC 공급업체를 지원하기 위해 GitLab 15.7에서 도입되었습니다.
caution
CI_JOB_JWTCI_JOB_JWT_V2는 GitLab 15.9에서 폐기 예정되었으며 GitLab 17.0에서 제거될 예정입니다. 대신 ID 토큰을 사용하십시오.

GitLab CI/CD는 OpenID Connect (OIDC)를 지원하여 빌드 및 배포 작업이 클라우드 자격 증명 및 서비스에 액세스할 수 있습니다. 과거에는 팀이 프로젝트에 비밀을 저장하거나 GitLab 러너 인스턴스에 권한을 적용하여 빌드 및 배포를 했습니다. OIDC를 지원하는 ID 토큰은 CI/CD 작업에서 구성할 수 있어 확장 가능하고 최소 권한 보안 접근 방식을 따를 수 있습니다.

GitLab 15.6 및 그 이전 버전에서는 ID 토큰 대신 CI_JOB_JWT_V2를 사용해야 하지만, 이는 사용자 정의할 수 없습니다.

전제 조건

  • GitLab 계정.
  • OIDC를 지원하는 클라우드 공급업체의 계정을 사용하여 권한 부여 및 역할을 만들 수 있어야 합니다.

ID 토큰은 다음을 포함한 OIDC를 지원하는 클라우드 공급업체를 지원합니다.

  • AWS
  • Azure
  • GCP
  • HashiCorp Vault
note
OIDC를 구성하면 모든 파이프라인에 대상 환경에 대한 JWT 토큰 액세스 권한이 부여됩니다. 파이프라인에 OIDC를 구성하면 파이프라인을 위해 소프트웨어 공급망 보안 검토를 완료해야 합니다. 이때 추가 액세스에 중점을 두어야 합니다. 공급망 공격에 대한 자세한 내용은 DevOps 플랫폼이 공급망 공격으로부터 보호하는 방법을 참조하십시오.

사용 사례

  • GitLab 그룹이나 프로젝트에 비밀을 저장할 필요가 없어집니다. 임시 자격 증명을 클라우드 공급업체에서 검색할 수 있습니다.
  • 그룹, 프로젝트, 브랜치 또는 태그를 포함한 세밀한 GitLab 조건부를 사용하여 클라우드 리소스에 임시 액세스를 제공합니다.
  • CI/CD 작업에서 역할을 조건부 액세스로 정의할 수 있습니다. 과거에는 앱이 staging 또는 production 환경에만 액세스할 수 있는 지정된 GitLab 러너를 사용하여 배포되었습니다. 이는 각 기계에 대한 전용 권한으로 인해 러너가 증가함을 야기했습니다.
  • 인스턴스 러너가 여러 클라우드 계정에 안전하게 액세스할 수 있습니다. 액세스는 파이프라인을 실행하는 사용자에 따라 달라지는 JWT 토큰에 의해 결정됩니다.
  • 임시 자격 증명을 가져와서 기본적으로 비밀을 회전시키는 논리를 만들 필요가 없어집니다.

작동 방식

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

권한 부여 작업 흐름

sequenceDiagram participant GitLab Cloud의 혹은참가자 GitLab->>+Cloud: ID 토큰으로 클라우드 API 호출 Cloud->>+GitLab: 임시 자격 증명 반환 Note right of Cloud: OIDC를 디코딩 및 공개 키(https://gitlab.com/oauth/discovery/keys)로 JWT 확인 및 검증 Note right of Cloud: OIDC에 정의된 audience 유효성 검사 Note right of Cloud: 조건부(sub, aud) 역할 유효성 검사 Note right of Cloud: 크리덴셜 또는 비밀번호 가져오기 GitLab의 참가자 note left of GitLab: 작업 수행 Note right of Cloud: OIDC 토큰 액세스를 위한 클라우드 제공자와 연결
  1. 클라우드(예: AWS, Azure, GCP, Vault)에 OIDC 신원 공급자를 생성합니다.
  2. 클라우드 서비스에 조건부 역할을 생성하여 그룹, 프로젝트, 브랜치 또는 태그로 필터링합니다.
  3. CI/CD 작업에는 JWT 토큰인 ID 토큰이 포함되어 있습니다. 이 토큰을 사용하여 클라우드 API를 통해 인증할 수 있습니다.
  4. 클라우드에서 토큰을 검증하고, 페이로드에서 조건부 역할을 유효성 검사하여 임시 자격 증명을 반환합니다.

OIDC 클라우드 제공자와의 조건부 역할 구성

GitLab 및 OIDC 사이의 신뢰를 구성하려면 클라우드 공급업체에서 JWT를 확인하는 조건부 역할을 생성해야 합니다. 조건부는 JWT를 통해 확인되며, 이는 특히 오디언스와 서브젝트 두 클레임에 대한 신뢰를 생성하기 위해 구성됩니다.

  • 오디언스 또는 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 권한 부여

클라우드 공급업체와 연결하려면 다음 자습서를 참조하십시오: