Accueil > Intégration de Terraform à OIDC et à la fédération des identités de charge de travail dans Azure DevOps
Wafaa TOUNZI
21 mars 2024
Read this post in English

Intégration de Terraform à OIDC et à la fédération des identités de charge de travail dans Azure DevOps

Intégration de Terraform à OIDC et à la fédération des identités de charge de travail dans Azure DevOps

En tant que consultants Azure DevOps, nous avons nécessairement été confrontés à la difficulté de gérer les secrets et les certificats des apps registration dans les pipelines CI/CD en raison de leur date d’expiration et des perturbations associées. La recherche d’une méthode d’authentification durable, plus sécurisée et plus simple, m’a amenée à utiliser OpenID Connect (OIDC) ou des federated credentials en guise d’alternative.

Cependant, l’intégration d’OIDC à Terraform s’est avérée complexe et a nécessité des configurations spécifiques. C’est pourquoi, dans cet article, je vous propose de de partager mon retour d’expérience en vous expliquant comment configurer OIDC avec Terraform dans les pipelines Azure DevOps.

Comment créer une connexion au service des federated credentials ?

Avant de décrire le pipeline OIDC, nous devons créer une connexion appropriée au service. Après la mise en place de federated credentials comme nous l’avons présenté dans notre précédent article Federated credentials : comment déployer un pipeline pour Azure sans secrets ni certificats, je vais approfondir l’application pratique de ces principes au sein de la stack technique Terraform.

Certificates & Secrets

 

Mais tout d’abord, nous devons comprendre les étapes d’authentification des tâches du pipeline Azure DevOps avec les ressources Azure en utilisant OIDC et Azure Entra ID (anciennement Azure AD).

 

Explication des différentes étapes d’authentification

 

Explication des différentes étapes d’authentification

 

  • Demander l’idToken : le processus commence par une demande d’obtention d’un jeton (token) d’identité (idToken) qui identifie de manière unique le pipeline Azure DevOps et ses autorisations d’accès aux ressources Azure.
  • Se connecter avec l’assertion du client (idToken) : cette étape est essentielle, car elle remplace les identifiants secrets traditionnels par un système basé sur un token (idToken), ce qui renforce la sécurité.
  • Obtenir la configuration OIDC, JWKS (clés publiques) : après l’authentification, Azure Entra ID récupère la configuration OIDC, ainsi que l’ensemble des clés Web JSON, qui contient les clés publiques utilisées pour vérifier la signature de l’idToken. Cela permet de s’assurer que le token est valide et qu’il a été émis par une autorité de confiance.
  • Émettre le token AAD : une fois l’idToken vérifié, Azure Entra ID émet un token AAD que le pipeline peut utiliser pour interagir avec les ressources Azure.
  • Accéder aux ressources Azure : la tâche du pipeline dans Azure DevOps a maintenant l’autorisation d’accéder à l’infrastructure et de la déployer comme défini par les fichiers de configuration Terraform.

 

Description des pipelines Terraform avec la configuration OIDC

Azure Pipelines a adopté la fédération des identités de charge de travail en renforçant la simplicité des tâches ciblant Azure. Nous pouvons le remarquer dans une grande variété de tâches intégrées, ce qui améliore leur capacité à s’authentifier de manière transparente avec les ressources Azure, par exemple :
AzureAppServiceManage, AzureAppServiceSettings, AzureCLI, AzureCloudPowerShellDeployment, AzureContainerApps, AzureFunctionAppContainer, etc.

Pour passer à l’application pratique de cette fonctionnalité, nous allons examiner comment intégrer OIDC dans un pipeline Terraform, en utilisant la tâche AzureCLI@2 pour l’authentification des scripts en ligne.

Voici le code qui doit être ajouté en tant qu’étape d’authentification :

 

Les commandes essentielles dont vous avez besoin sont les suivantes :

  1. addSpnToEnvironment: true: en définissant ce paramètre, nous invoquons une méthode sécurisée et efficace pour remplir les tokens et les identifiants essentiels, ce qui permet à Terraform de s’authentifier directement auprès d’Azure.
  2. export ARM_OIDC_TOKEN=$idToken : cette commande définit la variable d’environnement sur la valeur de l’idToken récupéré par la tâche AzureCLI. L’idToken est un jeton Web JSON fourni par Azure Entra ID dans le cadre du flux d’authentification OIDC. Terraform utilise ce token pour s’authentifier en toute sécurité auprès des services Azure.
  3. export ARM_USE_OIDC=true : cette commande informe Terraform que l’authentification OIDC doit être utilisée. Cet indicateur déclenche l’authentification de Terraform à l’aide de l’approche basée sur les tokens définie par le protocole OIDC.

Gardez à l’esprit que l’idToken a une durée de vie courte (il peut être actualisé ou personnalisé pendant plus de 10 minutes), ce qui est conforme aux pratiques recommandées en matière de sécurité en réduisant le risque de fuite du token. Cette méthode d’authentification basée sur OIDC garantit que votre pipeline Terraform est gérable et évolutif.

Les résultats attendus de la configuration de votre pipeline doivent se présenter de la façon suivante :

Validation des modules avec OIDC

 

Points importants à retenir

L’intégration d’OIDC à Azure Pipelines ne se contente pas d’améliorer la sécurité ; elle vous permet également d’éviter les tracas liés au suivi de l’expiration des connexions de service. Cette approche rend notre travail plus simple et plus sûr, ce qui nous permet de nous concentrer davantage sur le code que sur les petites tâches administratives supplémentaires.

Vous souhaitez en savoir plus ou obtenir l’aide d’un expert au sujet des projets Azure ? Contactez-nous !

Nos autres articles
Commentaires
Laisser un commentaire

Restez au courant des dernières actualités !
Le meilleur de l’actualité sur le Cloud, le DevOps, l’IT directement dans votre boîte mail.