doc-locale/fr-fr/ci/cloud_services/_index.md
{{< details >}}
{{< /details >}}
{{< history >}}
{{< /history >}}
[!warning]
CI_JOB_JWTetCI_JOB_JWT_V2ont été dépréciés dans GitLab 15.9 et leur suppression est prévue dans GitLab 17.0. Utilisez plutôt les jetons d'ID.
GitLab CI/CD prend en charge OpenID Connect (OIDC) pour donner à vos jobs de build et de déploiement l'accès aux identifiants et services cloud. Historiquement, les équipes stockaient les secrets dans des projets ou appliquaient des permissions sur l'instance GitLab Runner pour builder et déployer. Les jetons d'ID compatibles OIDC sont configurables dans le job CI/CD, ce qui vous permet d'adopter une approche de sécurité scalable et à moindre privilège.
Dans GitLab 15.6 et versions antérieures, vous devez utiliser CI_JOB_JWT_V2 à la place d'un jeton d'ID, mais celui-ci n'est pas personnalisable.
Les jetons d'ID prennent en charge les fournisseurs cloud avec OIDC, notamment :
[!note] La configuration d'OIDC permet l'accès par jeton JWT aux environnements cibles pour tous les pipelines. Lorsque vous configurez OIDC pour un pipeline, vous devez effectuer une révision de la sécurité de la chaîne d'approvisionnement logicielle pour le pipeline, en vous concentrant sur les accès supplémentaires. Pour plus d'informations sur les attaques de la chaîne d'approvisionnement, consultez How a DevOps Platform helps protect against supply chain attacks.
Chaque job peut être configuré avec des jetons d'ID, qui sont fournis en tant que variable CI/CD contenant le contenu du jeton. Ces JWT peuvent être utilisés pour s'authentifier auprès du fournisseur cloud compatible OIDC, tel qu'AWS, Azure, GCP ou Vault.
%%{init: { "fontFamily": "GitLab Sans" }}%%
sequenceDiagram
accTitle: Authorization workflow
accDescr: The flow of authorization requests between GitLab and a cloud provider.
participant GitLab
Note right of Cloud: Create OIDC identity provider
Note right of Cloud: Create role with conditionals
Note left of GitLab: CI/CD job with ID token
GitLab->>+Cloud: Call cloud API with ID token
Note right of Cloud: Decode & verify JWT with public key (https://gitlab.com/oauth/discovery/keys)
Note right of Cloud: Validate audience defined in OIDC
Note right of Cloud: Validate conditional (sub, aud) role
Note right of Cloud: Generate credential or fetch secret
Cloud->>GitLab: Return temporary credential
Note left of GitLab: Perform operation
Lorsque vous configurez un rôle conditionnel, incluez des identifiants stables et uniques tels que namespace_id ou project_id aux côtés des claims basés sur le chemin comme sub lorsque le fournisseur cloud les prend en charge. Ces identifiants sont indépendants des chemins, de sorte que les politiques de confiance qui y font référence ne sont pas affectées par les modifications de chemins, telles que les renommages de groupes ou de projets.
La prise en charge de ces clés de condition varie selon le fournisseur cloud et l'offre GitLab. Par exemple, AWS prend en charge namespace_id et project_id uniquement pour le fournisseur d'identité OIDC gitlab.com. Pour un exemple de fournisseur, consultez Configurer OpenID Connect dans AWS.
Pour configurer la confiance entre GitLab et OIDC, vous devez créer un rôle conditionnel dans le fournisseur cloud qui vérifie le JWT. La condition est validée par rapport au JWT pour établir une confiance portant spécifiquement sur deux claims : l'audience et le sujet.
Audience ou aud : Configuré dans le cadre du jeton d'ID :
job_needing_oidc_auth:
id_tokens:
OIDC_TOKEN:
aud: https://oidc.provider.com
script:
- echo $OIDC_TOKEN
Sujet ou sub : Une concaténation de métadonnées décrivant le workflow GitLab CI/CD incluant le groupe, le projet, la branche et le tag. Le champ sub est au format suivant :
project_path:{group}/{project}:ref_type:{type}:ref:{branch_name}| Type de filtre | Exemple |
|---|---|
| Filtrer sur n'importe quelle branche | Caractère générique pris en charge. project_path:mygroup/myproject:ref_type:branch:ref:* |
| Filtrer sur un projet spécifique, branche principale | project_path:mygroup/myproject:ref_type:branch:ref:main |
| Filtrer sur tous les projets d'un groupe | Caractère générique pris en charge. project_path:mygroup/*:ref_type:branch:ref:main |
| Filtrer sur un tag Git | Caractère générique pris en charge. project_path:mygroup/*:ref_type:tag:ref:1.0 |
Pour vous connecter à votre fournisseur cloud, consultez les tutoriels suivants :