Accéder à un coffre de clés privé depuis votre pipeline
Azure Key Vault offre une solution sécurisée pour gérer les informations d’identification telles que les clés, secrets et certificats avec une sécurité fluide. En utilisant Azure Pipelines, vous pouvez simplifier le processus d’accès et d’utilisation des coffres de clés, rendant facile le stockage et la récupération des informations d’identification.
Dans certains scénarios, les organisations privilégient la sécurité en limitant l’accès aux coffres de clés exclusivement aux réseaux virtuels Azure désignés pour assurer le plus haut niveau de sécurité pour les applications critiques.
Dans ce didacticiel, vous apprendrez à :
- Créer un principal du service
- Créer une connexion de service
- Configurer vos points d’accès entrants
- Interroger un coffre de clés privé Azure depuis votre pipeline
Prérequis
Un organization Azure DevOps et un projet. Créez un organization ou un projet si ce n’est pas déjà fait.
Un abonnement Azure. Créez un compte Azure gratuit si vous n’en avez pas déjà un.
Une instance Azure Key Vault. Créez un nouveau Azure Key Vault si ce n’est pas déjà fait.
Accéder à un coffre de clés privé
Azure Pipelines permet aux développeurs de lier un Azure Key Vault à un groupe de variables et d’y mapper des secrets de coffre spécifiques. Un coffre de clés utilisé comme groupe de variables peut être accessible :
Depuis Azure DevOps, lors de la configuration du groupe de variables.
Depuis un agent auto-hébergé, lors de l’exécution du travail du pipeline.
Créer un principal du service
Commencez par créer un principal de service, ce qui vous permettra d’accéder aux ressources Azure. Ensuite, vous devez créer une connexion de service ARM dans Azure DevOps, puis configurer des informations d’identification fédérées pour votre principal de service dans Azure avant de vérifier et d’enregistrer votre connexion de service dans Azure DevOps.
Accédez au portail Azure.
Ouvrez Cloud Shell à partir de la barre de menus, puis sélectionnez Bash.
Exécutez la commande suivante pour créer un principal de service :
az ad sp create-for-rbac --name YOUR_SERVICE_PRINCIPAL_NAME
Assurez-vous de copier la sortie, car nous l’utiliserons pour créer la connexion de service dans l’étape suivante.
Créer une connexion de service
Connectez-vous à votre organisation Azure DevOps puis accédez à votre projet.
Sélectionnez Paramètres de projet>Connexions de service>Nouvelle connexion de service.
Sélectionnez Azure Resource Manager, puis sélectionnez Suivant.
Pour Le type d’identité, sélectionnez Inscription d’application (automatique) dans le menu déroulant.
Pour les informations d’identification, conservez la valeur recommandée par défaut : fédération des identités de charge de travail.
Pour le niveau d’étendue, sélectionnez **Abonnement, puis sélectionnez votre abonnement dans le menu déroulant.
Sélectionnez un groupe de ressources si vous souhaitez limiter l’accès au groupe de ressources spécifié uniquement.
Indiquez un nom pour votre connexion de service, puis cochez la case Accorder l’autorisation d’accès à tous les pipelines pour autoriser tous les pipelines à utiliser cette connexion de service.
Lorsque vous avez terminé, sélectionnez Enregistrer.
Créer des informations d’identification fédérées
Accédez à Portail Azure, entrez l’ID client de votre principal de service dans la barre de recherche, puis sélectionnez votre application.
Sous Gérer, sélectionnez Certificats et informations d’identification fédérées des secrets>.
Sélectionnez Ajouter des informations d’identification, puis, pour le scénario d’informations d’identification fédérées, sélectionnez Autre émetteur.
Pour l’émetteur, collez l’URL suivante en remplaçant l’espace réservé par le GUID de votre organisation. Vous pouvez trouver votre ID d’organisation en accédant aux paramètres>de l’organisation Microsoft Entra> Télécharger la liste des organisations Azure DevOps connectées à votre annuaire.
https://vstoken.dev.azure.com/<ORGANIZATION_ID>
Pour l’identificateur de l’objet, collez l’URL suivante en remplaçant l’espace réservé par le nom de votre organisation, le nom du projet et le nom de connexion de service.
sc://ORGANIZATION_NAME/PROJECT_NAME/SERVICE_CONNECTION_NAME
Fournissez un nom pour vos informations d’identification fédérées, puis sélectionnez Ajouter une fois que vous avez terminé.
Créer une connexion de service
Connectez-vous à votre organisation Azure DevOps puis accédez à votre projet.
Sélectionnez Paramètres de projet>Connexions de service>Nouvelle connexion de service.
Sélectionnez Azure Resource Manager, >Suivant, puis sélectionnez Principal de service (manuel)>Suivant.
Sélectionnez Azure Cloud pour Environnement et Abonnement pour le Niveau de portée, puis saisissez votre ID d’abonnement et votre Nom d’abonnement.
Entrez les informations de votre principal de service, puis sélectionnez Vérifier.
Après une vérification réussie, nommez votre connexion de service, ajoutez une description, puis cochez la case Accorder la permission d’accès à tous les pipelines. Sélectionnez Vérifier et enregistrez lorsque vous avez terminé.
Conseil
Si vous ne parvenez pas à vérifier la connexion de votre principal de service, accordez au principal de service un accès Lecteur à votre abonnement.
Créer une connexion de service
Connectez-vous à votre collection Azure DevOps puis accédez à votre projet.
Sélectionnez Paramètres de projet>Connexions de service>Nouvelle connexion de service.
Sélectionnez Azure Resource Manager, nommez votre connexion de service, puis sélectionnez Azure Cloud pour Environnement et Abonnement pour le Niveau d’étendue.
Saisissez votre ID d’abonnement et votre Nom d’abonnement.
Entrez les informations de votre principal de service, puis sélectionnez Vérifier la connexion.
Cochez la case Autoriser tous les pipelines à utiliser cette connexion , puis sélectionnez Ok lorsque vous avez terminé.
Conseil
Si vous ne parvenez pas à vérifier la connexion de votre principal de service, accordez au principal de service un accès Lecteur à votre abonnement.
Accéder à un coffre de clés privé depuis Azure DevOps
Dans cette section, nous explorerons deux méthodes pour accéder à un coffre de clés privé depuis Azure DevOps. Tout d’abord, nous utiliserons les Groupes de Variables pour lier et mapper les secrets de notre coffre de clés, suivi de la configuration de l’accès entrant en autorisant des plages d’IP statiques. Nous établissons l’accès entrant car Azure Pipelines utilise l’IP publique Azure DevOps affichée lors de l’interrogation du Azure Key Vault depuis un Groupe de Variables. Ainsi, en ajoutant des connexions entrantes au pare-feu d’Azure Key Vault, nous pouvons nous connecter avec succès à notre Azure Key Vault.
Pour notre deuxième approche, nous démontrerons l’ajout dynamique de l’adresse IP de l’agent hébergé par Microsoft à la liste autorisée du pare-feu de notre coffre de clés, l’interrogation du coffre de clés, puis la suppression de l’IP après l’achèvement. Cette deuxième approche est à des fins de démonstration et n’est pas l’approche recommandée par Azure Pipelines.
1 - Mapper les secrets du coffre de clés avec un groupe de variables
Connectez-vous à votre organisation Azure DevOps puis accédez à votre projet.
Sélectionnez Pipelines>Bibliothèque, puis sélectionnez + Groupe de variables.
Nommez votre groupe de variables, puis activez le bouton bascule pour activer le bouton Lier les secrets d’un Azure Key Vault en tant que variable.
Sélectionnez la connexion de service que vous avez créée précédemment, sélectionnez votre coffre de clés, puis sélectionnez Autoriser.
Sous Variables, sélectionnez Ajouter pour ajouter votre secret, puis sélectionnez Enregistrer lorsque vous avez terminé.
Remarque
Vérifiez que votre connexion de service dispose des autorisations Get et list , et que votre principal de service est affecté au rôle Utilisateur des secrets Key Vault dans votre coffre de clés privé.
1.1 Configurer les autorisations de connexion de service
Accédez à votre coffre de clés Azure, puis sélectionnez Stratégies d’accès.
Sélectionnez Créer, puis, sous Autorisations secrètes, ajoutez les autorisations Obtenir et Répertorier , puis sélectionnez Suivant.
Ajoutez votre connexion de service dans la barre de recherche, sélectionnez-la, puis sélectionnez Suivant.
Sélectionnez Suivant une fois de plus, passez en revue vos paramètres, puis sélectionnez Vérifier + créer lorsque vous avez terminé.
1.2 Configurer les autorisations du principal de service
Accédez à votre coffre de clés Azure, puis sélectionnez Contrôle d’accès (IAM).
Sélectionnez Ajouter une>attribution> de rôle, puis sélectionnez l’onglet Rôle.
Sélectionnez le rôle Utilisateur des secrets Key Vault, puis sélectionnez Suivant.
Sélectionnez Sélectionner des membres> pour ajouter votre principal >de service Select.
Sélectionnez Vérifier + affecter lorsque vous avez terminé.
Connectez-vous à votre organisation Azure DevOps puis accédez à votre projet.
Sélectionnez Pipelines>Bibliothèque, puis sélectionnez + Groupe de variables.
Nommez votre groupe de variables, puis activez le bouton bascule pour activer le bouton Lier les secrets d’un Azure Key Vault en tant que variable.
Sélectionnez votre connexion de service Azure que vous avez créée plus tôt dans le menu déroulant, puis sélectionnez votre coffre de clés.
Si vous rencontrez le message d’erreur : La connexion de service Azure spécifiée doit avoir les permissions de gestion de secrets « Obtenir, Lister » sur le coffre de clés sélectionné. comme indiqué ci-dessus. Accédez à votre coffre de clés dans le portail Azure, sélectionnez Contrôle d’accès (IAM)>Ajouter une attribution de rôle>Utilisateur de secrets du coffre de clés>Suivant, puis ajoutez votre principal de service, puis sélectionnez Passer en revue + assigner une fois terminé.
Ajoutez vos secrets, puis sélectionnez Enregistrer une fois terminé.
2 - Configurer l’accès entrant depuis Azure DevOps
Pour permettre l’accès à votre coffre de clés depuis Azure DevOps, vous devez accorder l’accès depuis des plages d’IP statiques spécifiques. Ces plages sont déterminées par la localisation géographique de votre organisation Azure DevOps.
Connectez-vous à votre organisation Azure DevOps.
Sélectionnez Paramètres de l’organisation.
Accédez à Vue d’ensemble, où vous trouverez la localisation géographique répertoriée vers le bas de la page.
Configurez votre coffre de clés pour autoriser l’accès depuis des plages d’IP statiques.
3 - Interroger un coffre de clés privé avec un groupe de variables
Dans cet exemple, nous utilisons le groupe de variables, configuré plus tôt et autorisé avec un principal de service, pour interroger et copier notre secret depuis notre Azure Key Vault privé simplement en utilisant le groupe de variables lié. Azure Pipelines utilise l’IP publique affichée lors de l’interrogation du Azure Key Vault depuis un Groupe de Variables, alors assurez-vous d’avoir configuré l’accès entrant pour que cela fonctionne correctement :
variables:
- group: mySecret-VG
steps:
- task: CmdLine@2
inputs:
script: 'echo $(mySecret) > secret.txt'
- task: CopyFiles@2
inputs:
Contents: secret.txt
targetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
Méthode alternative - Autoriser dynamiquement l’IP de l’agent hébergé par Microsoft
Dans cette deuxième approche, nous commencerons par interroger l’IP de l’agent hébergé par Microsoft au début de notre pipeline. Ensuite, nous l’ajouterons à la liste autorisée du pare-feu du coffre de clés, poursuivrons avec les tâches restantes, puis supprimerons l’IP de la liste autorisée du pare-feu du coffre de clés.
Remarque
Cette approche est à des fins de démonstration uniquement et n’est pas l’approche recommandée par Azure Pipelines.
- task: AzurePowerShell@5
displayName: 'Allow agent IP'
inputs:
azureSubscription: 'YOUR_SERVICE_CONNECTION_NAME'
azurePowerShellVersion: LatestVersion
ScriptType: InlineScript
Inline: |
$ip = (Invoke-WebRequest -uri "http://ifconfig.me/ip").Content
Add-AzKeyVaultNetworkRule -VaultName "YOUR_KEY_VAULT_NAME" -ResourceGroupName "YOUR_RESOURCE_GROUP_NAME" -IpAddressRange $ip
echo "##vso[task.setvariable variable=agentIP]ip"
- task: AzureKeyVault@2
inputs:
azureSubscription: 'YOUR_SERVICE_CONNECTION_NAME'
KeyVaultName: 'YOUR_KEY_VAULT_NAME'
SecretsFilter: '*'
RunAsPreJob: false
- task: AzurePowerShell@5
displayName: 'Remove agent IP'
inputs:
azureSubscription: 'YOUR_SERVICE_CONNECTION_NAME'
azurePowerShellVersion: LatestVersion
ScriptType: InlineScript
Inline: |
$ipRange = $env:agentIP + "/32"
Remove-AzKeyVaultNetworkRule -VaultName "YOUR_KEY_VAULT_NAME" -IpAddressRange $ipRange
condition: succeededOrFailed()
Important
Assurez-vous que le principal de service que vous utilisez pour accéder à votre coffre de clés depuis votre pipeline détient le rôle de Contributeur de coffre de clés dans le contrôle d’accès (IAM) de votre coffre de clés.
Accéder à un coffre de clés privé depuis un agent auto-hébergé
Pour avoir la possibilité d’accéder à un coffre de clés privé depuis un agent Azure Pipelines, vous devrez utiliser soit un agent auto-hébergé (Windows, Linux, Mac) ou des agents Scale Set. C’est parce que les agents hébergés par Microsoft, comme d’autres services de calcul génériques, ne sont pas inclus dans la liste des services de confiance du coffre de clés.
Pour établir la connectivité avec votre coffre de clés privé, vous devez fournir une connectivité de ligne de mire en configurant un point de terminaison privé pour votre coffre de clés. Ce point de terminaison doit être routable et avoir son nom DNS privé résoluble depuis l’agent de pipeline auto-hébergé.
1 - Configurer l’accès entrant depuis un agent auto-hébergé
Suivez les instructions fournies pour Créer un réseau virtuel.
Dans le portail Azure, utilisez la barre de recherche en haut de la page pour trouver votre Azure Key Vault.
Une fois que vous avez localisé votre coffre de clés dans les résultats de recherche, sélectionnez-le, puis accédez à Paramètres>Mise en réseau.
Sélectionnez Connexions de point de terminaison privé, puis sélectionnez Créer pour créer un nouveau point de terminaison privé.
Sélectionnez le Groupe de ressources qui héberge le réseau virtuel que vous avez créé plus tôt. Fournissez un Nom et un Nom d’interface réseau pour votre instance, et assurez-vous de sélectionner la même Région que le réseau virtuel que vous avez créé plus tôt. Sélectionnez Suivant lorsque vous avez terminé.
Sélectionnez Se connecter à une ressource Azure dans mon répertoire pour la Méthode de connexion, puis choisissez Microsoft.KeyVault/vaults dans le menu déroulant pour le Type de ressource. Sélectionnez votre Ressource dans le menu déroulant. La sous-ressource Target sera renseignée automatiquement avec la valeur : vault. Sélectionnez Suivant lorsque vous avez terminé.
Dans l’onglet Réseau virtuel, sélectionnez le réseau virtuel et le sous-réseau que vous avez créés précédemment et laissez les autres champs par défaut. Sélectionnez Suivant lorsque vous avez terminé.
Continuez avec les onglets DNS et Étiquettes, en acceptant les paramètres par défaut. Dans l’onglet Revoir + Créer, sélectionnez Créer lorsque vous avez terminé.
Une fois que votre ressource est déployée, accédez à votre key vault >Paramètres>Réseaux>Connexions Private Endpoint, votre Private Endpoint doit être listé avec un État de connexion approuvé. Si vous liez à une ressource Azure dans un autre répertoire, vous devrez attendre que le propriétaire de la ressource approuve votre demande de connexion.
2 - Autoriser votre réseau virtuel
Accédez à Azure portal, puis trouvez votre Azure Key Vault.
Sélectionnez Paramètres>Réseaux, et assurez-vous d’être sous l’onglet Pare-feu et réseaux virtuels.
Sélectionnez Ajouter un réseau virtuel>Ajouter des réseaux virtuels existants.
Sélectionnez votre abonnement dans le menu déroulant, puis sélectionnez le réseau virtuel que vous avez créé précédemment, et ensuite sélectionnez vos sous-réseaux.
Sélectionnez Ajouter lorsque vous avez terminé, puis faites défiler vers le bas de la page et sélectionnez Appliquer pour enregistrer vos modifications.
3 - Interroger un Key Vault privé depuis un agent auto-hébergé
L’exemple suivant utilise un agent configuré sur la machine virtuelle du réseau virtuel pour interroger le Key Vault privé via le groupe de variables :
pool: Self-hosted-pool
variables:
group: mySecret-VG
steps:
- task: CmdLine@2
inputs:
script: 'echo $(mySecret) > secret.txt'
- task: CopyFiles@2
inputs:
Contents: secret.txt
targetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
Si vous préférez ne pas accorder à Azure DevOps un accès entrant à votre Key Vault privé, vous pouvez utiliser la tâche AzureKeyVault pour interroger votre key vault. Cependant, vous devez vous assurer que vous autorisez le réseau virtuel hébergeant votre agent dans les paramètres du pare-feu de votre key vault.
pool: Self-hosted-pool
steps:
- task: AzureKeyVault@2
inputs:
azureSubscription: '$(SERVICE_CONNECTION_NAME)'
keyVaultName: $(KEY_VAULT_NAME)
SecretsFilter: '*'
- task: CmdLine@2
inputs:
script: 'echo $(mySecret) > secret.txt'
- task: CopyFiles@2
inputs:
Contents: secret.txt
targetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
Résolution des problèmes
Si vous rencontrez les erreurs suivantes, suivez les étapes de cette section pour résoudre le problème :
Public network access is disabled and request is not from a trusted service nor via an approved private link.
Cela indique que l’accès public a été désactivé et qu’aucune connexion Private Endpoint ni exception de pare-feu n’a été configurée. Suivez les étapes sous [#configure-inbound-access-from-a-self--hosted-agent] et Configurer l’accès entrant depuis Azure DevOps pour configurer l’accès à votre key vault privé.
Request was not allowed by NSP rules and the client address is not authorized and caller was ignored because bypass is set to None Client address: <x.x.x.x>
Ce message d’erreur indique que l’accès public au key vault a été désactivé et que l’option Autoriser les services Microsoft de confiance à contourner ce pare-feu n’est pas cochée, mais l’adresse IP du client n’a pas été ajoutée au pare-feu du key vault. Rendez-vous votre key vault dans Azure portal, puis Paramètres>Réseaux et ajoutez l’IP de votre client à la liste d’autorisation du pare-feu.
Error: Client address is not authorized and caller is not a trusted service.
Assurez-vous d’ajouter les plages IPV4 de votre région géographique à la liste d’autorisation de votre key vault. Veuillez consulter la section Configurer l’accès entrant depuis Azure DevOps pour plus de détails. Alternativement, vous pouvez passer à Autoriser dynamiquement l’IP de l’agent hébergé par Microsoft pour apprendre comment ajouter l’IP de votre client au pare-feu du key vault pendant l’exécution.