GitLab CI/CDでAzure Key Vaultシークレットを使用する
- プラン: Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
Azure Key Vaultに保存されているシークレットをGitLab CI/CDパイプラインで使用できます。
前提要件:
- AzureでKey Vaultを用意します。
- IAMユーザーは、Key Vaultに割り当てられたresource group(リソースグループ)のKey Vault Administrator(Key Vault管理者)ロールの割り当てを許可されている必要があります。そうでないと、Key Vault内にシークレットを作成できません。
- 一時的な認証情報を取得するために、AzureでOpenID Connectを設定します。これらの手順には、Key Vaultアクセス用のAzure ADアプリケーションを作成する方法が含まれています。
- Vaultサーバーの詳細を提供するために、CI/CD変数をプロジェクトに追加します:
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: 'DATABASE-PASSWORD'
version: '00000000000000000000000000000000'同じジョブでAzure Key Vaultから複数のシークレットを使用するには、secretsキーワードの下に各シークレットを定義します:
job:
id_tokens:
AZURE_JWT:
aud: 'https://gitlab.com'
secrets:
REDIS_PASSWORD:
token: $AZURE_JWT
azure_key_vault:
name: 'REDIS-PASSWORD'
version: '00000000000000000000000000000000'
DATABASE_PASSWORD:
token: $AZURE_JWT
azure_key_vault:
name: 'DATABASE-PASSWORD'
version: '00000000000000000000000000000000'これらの例では、次のようになります:
audはオーディエンスであり、フェデレーションIAM認証情報を作成するときに使用するオーディエンスと一致する必要がありますnameは、Azure Key Vault内のシークレットの名前です。versionは、Azure Key Vault内のシークレットのバージョンです。バージョンは、ダッシュなしで生成されたGUIDであり、Azure Key Vaultシークレットページにあります。- GitLabはAzure Key Vaultからシークレットをフェッチし、値を一時ファイルに格納します。このファイルへのパスは、ファイルタイプのCI/CD変数と同様に、シークレット(
DATABASE_PASSWORDやREDIS_PASSWORDなど)で定義した名前のCI/CD変数に格納されます。
トラブルシューティング
AzureでOIDCを設定する際の一般的な問題については、AzureのOIDCトラブルシューティングを参照してください。
JWT token is invalid or malformedメッセージ
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.
ForbiddenByRbacAzure Key Vaultがロールベースのアクセス制御を使用している場合は、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.必要な変数の1つ以上が定義されていないため、ジョブを作成できません:
AZURE_KEY_VAULT_SERVER_URLAZURE_CLIENT_IDAZURE_TENANT_ID