Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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. Avec Azure Pipelines, vous pouvez simplifier le processus d’accès et d’utilisation de coffres de clés pour stocker et récupérer 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 tutoriel, vous allez apprendre à :
- Créez un service principal.
- Créez une connexion de service.
- Configurez vos points d’accès entrants.
- Consultez un coffre de clés Azure privé 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.
- Un coffre de clés Azure. Créer un nouveau coffre de clés Azure si vous n'en avez pas déjà.
Accéder à un coffre de clés privé
Les développeurs peuvent utiliser Azure Pipelines pour lier un coffre de clés Azure à un groupe de variables et mapper des secrets de coffre sélectifs à celui-ci. Un coffre de clés, utilisé comme groupe de variables, peut être accessible :
- Depuis Azure DevOps, lors du paramétrage du groupe de variables.
- À partir d’un agent auto-hébergé, pendant le temps d'exécution de la tâche du pipeline.
Créer un principal de service
Commencez par créer un principal de service pour pouvoir accéder aux ressources Azure. Ensuite, vous devez créer une connexion de service Azure Resource Manager dans Azure DevOps. Ensuite, vous configurez 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.
Dans le menu du service, ouvrez Azure Cloud Shell, 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_NAMEVeillez à copier la sortie, car vous l’utilisez pour créer la connexion de service à 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 en tant que fédération d’identité 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.
Entrez 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.
Cliquez sur Enregistrer.
Créer des informations d’identification fédérées
Accédez au 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 secrets>Informations d'identification fédérées.
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 pour remplacer l’espace réservé par le GUID de votre organisation. Vous trouverez l’ID de votre organisation en accédant aux paramètres Organization>Microsoft Entra. Téléchargez la liste des organisations Azure DevOps connectées à votre annuaire.
https://login.microsoftonline.com/<TENANT_ID>/v2.0Pour l’identificateur d’objet, collez l’URL suivante. Remplacez les espaces réservés par le nom de votre organisation, le nom du projet et le nom de connexion de service.
ENTRA_PREFIX/sc/ORGANIZATION_NAME/PROJECT_NAME/SERVICE_CONNECTION_NAMEEntrez un nom pour vos informations d’identification fédérées, puis sélectionnez Ajouter.
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>Next, puis sélectionnez Service principal (manuel)>Next.
Pour Environment, sélectionnez Azure Cloud et, pour le niveau Scope, sélectionnez Subscription. Entrez ensuite votre ID d’abonnement et votre nom d’abonnement.
Entrez les informations de votre principal de service, puis sélectionnez Vérifier.
Une fois la vérification réussie, nommez votre connexion de service, ajoutez une description, puis cochez la case Accorder l’autorisation d’accès à tous les pipelines . Sélectionnez Vérifier et enregistrer.
Conseil
Si vous ne pouvez pas vérifier votre connexion de principal de service, accordez au lecteur du principal de service l’accès à votre abonnement.
Accéder à un coffre de clés privé à partir d’Azure DevOps
Dans cette section, nous explorons deux méthodes pour accéder à un coffre de clés privé à partir de Azure DevOps. Tout d’abord, nous utilisons des groupes de variables pour lier et cartographier des secrets depuis votre coffre de clés, puis nous configurons l'accès entrant en autorisant des plages IP statiques. Nous établissons l'accès entrant, car Azure Pipelines utilise l'adresse IP publique d'Azure DevOps lorsqu'il interroge le coffre Azure de clés depuis un groupe de variables. En ajoutant des connexions entrantes au pare-feu du coffre de clés, vous pouvez vous connecter à votre Azure coffre de clés.
Pour la deuxième approche, nous montrons comment ajouter dynamiquement l'adresse IP de l'agent hébergé par Microsoft à la liste d'autorisation du pare-feu de votre coffre de clés, interroger le coffre de clés, puis supprimer l'adresse IP après l'exécution. Cette deuxième approche est uniquement à des fins de démonstration. Nous vous déconseillons cette approche pour Azure Pipelines.
Étape 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 Lier des 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.
Remarque
Vérifiez que votre connexion de service dispose des autorisations Get et List et que votre principal de service reçoit le rôle d’utilisateur Key Vault Secrets dans votre key vault privé.
Étape 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.
Étape 1.2 : Configurer les autorisations du principal de service
Accédez à votre coffre de clés Azure, puis sélectionnez Access control (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.
Choisissez Sélectionner des membres, ajoutez votre principal de service, puis sélectionnez Sélectionner.
Sélectionnez Vérifier + attribuer.
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 Lier les secrets d’un Key Vault Azure en tant que variable.
Sélectionnez la connexion de service Azure que vous avez créée précédemment dans le menu déroulant, puis sélectionnez votre coffre de clés.
Vous pouvez rencontrer le message d’erreur « La connexion de service Azure spécifiée doit disposer des autorisations de gestion des secrets "Obtenir, Répertorier" sur le coffre de clés sélectionné. Accédez à votre coffre de clés dans le portail Azure, puis sélectionnez Contrôle d'accès (IAM)>Ajouter une attribution de rôle>utilisateur des secrets du coffre de clés>Suivant. Ajoutez votre principal de service, puis sélectionnez Vérifier + affecter.
Ajoutez vos secrets, puis sélectionnez Enregistrer.
Étape 2 : Configurer l’accès entrant à partir de 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. L’emplacement géographique de votre organisation Azure DevOps détermine ces plages.
Connectez-vous à votre organisation Azure DevOps.
Sélectionnez Paramètres de l’organisation.
Accédez à Vue d’ensemble pour rechercher l’emplacement géographique.
Trouvez vos plages IP V4 géographiques.
Important
Pour les connexions entrantes vers les États-Unis, veillez à ajouter les plages d'adresses IP pour toutes les régions américaines.
Configurez votre coffre de clés pour autoriser l’accès depuis des plages d’IP statiques.
Étape 3 : Interroger un coffre de clés privé avec un groupe de variables
Dans cet exemple, vous utilisez le groupe de variables configuré précédemment et autorisé avec un principal de service pour interroger et copier votre secret à partir de votre coffre de clés de Azure privé à l’aide du groupe de variables liées. Azure Pipelines utilise l’adresse IP publique publiée lorsqu’elle interroge le coffre de clés Azure à partir d’un groupe de variables. Veillez donc à avoir configuré l'accès entrant pour que cette action 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’adresse IP de l’agent hébergé par Microsoft
Dans cette deuxième approche, vous interrogez l’adresse IP de l’agent hébergé Microsoft au début de votre pipeline. Ensuite, vous l’ajoutez à la liste d'autorisation du coffre de clés. Effectuez les tâches restantes, puis supprimez l'adresse IP de la liste blanche du pare-feu du Key Vault.
Remarque
Cette approche est uniquement à des fins de démonstration. Nous vous déconseillons cette approche pour 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
Vérifiez que le principal de service que vous utilisez pour accéder à votre coffre de clés à partir de votre pipeline détient le rôle de Contributeur au 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 accéder à un coffre de clés privé à partir d’un agent Azure Pipelines, vous devez utiliser un agent auto-hébergé (Windows, Linux ou Mac) ou Virtual Machine Scale Sets. C'est parce que les agents Microsoft hébergés, comme d'autres services de calcul génériques, ne sont pas inclus dans la liste des services approuvés.
Pour établir la connectivité avec votre coffre de clés privé, vous devez configurer un point de terminaison privé pour votre coffre de clés afin de fournir une connectivité en ligne de vue . Ce point de terminaison doit être routable et avoir son nom de DNS privé résolvable par l'agent de pipeline auto-hébergé.
Étape 1 : Configurer l’accès entrant à partir d’un agent auto-hébergé
Suivez les instructions pour créer un réseau virtuel.
Dans le portail Azure, utilisez la barre de recherche en haut de la page pour rechercher votre coffre de clés Azure.
Sélectionnez votre coffre de clés, puis accédez à Paramètres>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éé précédemment. Entrez un nom et un nom d’interface réseau pour votre instance, puis vérifiez que vous sélectionnez la même région que le réseau virtuel que vous avez créé précédemment. Sélectionnez Suivant.
Pour la méthode Connection, sélectionnez Connecter à une ressource Azure dans mon répertoire. Pour Type de ressource, choisissez Microsoft. KeyVault/vaults dans le menu déroulant. Sélectionnez votre ressource dans le menu déroulant. La sous-ressource cible est renseignée automatiquement avec la valeur coffre. Sélectionnez Suivant.
Sous l’onglet Réseau virtuel, sélectionnez le virtual network et le sous-réseau que vous avez créés précédemment, puis laissez le reste des champs comme valeur par défaut. Sélectionnez Suivant.
Acceptez les paramètres par défaut sous les onglets DNS et Balises . Sous l’onglet Vérifier + créer, sélectionnez Créer.
Une fois votre ressource déployée, accédez à votre coffre de clés et sélectionnez Paramètres>Réseau> Connexions de point de terminaison privé. Votre point de terminaison privé doit être répertorié avec l’état de connexionapprouvé. Si vous créez un lien vers une ressource Azure dans un autre répertoire, vous devez attendre que le propriétaire de la ressource approuve votre demande de connexion.
Étape 2 : Autoriser votre réseau virtuel
Accédez au portail Azure, puis recherchez votre coffre de clés Azure.
Sélectionnez Paramètres>Mise en réseau, puis vérifiez que vous êtes sous l’onglet Pare-feux 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, sélectionnez le réseau virtuel que vous avez créé précédemment, puis sélectionnez vos sous-réseaux.
Sélectionnez Ajouter, puis faites défiler vers le bas de la page, puis sélectionnez Appliquer pour enregistrer vos modifications.
Étape 3 : Consulter un coffre de clés privé à partir d’un agent auto-hébergé
L’exemple suivant utilise un agent configuré sur la machine virtuelle du réseau virtuel pour interroger le coffre de clés 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 ne souhaitez pas accorder Azure DevOps accès entrant à votre coffre de clés privé, vous pouvez utiliser la tâche AzureKeyVault pour interroger votre coffre de clés. Vous devez vous assurer que vous autorisez le réseau virtuel qui héberge votre agent dans vos paramètres de pare-feu 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 décrites dans cette section pour résoudre et résoudre le problème :
Public network access is disabled and request is not from a trusted service nor via an approved private link.Cette erreur indique que l’accès public a été désactivé et qu’une connexion de point de terminaison privé et des exceptions de pare-feu n’ont pas été configurées. Suivez les étapes décrites dans Configurer l’accès entrant à partir d’un agent auto-hébergé et Configurer l’accès entrant à partir de Azure DevOps pour configurer l’accès à votre coffre de clés 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 du coffre de clés a été désactivé et que l'option Autoriser les services Microsoft de confiance à contourner ce pare-feu reste vide, mais l'adresse IP du client n'a pas été ajoutée au pare-feu du coffre de clés. Accédez à votre coffre de clés dans le portail Azure, sélectionnez Settings>Networking, puis ajoutez votre adresse IP cliente à la liste verte du pare-feu.
Error: Client address is not authorized and caller is not a trusted service.Veillez à ajouter les plages IPV4 de votre région à la liste des autorisations de votre Key Vault. Pour plus d’informations, consultez Configurer l’accès entrant à partir de Azure DevOps.
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.