Se connecter à Azure à l’aide d’une connexion de service Azure Resource Manager

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019

Vous pouvez utiliser une connexion de service Azure Resource Manager pour vous connecter aux ressources Azure via une authentification de principal de service ou via une identité de service gérée par Azure. Si vous utilisez une connexion au service Azure Resource Manager, vous pouvez utiliser un pipeline pour déployer sur une ressource Azure comme une application Azure App Service sans authentification à chaque fois.

Vous disposez de plusieurs options pour vous connecter à Azure avec les connexions au service Azure Resource Manager :

  • Principal de service ou identité gérée avec fédération d'identité de charge de travail
  • Principal de service avec une clé secrète
  • Identité managée attribuée par l'agent

Pour découvrir d’autres types de connexions et obtenir des informations générales sur la création et l’utilisation de connexions, consultez Connexions de service pour les builds et les mises en production.

Créer une connexion au service Azure Resource Manager qui utilise la fédération d'identité de charge de travail

La fédération d'identité de charge de travail utilise OpenID Connect (OIDC) pour s'authentifier auprès des ressources protégées par Microsoft Entra sans utiliser les secrets.

Nous vous recommandons d’utiliser cette approche si tous les éléments suivants sont vrais pour votre scénario :

  • Vous disposez du rôle Propriétaire pour votre abonnement Azure.
  • Vous ne vous connectez pas à Azure Stack ou à un Azure Government Cloud.
  • 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.

Créer une nouvelle connexion au service de fédération d'identité de charge de travail

  1. 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.

  2. Sélectionnez Nouvelle connexion de service, puis Azure Resource Manager.

    Capture d’écran montrant le choix d’un type de connexion d’identité de charge de travail.

  3. Sélectionnez Fédération d'identité de charge de travail (automatique).

    Capture d’écran montrant la sélection d’un type de connexion de service d’identité de charge de travail.

  4. Spécifiez les paramètres suivants :

    Paramètre Description
    Abonnement Sélectionnez un abonnement Azure existant. Si aucun abonnement ni aucune instance Azure n'apparaît, consultez Résoudre les problèmes de connexions de service Azure Resource Manager.
    Groupe de ressources Laissez vide pour autoriser les utilisateurs à accéder à toutes les ressources définies dans l’abonnement. Pour restreindre l’accès utilisateur aux ressources, entrez un nom de groupe de ressources. Les utilisateurs peuvent ensuite accéder uniquement aux ressources définies pour ce groupe de ressources.
    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.
  5. 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.

  6. Pour effectuer un déploiement sur une ressource Azure spécifique, la tâche a besoin de données supplémentaires sur cette ressource. Accédez à la ressource dans le portail Azure, puis copiez les données dans votre code. Par exemple, pour déployer une application web, copiez le nom de l’application Azure App Service et collez-le dans votre code en tant que valeur pour WebAppName.

Convertir une connexion au service Azure Resource Manager existante afin d'utiliser la fédération d'identité de charge de travail

Vous pouvez convertir rapidement une connexion de service Azure Resource Manager existante pour utiliser la fédération des identités de charge de travail pour l’authentification au lieu d’un principal de service. 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 :

  1. 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.

  2. Sélectionnez la connexion de service que vous souhaitez convertir pour utiliser Workload Identity.

  3. Sélectionnez Convertir.

    Capture d’écran montrant la sélection de la conversion pour les informations d’identification fédérées.

    Si vous disposez d'un identifiant de principal de service existant dont le secret a expiré, vous verrez une autre option de conversion.

    Capture d’écran montrant l’option de conversion pour utiliser des informations d’identification fédérées lorsque vous avez un certificat expiré.

  4. 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. Il vous sera demandé de confirmer que vous souhaitez convertir chaque connexion de service associée qui n'utilise pas la fédération d'identité de la charge de travail. Si vous confirmez, le script utilise l'API Azure DevOps REST pour mettre à jour chaque connexion de service afin d'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 à l’aide de 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)'"
}

Rétablir une connexion de service Azure Resource Manager existante qui utilise un secret principal de service

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 :

  1. Dans le projet Azure DevOps, accédez à Pipelines>Connexions de service.

  2. Sélectionnez une connexion de service existante à rétablir.

  3. Sélectionnez Rétablir la conversion vers le schéma d'origine.

    Capture d’écran montrant la sélection de la restauration pour une identification fédérée.

  4. Sélectionnez à nouveau Revenir pour confirmer votre choix.

Créer une connexion au service Azure Resource Manager qui utilise un secret principal de service

Nous vous recommandons d’utiliser cette approche si tous les éléments suivants sont vrais pour votre scénario :

  • 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 à Azure Stack ou à un Azure Government Cloud.
  • Vous ne vous connectez pas à partir d’Azure DevOps Server 2019 ou de versions antérieures de Team Foundation Server.

Pour créer la connexion de service :

  1. Dans le projet Azure DevOps, accédez à Paramètres du projet>Connexions de service.

    Dans Team Foundation Server, sélectionnez l’icône Paramètres dans la barre de menus supérieure pour accéder à la page Services.

    Pour plus d’informations, reportez-vous à la section Ouvrir les paramètres du projet.

  2. Sélectionnez Nouvelle connexion de service, puis Azure Resource Manager.

    Capture d’écran montrant le choix d’un type de connexion de service.

  3. Entrez ou sélectionnez 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.
    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.
    Abonnement Si vous sélectionnez Abonnement pour l’étendue, sélectionnez un abonnement Azure existant. Si aucun abonnement ni aucune instance Azure n'apparaît, consultez Résoudre les problèmes de connexions de service Azure Resource Manager.
    Groupe d’administration Si vous sélectionnez Groupe d’administration pour l’étendue, sélectionnez un groupe d’administration Azure existant. Pour plus d’informations, consultez Créer des groupes d’administration.
    Groupe de ressources Laissez vide pour autoriser les utilisateurs à accéder à toutes les ressources définies dans l’abonnement. Pour restreindre l’accès utilisateur aux ressources, entrez un nom de groupe de ressources. Les utilisateurs peuvent ensuite accéder uniquement aux ressources définies pour ce groupe de ressources.
  4. Une fois la connexion de service créée :

    • Si vous utilisez l’éditeur classique, sélectionnez le nom de connexion que vous avez attribué dans le paramètre d’abonnement Azure de votre pipeline.
    • Si vous utilisez un fichier YAML, copiez le nom de la connexion dans votre code comme valeur pour azureSubscription.
  5. Pour effectuer un déploiement sur une ressource Azure spécifique, ajoutez plus d’informations sur la ressource dans la tâche :

    • Si vous utilisez l’éditeur classique, sélectionnez les données à ajouter à la tâche. Par exemple, sélectionnez le nom App Service.
    • Si vous utilisez un fichier YAML, accédez à la ressource dans la Portail Azure. Copiez les données dont vous avez besoin et collez-les dans votre code de tâche. Par exemple, pour déployer une application web, copiez le nom de l’application App Service et collez-le comme valeur pour WebAppName dans la tâche YAML.

Remarque

Lorsque vous suivez cette approche, Azure DevOps se connecte à Microsoft Entra ID et crée une inscription d’application avec un secret valable trois mois. Lorsque la connexion au service est sur le point d’expirer, Microsoft Entra ID affiche ce message : Un certificat ou un secret va bientôt expirer. Créez-en un nouveau. Dans ce scénario, vous devez actualiser la connexion de service.

Pour actualiser une connexion de service, dans le portail Azure DevOps, modifiez la connexion, puis sélectionnez Vérifier. Une fois que vous avez enregistré la modification, la connexion de service est valide pendant trois mois.

Nous vous recommandons d’utiliser la fédération des identités de charge de travail au lieu de créer un secret. Si vous utilisez la fédération des identités de charge de travail, vous n’avez pas besoin de permuter les secrets, et l’inscription de l’application conserve son objectif prévu. Pour commencer à utiliser la fédération des identités de charge de travail, accédez à la page détails de la connexion de service, puis sélectionnez Convertir. La connexion de service est convertie pour utiliser la fédération des identités de charge de travail plutôt qu'un secret. Pour plus d’informations, consultez Convertir une connexion de service Azure Resource Manager existante pour utiliser la fédération des identités de charge de travail.

Pour plus d’informations, consultez Résoudre les problèmes liés à une connexion de service Azure Resource Manager.

Si vous rencontrez des problèmes d’utilisation de cette approche (par exemple, aucun abonnement affiché dans la liste déroulante) ou si vous souhaitez limiter davantage les autorisations des utilisateurs, vous pouvez utiliser un principal de service ou une machine virtuelle avec une identité de service géré.

Créer une connexion de service Azure Resource Manager qui utilise un principal de service existant

  1. 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 :

  2. Dans le projet Azure DevOps, accédez à Paramètres du projet>Connexions de service.

    Dans Team Foundation Server, sélectionnez l’icône Paramètres dans la barre de menus supérieure pour accéder à la page Services.

    Pour plus d’informations, reportez-vous à la section Ouvrir les paramètres du projet.

  3. Sélectionnez Nouvelle connexion de service, puis Azure Resource Manager.

    Capture d’écran montrant le choix d’un type de connexion de service.

  4. Sélectionnez l’option Principal du service (manuel) puis entrez les détails du principal de service.

    Capture d’écran montrant l’ouverture de la version complète de la boîte de dialogue du service.

  5. Pour Nom de connexion, entrez un nom d'affichage à utiliser pour faire référence à cette connexion de service.

  6. Pour Environnement, sélectionnez le nom de l’environnement (Azure Cloud, Azure Stack ou Azure Government Cloud).

  7. Si vous ne sélectionnez pas Azure Cloud, entrez l’URL de l’environnement. Pour Azure Stack, l’URL de l’environnement est similaire à https://management.local.azurestack.external.

  8. Pour Niveau d’étendue, sélectionnez l’étendue de la connexion :

  9. Dans la boîte de dialogue d’abonnement Azure, entrez les informations suivantes concernant votre principal de service :

    • Identifiant d’abonnement
    • Nom d’abonnement
    • ID de principal de service
    • La clé cliente du principal de service ou, si vous avez sélectionné Certificat, entrez le contenu des sections de certificat et de clé privée du fichier *.pem.
    • ID client

    Vous pouvez obtenir ces informations en téléchargeant et en exécutant un script Azure PowerShell. Quand vous y êtes invité, entrez le nom de votre abonnement, votre mot de passe, votre rôle (facultatif) et le type de cloud, par exemple Azure (valeur par défaut), Azure Stack ou Azure Government.

  10. Sélectionnez Vérifier la connexion pour valider les paramètres que vous avez entrés.

  11. 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.
  12. 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.

Créer une connexion de service Azure Resource Manager à une machine virtuelle qui utilise une identité de service managée

Remarque

Pour utiliser une identité de service managé pour vous authentifier, vous devez utiliser un agent auto-hébergé sur une machine virtuelle Azure.

Vous pouvez configurer des agents basés sur des machines virtuelles Azure pour qu'ils utilisent une identité de service managé Azure dans Microsoft Entra ID. Dans ce scénario, vous utilisez l’identité attribuée par le système (principal du service) pour accorder aux agents basés sur une machine virtuelle Azure l’accès à toute ressource Azure prenant en charge Microsoft Entra ID, telle qu'une instance d'Azure Key Vault, au lieu de conserver les informations d’identification dans Azure DevOps pour la connexion.

  1. Dans le projet Azure DevOps, accédez à Paramètres du projet>Connexions de service.

    Dans Team Foundation Server, sélectionnez l’icône Paramètres dans la barre de menus supérieure pour accéder à la page Services.

    Pour plus d’informations, reportez-vous à la section Ouvrir les paramètres du projet.

  2. Sélectionnez Nouvelle connexion de service, puis Azure Resource Manager.

    Capture d’écran montrant le choix d’un type de connexion de service.

  3. Sélectionnez l’option Authentification d’identité managée.

    Capture d’écran montrant comment accéder aux paramètres d’identité de service gérée.

  4. Pour Nom de connexion, entrez un nom d'affichage à utiliser lorsque vous faites référence à cette connexion de service.

  5. Pour Environnement, sélectionnez le nom de l’environnement (Azure Cloud, Azure Stack ou Azure Government Cloud).

  6. Dans la boîte de dialogue des connexions, entrez les valeurs suivantes de votre abonnement :

    • Identifiant d’abonnement
    • Nom d’abonnement
    • ID client
  7. 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 dans votre code comme valeur pour azureSubscription.
  8. Vérifiez que la machine virtuelle (agent) dispose des autorisations appropriées.

    Par exemple, si votre code doit appeler Azure Resource Manager, attribuez à la machine virtuelle le rôle approprié en utilisant le contrôle d'accès basé sur le rôle (RBAC) dans Microsoft Entra ID.

    Pour plus d’informations, consultez Comment utiliser des identités managées pour les ressources Azure ? et Utiliser le contrôle d’accès en fonction du rôle pour gérer l’accès à vos ressources d’abonnement Azure.

Pour plus d’informations sur le processus, consultez Résoudre les problèmes de connexions de service Azure Resource Manager.

Se connecter à un cloud Azure Government

Pour plus d’informations sur la connexion à un cloud Azure Government, consultez Connecter à partir d’Azure Pipelines (Cloud Azure Government).

Se connecter à Azure Stack

Pour plus d’informations sur la connexion à Azure Stack, consultez ces articles :

Aide et support