GitLab CI/CD에서 Azure Key Vault 비밀을 사용하기

Tier: 프리미엄, 얼티메이트 Offering: GitLab.com, Self-managed, GitLab Dedicated
  • GitLab 및 GitLab Runner 16.3에서 도입. 문제 424746로 인해이 기능이 예상대로 작동하지 않았습니다.
  • 문제 424746가 해결되어이 기능이 GitLab Runner 16.6에서 일반적으로 사용 가능하게 되었습니다.

당신은 GitLab CI/CD 파이프라인에서 Azure Key Vault에 저장된 비밀을 사용할 수 있습니다.

전제 조건:

  • Azure에 Key Vault가 있어야 합니다.
    • Key Vault에 비밀을 만들 수 없습니다.
  • OpenID Connect를 구성하여 임시 자격 증명 검색 - 이 단계에는 Key Vault 액세스용 Azure AD 애플리케이션을 만드는 방법에 대한 지침이 포함되어 있습니다.
  • 프로젝트에 CI/CD 변수 추가 - Vault 서버에 대한 세부 정보를 제공하려면 다음을 추가하십시오:
    • AZURE_KEY_VAULT_SERVER_URL: https://vault.example.com와 같은 Azure Key Vault 서버의 URL
    • AZURE_CLIENT_ID: Azure 애플리케이션의 클라이언트 ID
    • AZURE_TENANT_ID: Azure 애플리케이션의 테넌트 ID

CI/CD 작업에서 Azure Key Vault 비밀 사용

작업에서 Azure Key Vault에 저장된 비밀을 azure_key_vault 키워드를 사용하여 정의하여 사용할 수 있습니다.

job:
  id_tokens:
    AZURE_JWT:
      aud: 'https://gitlab.com'
  secrets:
    DATABASE_PASSWORD:
      token: $AZURE_JWT
      azure_key_vault:
        name: 'test'
        version: '00000000000000000000000000000000'

이 예에서:

  • aud는 대상처로, 페더레이션 ID 자격 증명을 만들 때 사용되는 대상처와 일치해야 합니다.
  • name은 Azure Key Vault에서의 비밀의 이름입니다.
  • version은 Azure Key Vault의 비밀 버전입니다. 버전은 대시가없는 생성된 GUID이며 Azure Key Vault 비밀 페이지에서 찾을 수 있습니다.
  • GitLab은 Azure Key Vault에서 비밀을 검색하고 값을 임시 파일에 저장합니다. 이 파일의 경로는 파일 유형 CI/CD 변수와 유사하게 DATABASE_PASSWORD CI/CD 변수에 저장됩니다.

문제 해결

일반적으로 Azure와 OIDC를 설정할 때 발생할 수있는 일반적인 문제에 대해서는 Azure에서 OIDC 문제 해결을 참조하십시오.

JWT 토큰이 잘못되었거나 부적합합니다. 메시지

Azure Key Vault에서 비밀을 검색할 때이 오류를받을 수 있습니다.

RESPONSE 400 Bad Request
AADSTS50027: JWT token is invalid or malformed.

이것은 JWT 토큰이 GitLab Runner에서 올바르게 구문 분석되지 않는 알려진 문제 때문에 발생합니다. 이를 해결하려면 GitLab Runner를 16.6 이상으로 업그레이드하십시오.

Caller is not authorized to perform action on resource 메시지

Azure Key Vault에서 비밀을 검색할 때이 오류를받을 수 있습니다.

RESPONSE 403: 403 Forbidden
ERROR CODE: Forbidden
Caller is not authorized to perform action on resource.\r\nIf role assignments, deny assignments or role definitions were changed recently, please observe propagation time.
ForbiddenByRbac

Azure Key Vault가 RBAC를 사용하는 경우 Azure AD 애플리케이션에 Key Vault Secrets User 역할 할당을 추가해야합니다.

예:

appId=$(az ad app list --display-name gitlab-oidc --query '[0].appId' -otsv)
az role assignment create --assignee $appId --role "Key Vault Secrets User" --scope /subscriptions/<subscription-id>

구독 ID는 다음 위치에서 찾을 수 있습니다:

The secrets provider can not be found. Check your CI/CD variables and try again. 메시지

Azure Key Vault에 액세스하도록 구성된 작업을 시작하려고 할 때이 오류를받을 수 있습니다.

The secrets provider can not be found. Check your CI/CD variables and try again.

하나 이상의 필수 변수가 정의되지 않아 작업을 만들 수 없습니다.

  • AZURE_KEY_VAULT_SERVER_URL
  • AZURE_CLIENT_ID
  • AZURE_TENANT_ID