Connectez-vous à Azure via une connexion au service Azure Resource
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019
Remarque
Nous déployons la nouvelle expérience de création de connexion de service Azure. La réception de celui-ci dans votre organisation dépend de différents facteurs, et vous pouvez toujours voir l’expérience utilisateur plus ancienne.
Cette connexion vous permet d'accéder à des ressources Azure, comme Azure Key Vault, directement depuis votre pipeline. Grâce à cette connexion, vous pouvez déployer des ressources Azure, telles qu'une application Azure App Service, sans avoir à vous authentifier à chaque fois.
Plusieurs méthodes d'authentification s'offrent à vous pour établir une connexion au service Azure Resource Manager. Les options recommandées privilégient la fédération d'identité de charge de travail avec un enregistrement d'application ou une identité gérée.
Voici les méthodes de connexion au service Azure Resource Manager préconisées :
- Un enregistrement d'application (automatique) utilisant une fédération d'identité de charge de travail ou un secret.
- Une identité gérée qui génère un justificatif d'identité de fédération d'identité de charge de travail et se connecte à une identité gérée existante assignée à l'utilisateur. Cette option est idéale lorsque vous n'avez pas l'autorisation de créer un enregistrement d'application.
D'autres méthodes d'authentification de connexion au service Azure Resource Manager existent mais ne sont pas détaillées dans cet article :
Création d'un enregistrement d'application Azure Resource Manager (automatique)
Lorsque vous configurez une connexion au service Azure Resource Manager, deux types d'informations d'identification sont à votre disposition : la fédération d'identités de charge de travail ou un secret.
Créer une application Azure Resource Manager avec la fédération d'identité de charge de travail (automatique)
Vous pouvez adopter cette approche si votre scénario correspond aux critères suivants :
- Vous disposez du rôle Propriétaire pour votre abonnement Azure.
- Vous ne vous connectez pas aux environnements Azure Stack ou Azure US Government.
- Toutes les tâches d'extensions Marketplace que vous utilisez sont mises à jour pour prendre en charge la fédération d'identité de charge de travail.
Avec cette sélection, Azure DevOps interroge automatiquement l’abonnement, le groupe d’administration ou l’espace de travail Machine Learning auquel vous souhaitez vous connecter et crée une fédération d’identité de charge de travail pour l’authentification.
Dans le projet Azure DevOps, accédez à Paramètres du projet>Connexions de service.
Pour plus d’informations, reportez-vous à la section Ouvrir les paramètres du projet.
Sélectionnez Nouvelle connexion de service, puis sélectionnez Azure Resource Manager et Suivant.
Choisissez l'option Enregistrement d'application (automatique) avec fédération d'identité de charge de travail.
Sélectionnez un Niveau de portée. Sélectionnez Abonnement, Groupe d’administration, ou Espace de travail Machine Learning. Les groupes d’administration sont des conteneurs qui vous aident à gérer l’accès, la stratégie et la conformité dans plusieurs abonnements. Un Espace de travail Machine Learning est un lieu pour créer des artefacts de machine learning.
Pour la portée Abonnement, entrez les paramètres suivants :
Paramètre Description Abonnement Obligatoire. Sélectionnez l’abonnement Azure. Groupe de ressources facultatif. Sélectionnez le groupe de ressource Azure. Pour la portée Groupe d’administration, sélectionnez le groupe d’administration Azure.
Pour la portée Espace de travail Machine Learning, entrez les paramètres suivants :
Paramètre Description Abonnement Obligatoire. Sélectionnez l’abonnement Azure. Groupe de ressources Obligatoire. Sélectionnez le groupe de ressources contenant l’espace de travail. Espace de travail Machine Learning Obligatoire. Sélectionnez l’espace de travail Azure Machine Learning.
Saisissez un nom de connexion de service.
Optionnellement, entrez une description pour la connexion de service.
Sélectionnez Accorder la permission d’accès à tous les pipelines pour permettre à tous les pipelines d’utiliser cette connexion de service. Si vous ne sélectionnez pas cette option, vous devez accorder manuellement l’accès à chaque pipeline qui utilise cette connexion de service.
Cliquez sur Enregistrer.
Une fois la nouvelle connexion au service créée, copiez le nom de la connexion et collez-le dans votre code comme valeur pour azureSubscription
.
Créer une application Azure Resource Manager avec un secret (automatique).
Avec cette option, Azure DevOps interroge automatiquement l'abonnement, le groupe de gestion ou l'espace de travail Machine Learning que vous souhaitez cibler, et génère un secret pour l'authentification.
Avertissement
Le recours à un secret nécessite une rotation et une gestion manuelles, ce qui est déconseillé. La fédération d'identité de charge de travail reste le type d'identification privilégié.
Adoptez cette approche si votre scénario s'y prête :
- Vous êtes connecté en tant que propriétaire de l’organisation Azure Pipelines et de l’abonnement Azure.
- Vous n’avez pas besoin de limiter davantage les autorisations pour les ressources Azure auxquelles les utilisateurs ont accès via la connexion de service.
- Vous ne vous connectez pas aux environnements Azure Stack ou Azure US Government.
- Vous ne vous connectez pas à partir d’Azure DevOps Server 2019 ou de versions antérieures de Team Foundation Server.
Dans le projet Azure DevOps, accédez à Paramètres du projet>Connexions de service.
Pour plus d’informations, reportez-vous à la section Ouvrir les paramètres du projet.
Sélectionnez Nouvelle connexion de service, puis sélectionnez Azure Resource Manager et Suivant.
Choisissez l'option Enregistrement d'application (automatique) avec un credential Secret.
Sélectionnez un Niveau de portée. Sélectionnez Abonnement, Groupe d’administration, ou Espace de travail Machine Learning. Les groupes d’administration sont des conteneurs qui vous aident à gérer l’accès, la stratégie et la conformité dans plusieurs abonnements. Un Espace de travail Machine Learning est un lieu pour créer des artefacts de machine learning.
Pour la portée Abonnement, entrez les paramètres suivants :
Paramètre Description Abonnement Obligatoire. Sélectionnez l’abonnement Azure. Groupe de ressources Obligatoire. Sélectionnez le groupe de ressource Azure. Pour la portée Groupe d’administration, sélectionnez le groupe d’administration Azure.
Pour la portée Espace de travail Machine Learning, entrez les paramètres suivants :
Paramètre Description Abonnement Obligatoire. Sélectionnez l’abonnement Azure. Groupe de ressources Obligatoire. Sélectionnez le groupe de ressources contenant l’espace de travail. Espace de travail Machine Learning Obligatoire. Sélectionnez l’espace de travail Azure Machine Learning.
Saisissez un nom de connexion de service.
Optionnellement, entrez une description pour la connexion de service.
Sélectionnez Accorder la permission d’accès à tous les pipelines pour permettre à tous les pipelines d’utiliser cette connexion de service. Si vous ne sélectionnez pas cette option, vous devez accorder manuellement l’accès à chaque pipeline qui utilise cette connexion de service.
Cliquez sur Enregistrer.
Une fois la nouvelle connexion au service créée, copiez le nom de la connexion et collez-le dans votre code comme valeur pour azureSubscription
.
Créer une connexion au service Azure Resource Manager pour une identité gérée existante attribuée à l'utilisateur.
Utilisez cette option pour générer automatiquement une charge de travail pour une identité managée préexistante attribuée à un utilisateur. Assurez-vous de disposer d'une identité managée déjà assignée à l'utilisateur avant de commencer.
Dans le projet Azure DevOps, accédez à Paramètres du projet>Connexions de service.
Pour plus d’informations, reportez-vous à la section Ouvrir les paramètres du projet.
Sélectionnez Nouvelle connexion de service, puis sélectionnez Azure Resource Manager et Suivant.
Sélectionnez Identité managée.
À l’étape 1 : Détails de l’identité managée :
- Sélectionnez l’abonnement correspondant à l’identité managée. C’est l’abonnement Azure contenant votre identité managée.
- Choisissez le Groupe de ressources associé à l’identité managée. Ce groupe de ressources contient l’identité managée que vous utiliserez pour accéder aux autres ressources.
- Sélectionnez Identité managée. Il s'agit de l'identité gérée au sein de votre groupe de ressources que vous utiliserez pour accéder aux ressources.
Étape 2 : Périmètre Azure :
Sélectionnez le Niveau de portée. Sélectionnez Abonnement, Groupe d’administration, ou Espace de travail Machine Learning. Les groupes d’administration sont des conteneurs qui vous aident à gérer l’accès, la stratégie et la conformité dans plusieurs abonnements. Un Espace de travail Machine Learning est un lieu pour créer des artefacts de machine learning.
Pour la portée Abonnement, entrez les paramètres suivants :
Paramètre Description Abonnement pour la connexion au service Obligatoire. Sélectionnez l’abonnement Azure auquel votre identité managée accédera. Groupe de ressources pour la connexion au service facultatif. Indiquez un groupe de ressources pour restreindre l’accès de l’identité managée. Pour la portée Groupe d’administration, entrez les paramètres suivants :
Paramètre Description Groupe d’administration Obligatoire. Sélectionnez le groupe de gestion Azure. Pour la portée Espace de travail Machine Learning, entrez les paramètres suivants :
Paramètre Description Abonnement Obligatoire. Choisissez le nom de l’abonnement Azure. Groupe de ressources pour la connexion au service facultatif. Sélectionnez le groupe de ressources contenant l’espace de travail. Espace de travail ML Workspace Obligatoire. Entrez le nom de l’espace de travail Azure Machine Learning existant.
Dans la section Étape 3 : Détails de la connexion au service : entrez ou sélectionnez les paramètres suivants :
Paramètre Description Nom de la connexion de service Obligatoire. Nom sous lequel vous faites référence à cette connexion de service dans les propriétés des tâches. Autre que le nom de votre abonnement Azure. Référence pour la gestion des services facultatif. Informations contextuelles provenant d'une base de données ITSM. Description facultatif. Entrez une description de la connexion de service. Dans la section Sécurité, sélectionnez Accorder la permission d’accès à tous les pipelines pour permettre à tous les pipelines d’utiliser cette connexion de service. Si vous ne sélectionnez pas cette option, vous devez accorder manuellement l’accès à chaque pipeline qui utilise cette connexion de service.
Sélectionnez Enregistrer pour valider et créer la connexion de service.
Convertir une connexion au service Azure Resource Manager existante afin d'utiliser la fédération d'identité de charge de travail
Vous pouvez rapidement convertir une connexion de service Azure Resource Manager existante pour utiliser la fédération d’identités de charge de travail pour l’authentification, plutôt qu’un secret. Vous pouvez utiliser l’outil de conversion de connexion de service dans Azure DevOps si votre connexion de service répond à ces exigences :
- Azure DevOps a initialement créé la connexion de service. Si vous créez manuellement votre connexion de service, vous ne pouvez pas la convertir à l’aide de l’outil de connexion de service, car Azure DevOps n’est pas autorisé à modifier ses propres informations d’identification.
- Un seul projet utilise la connexion de service. Vous ne pouvez pas convertir les connexions entre services de projet.
Pour convertir une connexion de service :
Dans le projet Azure DevOps, accédez à Paramètres du projet>Connexions de service.
Pour plus d’informations, reportez-vous à la section Ouvrir les paramètres du projet.
Sélectionnez la connexion de service que vous souhaitez convertir pour utiliser Workload Identity.
Sélectionnez Convertir.
Si vous disposez d’un justificatif d’identité dont le secret est expiré, vous verrez une option différente pour effectuer la conversion.
Sélectionnez à nouveau Convertir pour confirmer que vous souhaitez créer une nouvelle connexion au service.
La conversion peut prendre quelques minutes. Si vous souhaitez rétablir la connexion, vous devez la rétablir dans les sept jours.
Convertir plusieurs connexions de service Azure Resource Manager à l’aide d’un script
Utilisez un script pour mettre à jour plusieurs connexions de service à la fois afin d'utiliser la fédération d'identité de la charge de travail pour l'authentification.
Cet exemple de script PowerShell nécessite deux paramètres : Azure DevOps organization (exemple : https://dev.azure.com/fabrikam-tailspin
) et Azure DevOps project (exemple : Space game web agent
). Le script récupère ensuite les connexions de service associées à votre projet Azure DevOps et à votre organisation.
Lorsque vous convertissez des connexions de service pour utiliser la fédération d’identité de charge de travail, vous serez invité à confirmer la mise à jour pour chaque connexion ne l’utilisant pas encore. Après confirmation, le script met à jour ces connexions de service via l’API REST d’Azure DevOps pour utiliser la fédération d’identité de charge de travail.
Le script nécessite PowerShell 7.3 ou un version plus récente et Azure CLI pour s’exécuter. Enregistrez le script dans un fichier .ps1
et exécutez-le en utilisant PowerShell 7.
#!/usr/bin/env pwsh
<#
.SYNOPSIS
Convert multiple Azure Resource Manager service connection(s) to use Workload identity federation
.LINK
https://aka.ms/azdo-rm-workload-identity-conversion
.EXAMPLE
./convert_azurerm_service_connection_to_oidc_simple.ps1 -Project <project> -OrganizationUrl https://dev.azure.com/<organization>
#>
#Requires -Version 7.3
param (
[parameter(Mandatory=$true,HelpMessage="Name of the Azure DevOps Project")]
[string]
[ValidateNotNullOrEmpty()]
$Project,
[parameter(Mandatory=$true,HelpMessage="Url of the Azure DevOps Organization")]
[uri]
[ValidateNotNullOrEmpty()]
$OrganizationUrl
)
$apiVersion = "7.1"
$PSNativeCommandArgumentPassing = "Standard"
#-----------------------------------------------------------
# Log in to Azure
$azdoResource = "499b84ac-1321-427f-aa17-267ca6975798" # application id of Azure DevOps
az login --allow-no-subscriptions --scope ${azdoResource}/.default
$OrganizationUrl = $OrganizationUrl.ToString().Trim('/')
#-----------------------------------------------------------
# Retrieve the service connection
$getApiUrl = "${OrganizationUrl}/${Project}/_apis/serviceendpoint/endpoints?authSchemes=ServicePrincipal&type=azurerm&includeFailed=false&includeDetails=true&api-version=${apiVersion}"
az rest --resource $azdoResource -u "${getApiUrl} " -m GET --query "sort_by(value[?authorization.scheme=='ServicePrincipal' && data.creationMode=='Automatic' && !(isShared && serviceEndpointProjectReferences[0].projectReference.name!='${Project}')],&name)" -o json `
| Tee-Object -Variable rawResponse | ConvertFrom-Json | Tee-Object -Variable serviceEndpoints | Format-List | Out-String | Write-Debug
if (!$serviceEndpoints -or ($serviceEndpoints.count-eq 0)) {
Write-Warning "No convertible service connections found"
exit 1
}
foreach ($serviceEndpoint in $serviceEndpoints) {
# Prompt user to confirm conversion
$choices = @(
[System.Management.Automation.Host.ChoiceDescription]::new("&Convert", "Converting service connection '$($serviceEndpoint.name)'...")
[System.Management.Automation.Host.ChoiceDescription]::new("&Skip", "Skipping service connection '$($serviceEndpoint.name)'...")
[System.Management.Automation.Host.ChoiceDescription]::new("&Exit", "Exit script")
)
$prompt = $serviceEndpoint.isShared ? "Convert shared service connection '$($serviceEndpoint.name)'?" : "Convert service connection '$($serviceEndpoint.name)'?"
$decision = $Host.UI.PromptForChoice([string]::Empty, $prompt, $choices, $serviceEndpoint.isShared ? 1 : 0)
if ($decision -eq 0) {
Write-Host "$($choices[$decision].HelpMessage)"
} elseif ($decision -eq 1) {
Write-Host "$($PSStyle.Formatting.Warning)$($choices[$decision].HelpMessage)$($PSStyle.Reset)"
continue
} elseif ($decision -ge 2) {
Write-Host "$($PSStyle.Formatting.Warning)$($choices[$decision].HelpMessage)$($PSStyle.Reset)"
exit
}
# Prepare request body
$serviceEndpoint.authorization.scheme = "WorkloadIdentityFederation"
$serviceEndpoint.data.PSObject.Properties.Remove('revertSchemeDeadline')
$serviceEndpoint | ConvertTo-Json -Depth 4 | Write-Debug
$serviceEndpoint | ConvertTo-Json -Depth 4 -Compress | Set-Variable serviceEndpointRequest
$putApiUrl = "${OrganizationUrl}/${Project}/_apis/serviceendpoint/endpoints/$($serviceEndpoint.id)?operation=ConvertAuthenticationScheme&api-version=${apiVersion}"
# Convert service connection
az rest -u "${putApiUrl} " -m PUT -b $serviceEndpointRequest --headers content-type=application/json --resource $azdoResource -o json `
| ConvertFrom-Json | Set-Variable updatedServiceEndpoint
$updatedServiceEndpoint | ConvertTo-Json -Depth 4 | Write-Debug
if (!$updatedServiceEndpoint) {
Write-Debug "Empty response"
Write-Error "Failed to convert service connection '$($serviceEndpoint.name)'"
exit 1
}
Write-Host "Successfully converted service connection '$($serviceEndpoint.name)'"
}
Convertir une connexion de service Azure Resource Manager existante utilisant un secret :
Vous pouvez rétablir une connexion de service automatique convertie avec son secret pendant sept jours. Après sept jours, vous devrez créer manuellement un nouveau secret.
Si vous créez et convertissez manuellement votre connexion de service, vous ne pouvez pas la rétablir à l’aide de l’outil de connexion de service, car Azure DevOps n’est pas autorisé à modifier ses propres informations d’identification.
Pour rétablir une connexion de service :
Dans le projet Azure DevOps, accédez à Pipelines>Connexions de service.
Sélectionnez une connexion de service existante à rétablir.
Sélectionnez Rétablir la conversion vers le schéma d'origine.
Sélectionnez à nouveau Revenir pour confirmer votre choix.
Créer une connexion de service Azure Resource Manager qui utilise un principal de service existant
Si vous souhaitez utiliser un ensemble prédéfini d’autorisations d’accès et que vous n’avez pas encore défini de principal de service à cette fin, suivez l’un de ces tutoriels pour créer un nouveau principal de service :
- Utilisez le portail pour créer une application Microsoft Entra et un principal de service pouvant accéder aux ressources
- Utiliser Azure PowerShell pour créer un principal du service Azure qui possède un certificat
Pour créer une connexion de service qui utilise un principal de service existant :
Dans le projet Azure DevOps, accédez à Paramètres du projet>Connexions de service.
Pour plus d’informations, reportez-vous à la section Ouvrir les paramètres du projet.
Sélectionnez Nouvelle connexion de service, puis sélectionnez Azure Resource Manager et Suivant.
Sélectionnez Principal de service (manuel) et Suivant.
Dans la boîte de dialogue Nouvelle connexion de service Azure, sélectionnez l’Environnement. Si vous sélectionnez Azure Stack, entrez l’URL de l’environnement, qui est quelque chose comme
https://management.local.azurestack.external
.Sélectionnez le Niveau de portée. Sélectionnez Abonnement ou Groupe d’administration. Les groupes d’administration sont des conteneurs qui vous aident à gérer l’accès, la stratégie et la conformité dans plusieurs abonnements.
Pour la portée Abonnement, entrez les paramètres suivants :
Paramètre Description ID d’abonnement Obligatoire. Entrez l’ID de l’abonnement Azure. Nom d’abonnement Obligatoire. Entrez le nom de l’abonnement Azure. Pour la portée Groupe d’administration, entrez les paramètres suivants :
Paramètre Description ID du groupe d’administration Obligatoire. Entrez l’ID du groupe d’administration Azure. Nom du groupe d’administration Obligatoire. Entrez le nom du groupe d’administration Azure.
Dans la section Authentification, entrez ou sélectionnez les paramètres suivants :
Paramètre Description ID de principal de service Obligatoire. Entrez l’ID du principal de service. Informations d'identification Sélectionnez Clé du principal de service ou Certificat. Si vous avez sélectionné Clé du principal de service, entrez la clé (mot de passe) Si vous avez sélectionné Certificat, entrez le certificat. Identifiant du locataire Obligatoire. Entrez l’ID du client. Vérifier Sélectionnez pour valider les paramètres que vous avez entrés. Dans la section Détails, entrez les paramètres suivants :
Paramètre Description Nom de connexion Obligatoire. Nom sous lequel vous faites référence à cette connexion de service dans les propriétés des tâches. Autre que le nom de votre abonnement Azure. Description facultatif. Entrez une description de la connexion de service. Sécurité Sélectionnez Accorder la permission d’accès à tous les pipelines pour permettre à tous les pipelines d’utiliser cette connexion de service. Si vous ne sélectionnez pas cette option, vous devez accorder manuellement l’accès à chaque pipeline qui utilise cette connexion de service. Sélectionnez Vérifier et enregistrer pour valider et créer la connexion de service.
Dans le projet Azure DevOps, accédez à Paramètres du projet>Connexions de service.
Pour plus d’informations, reportez-vous à la section Ouvrir les paramètres du projet.
Sélectionnez Nouvelle connexion de service, puis Azure Resource Manager.
Dans la boîte de dialogue Ajouter une connexion au service Azure Resource Manager, remplissez les champs comme suit :
Saisissez le nom de la connexion.
Sélectionnez l'environnement. Si vous sélectionnez Azure Stack, entrez l’URL de l’environnement, qui est quelque chose comme
https://management.local.azurestack.external
.Sélectionnez le niveau d’étendue, que ce soit un abonnement ou un groupe de gestion. Les groupes d’administration sont des conteneurs qui vous aident à gérer l’accès, la stratégie et la conformité dans plusieurs abonnements.
Pour la portée Abonnement, entrez les paramètres suivants :
Paramètre Description ID d’abonnement Obligatoire. Entrez l’ID de l’abonnement Azure. Nom d’abonnement Obligatoire. Entrez le nom de l’abonnement Azure. Pour la portée Groupe d’administration, entrez les paramètres suivants :
Paramètre Description ID du groupe d’administration Obligatoire. Entrez l’ID du groupe d’administration Azure. Nom du groupe d’administration Obligatoire. Entrez le nom du groupe d’administration Azure.
Saisissez l'ID du principal du service.
Sélectionnez le type de justificatif :
- Clé du principal du service : Saisissez la clé du principal de service (mot de passe).
- Certificat : Saisissez le contenu du fichier .perm, y compris les sections relatives au certificat et à la clé privée.
Entrez l’ID du client.
Sélectionnez Vérifier la connexion pour valider la connexion au service.
En option, sélectionnez Autoriser tous les pipelines à utiliser cette connexion. Si vous ne sélectionnez pas cette option, vous devez accorder manuellement l’accès à chaque pipeline qui utilise cette connexion de service.
Sélectionnez Enregistrer pour créer la connexion de service.
Une fois la connexion de service créée :
- Si vous utilisez la connexion de service dans l’interface utilisateur, sélectionnez le nom de connexion que vous avez attribué dans le paramètre d’abonnement Azure de votre pipeline.
- Si vous utilisez la connexion de service dans un fichier YAML, copiez le nom de la connexion et collez-le dans votre code comme valeur pour
azureSubscription
.
Si nécessaire, modifiez le principal de service pour exposer les autorisations appropriées.
Pour plus d’informations sur l’authentification à l’aide d’un principal de service, consultez Utiliser le contrôle d’accès en fonction du rôle pour gérer l’accès à vos ressources d’abonnement Azure ou le billet de blog Automatiser un déploiement de groupe de ressources Azure à l’aide d’un principal de service dans Visual Studio.
Pour plus d’informations, consultez Résoudre les problèmes liés à des connexions de service Azure Resource Manager.
Aide et support
- Consultez les conseils de dépannage.
- Obtenez des conseils sur Stack Overflow.
- Publiez vos questions, recherchez des réponses ou suggérez une fonctionnalité dans la Communauté des développeurs Azure DevOps.
- Obtenez un support pour Azure DevOps.