doc-locale/fr-fr/ci/cloud_services/azure/_index.md
{{< details >}}
{{< /details >}}
[!warning]
CI_JOB_JWT_V2a été déprécié dans GitLab 15.9 et sa suppression est prévue dans GitLab 17.0. Utilisez plutôt les jetons d'ID.
Ce tutoriel explique comment utiliser un JSON web token (JWT) dans un job GitLab CI/CD pour récupérer des identifiants temporaires depuis Azure sans avoir à stocker de secrets.
Pour commencer, configurez OpenID Connect (OIDC) pour la fédération d'identité entre GitLab et Azure. Pour plus d'informations sur l'utilisation d'OIDC avec GitLab, consultez Se connecter aux services cloud.
Prérequis :
Owner.Application Developer.Pour suivre ce tutoriel :
Pour plus d'informations sur la fédération d'identité Azure, consultez la fédération d'identité de charge de travail.
Pour créer une application Entra ID et un principal de service pour GitLab :
Dans l'Azure CLI, créez l'application pour GitLab :
appId=$(az ad app create --display-name gitlab-oidc --query appId -otsv)
Enregistrez la sortie appId (ID client de l'application), car vous en aurez besoin ultérieurement pour configurer votre pipeline CI/CD GitLab.
Créez un principal de service correspondant :
az ad sp create --id $appId --query appId -otsv
Au lieu de l'Azure CLI, vous pouvez utiliser le portail Azure pour créer ces ressources.
Pour créer les identifiants d'identité fédérée pour l'application Entra ID précédente pour une branche spécifique dans <mygroup>/<myproject> :
objectId=$(az ad app show --id $appId --query id -otsv)
cat <<EOF > body.json
{
"name": "gitlab-federated-identity",
"issuer": "https://gitlab.example.com",
"subject": "project_path:<mygroup>/<myproject>:ref_type:branch:ref:<branch>",
"description": "GitLab service account federated identity",
"audiences": [
"https://gitlab.example.com"
]
}
EOF
az rest --method POST --uri "https://graph.microsoft.com/beta/applications/$objectId/federatedIdentityCredentials" --body @body.json
Pour les problèmes liés aux valeurs de issuer, subject ou audiences, consultez les détails de dépannage.
Vous pouvez également vérifier l'application Entra ID et les identifiants d'identité fédérée Entra ID depuis le portail Azure :
gitlab-oidc.Application (client) ID, Object ID et Tenant ID.Certificates & secrets, accédez à Federated credentials pour consulter vos identifiants d'identité fédérée Entra ID.Pour créer des identifiants pour n'importe quelle branche ou tag (correspondance générique), vous pouvez utiliser les identifiants d'identité fédérée flexibles.
Pour toutes les branches dans <mygroup>/<myproject> :
objectId=$(az ad app show --id $appId --query id -otsv)
cat <<EOF > body.json
{
"name": "gitlab-federated-identity",
"issuer": "https://gitlab.example.com",
"subject": null,
"claimsMatchingExpression": {
"value": "claims['sub'] matches 'project_path:<mygroup>/<myproject>:ref_type:branch:ref:*'",
"languageVersion": 1
},
"description": "GitLab service account federated identity",
"audiences": [
"https://gitlab.example.com"
]
}
EOF
az rest --method POST --uri "https://graph.microsoft.com/beta/applications/$objectId/federatedIdentityCredentials" --body @body.json
Pour tous les tags dans <mygroup>/<myproject> :
objectId=$(az ad app show --id $appId --query id -otsv)
cat <<EOF > body.json
{
"name": "gitlab-federated-identity",
"issuer": "https://gitlab.example.com",
"subject": null,
"claimsMatchingExpression": {
"value": "claims['sub'] matches 'project_path:<mygroup>/<myproject>:ref_type:tag:ref:*'",
"languageVersion": 1
},
"description": "GitLab service account federated identity",
"audiences": [
"https://gitlab.example.com"
]
}
EOF
az rest --method POST --uri "https://graph.microsoft.com/beta/applications/$objectId/federatedIdentityCredentials" --body @body.json
Après avoir créé les identifiants, utilisez role assignment pour accorder des autorisations au principal de service précédent afin qu'il puisse accéder aux ressources Azure :
az role assignment create --assignee $appId --role Reader --scope /subscriptions/<subscription-id>
Vous pouvez trouver votre ID d'abonnement dans :
La commande précédente accorde des autorisations en lecture seule à l'ensemble de l'abonnement. Pour plus d'informations sur l'application du principe du moindre privilège dans le contexte de votre organisation, consultez Meilleures pratiques pour les rôles Entra ID.
Après avoir configuré l'application Entra ID et les identifiants d'identité fédérée, le job CI/CD peut récupérer un identifiant temporaire en utilisant l'Azure CLI :
default:
image: mcr.microsoft.com/azure-cli:latest
variables:
AZURE_CLIENT_ID: "<client-id>"
AZURE_TENANT_ID: "<tenant-id>"
auth:
id_tokens:
GITLAB_OIDC_TOKEN:
aud: https://gitlab.com
script:
- az login --service-principal -u $AZURE_CLIENT_ID -t $AZURE_TENANT_ID --federated-token $GITLAB_OIDC_TOKEN
- az account show
Les variables CI/CD sont :
AZURE_CLIENT_ID : L'ID client de l'application que vous avez enregistré précédemment.AZURE_TENANT_ID : L'ID de votre tenant Microsoft Entra ID. Vous pouvez le trouver en utilisant l'Azure CLI ou le portail Azure.GITLAB_OIDC_TOKEN : Un jeton d'ID OIDC.No matching federated identity record found {#error-no-matching-federated-identity-record-found}Si vous recevez l'erreur ERROR: AADSTS70021: No matching federated identity record found for presented assertion., vérifiez les éléments suivants :
Issuer défini dans les identifiants d'identité fédérée Entra ID, par exemple https://gitlab.com ou l'URL de votre propre instance GitLab.Subject identifier défini dans les identifiants d'identité fédérée Entra ID, par exemple project_path:<mygroup>/<myproject>:ref_type:branch:ref:<branch>.
gitlab-group/gitlab-project et la branche main, la valeur serait : project_path:gitlab-group/gitlab-project:ref_type:branch:ref:main.mygroup et myproject peuvent être récupérées en vérifiant l'URL lors de l'accès à votre projet GitLab ou, dans le coin supérieur droit de la page de présentation du projet, en sélectionnant Code.Audience défini dans les identifiants d'identité fédérée Entra ID, par exemple https://gitlab.com ou l'URL de votre propre instance GitLab.Vous pouvez consulter ces paramètres, ainsi que vos variables CI/CD AZURE_CLIENT_ID et AZURE_TENANT_ID, depuis le portail Azure :
gitlab-oidc.Application (client) ID, Object ID et Tenant ID.Certificates & secrets, accédez à Federated credentials pour consulter vos identifiants d'identité fédérée Entra ID.Consultez Se connecter aux services cloud pour plus de détails.
Request to External OIDC endpoint failed {#request-to-external-oidc-endpoint-failed-message}Si vous recevez l'erreur ERROR: AADSTS501661: Request to External OIDC endpoint failed., vérifiez que votre instance GitLab est accessible publiquement depuis Internet.
Azure doit pouvoir accéder aux points de terminaison GitLab suivants pour s'authentifier avec OIDC :
GET /.well-known/openid-configurationGET /oauth/discovery/keysSi vous mettez à jour votre pare-feu et que vous recevez toujours cette erreur, videz le cache Redis et réessayez.
No matching federated identity record found for presented assertion audience {#no-matching-federated-identity-record-found-for-presented-assertion-audience-message}Si vous recevez l'erreur ERROR: AADSTS700212: No matching federated identity record found for presented assertion audience 'https://gitlab.com', vérifiez que votre job CI/CD utilise la valeur aud correcte.
La valeur aud doit correspondre à l'audience utilisée pour créer les identifiants d'identité fédérée.