GitLab CI/CD에서 Azure Key Vault 비밀을 사용하기
Tier: Premium, Ultimate
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이 있어야 합니다.
- IAM 사용자는 Key Vault에 비밀을 만들 수 없습니다. Key Vault가 할당된 리소스 그룹에 Key Vault 관리자 역할 할당이 필요합니다. 그렇지 않으면 비밀을 만들 수 없습니다.
- Azure에서 임시 자격 증명을 검색하도록 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에서 비밀을 가져와 값을 임시 파일에 저장합니다. 이 파일의 경로는
DATABASE_PASSWORD
CI/CD 변수에 저장되며, 파일 유형 CI/CD 변수와 유사합니다.
문제 해결
일반적으로 Azure에서 OIDC를 설정할 때 발생하는 일반적인 문제에 대한 OIDC for Azure troubleshooting을 참조하세요.
JWT 토큰이 잘못되었거나 손상되었습니다
메시지
Azure Key Vault에서 비밀을 가져올 때 이 오류를 받을 수 있습니다:
RESPONSE 400 Bad Request
AADSTS50027: JWT 토큰이 잘못되었거나 손상되었습니다.
이는 GitLab Runner의 알려진 이슈로 인해 JWT 토큰이 올바르게 구문 분석되지 않을 때 발생합니다. 이를 해결하려면 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는 다음 위치에서 찾을 수 있습니다: