Affecter à une identité managée l’accès à un rôle d’application
Les identités managées pour les ressources Azure fournissent aux services Azure une identité dans Microsoft Entra ID. Elles fonctionnent sans avoir besoin d’informations d’identification dans votre code. Les services Azure utilisent cette identité pour s’authentifier sur les services prenant en charge l’authentification Microsoft Entra. Les rôles d’application fournissent une forme de contrôle d’accès en fonction du rôle et permettent à un service d’implémenter des règles d’autorisation.
Remarque
Les jetons reçus par votre application sont mis en cache par l’infrastructure sous-jacente. Cela signifie que les modifications apportées aux rôles de l’identité managée peuvent prendre beaucoup de temps à traiter. Pour plus d’informations, consultez Limitation de l’utilisation des identités managées pour l’autorisation.
Dans cet article, vous allez apprendre à affecter une identité managée à un rôle d’application exposé par une autre application avec le kit de développement logiciel (SDK) Microsoft Graph PowerShell.
Prérequis
- Si vous n’êtes pas familiarisé avec les identités managées pour les ressources Azure, consultez Vue d’ensemble de l’identité managée pour les ressources Azure.
- Passez en revue la différence entre une identité managée affectée par le système et affectée par l’utilisateur.
- Si vous n’avez pas encore de compte Azure, inscrivez-vous à un essai gratuit avant de continuer.
Affecter à une identité managée l’accès au rôle d’application d’une autre application en utilisant PowerShell
Pour exécuter les exemples de scripts, vous avez deux options :
- Utiliser Azure Cloud Shell, que vous pouvez ouvrir en utilisant le bouton Essayer dans le coin supérieur droit des blocs de code.
- Exécutez des scripts localement en installant la version du kit de développement logiciel (SDK) Microsoft Graph PowerShell la plus récente.
Activez l’identité managée sur une ressource Azure, telle qu’une machine virtuelle Azure.
Recherchez l’ID d’objet du principal de service de l’identité managée.
Pour une identité managée affectée par le système, vous pouvez rechercher l’ID d’objet dans le portail Azure, dans la page Identité de la ressource. Vous pouvez également utiliser le script PowerShell suivant pour rechercher l’ID d’objet. Vous aurez besoin de l’ID de ressource de la ressource que vous avez créée à l’étape 1, qui est disponible dans le portail Azure, dans la page Propriétés de la ressource.
$resourceIdWithManagedIdentity = '/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.Compute/virtualMachines/{my virtual machine name}' (Get-AzResource -ResourceId $resourceIdWithManagedIdentity).Identity.PrincipalId
Pour une identité managée affectée par l’utilisateur, vous pouvez rechercher l’ID d’objet de l’identité managée dans le portail Azure, dans la page Vue d’ensemble de la ressource. Vous pouvez également utiliser le script PowerShell suivant pour rechercher l’ID d’objet. Vous aurez besoin de l’ID de ressource de l’identité managée affectée par l’utilisateur.
$userManagedIdentityResourceId = '/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{my managed identity name}' (Get-AzResource -ResourceId $userManagedIdentityResourceId).Properties.PrincipalId
Créez une inscription d’application pour représenter le service auquel vous souhaitez que votre identité managée envoie une demande.
- Si l’API ou le service qui expose l’octroi de rôle d’application à l’identité managée a déjà un principal de service dans votre locataire Microsoft Entra, ignorez cette étape. Par exemple, dans le cas où vous souhaitez octroyer à l’identité managée l’accès à l’API Microsoft Graph.
Recherchez l’ID d’objet du principal de service de l’application de service. Vous le trouverez en utilisant le portail Azure.
- Par exemple, accédez à Microsoft Entra ID et ouvrez la page Applications d’entreprise. Recherchez ensuite l’application et recherchez l’ID d’objet.
- Vous pouvez également rechercher l’ID d’objet du principal de service par son nom d’affichage à l’aide du script PowerShell suivant :
$serverServicePrincipalObjectId = (Get-MgServicePrincipal -Filter "DisplayName eq '$applicationName'").Id
Remarque
Les noms d’affichage des applications ne sont pas uniques et vous devez vérifier que vous obtenez le principal de service de l’application appropriée.
Ajoutez un rôle d’application à l’application que vous avez créée à l’étape précédente. Ensuite, vous pouvez créer le rôle à l’aide du portail Azure ou de Microsoft Graph.
- Par exemple, vous pouvez ajouter un rôle d’application en exécutant la requête suivante dans l’Afficheur Graph :
PATCH /applications/{id}/ { "appRoles": [ { "allowedMemberTypes": [ "User", "Application" ], "description": "Read reports", "id": "1e250995-3081-451e-866c-0f6efef9c638", "displayName": "Report reader", "isEnabled": true, "value": "report.read" } ] }
Affectez le rôle d’application à l’identité managée. Vous aurez besoin des informations suivantes pour affecter le rôle d’application :
managedIdentityObjectId
: ID d’objet du principal de service de l’identité managée, que vous avez trouvé à l’étape précédente.serverServicePrincipalObjectId
: ID d’objet du principal de service de l’application serveur, que vous avez trouvé à l’étape 4.appRoleId
: ID du rôle d’application exposé par l’application serveur, que vous avez généré à l’étape 5 – dans cet exemple, l’ID du rôle d’application est00000000-0000-0000-0000-000000000000
.
- Exécutez le script PowerShell suivant pour ajouter l’attribution de rôle :
New-MgServicePrincipalAppRoleAssignment ` -ServicePrincipalId $serverServicePrincipalObjectId ` -PrincipalId $managedIdentityObjectId ` -ResourceId $serverServicePrincipalObjectId ` -AppRoleId $appRoleId
Exemple de script complet
Cet exemple de script vous montre comment affecter une identité managée d’une application web Azure à un rôle d’application.
# Install the module.
# Install-Module Microsoft.Graph -Scope CurrentUser
# Your tenant ID (in the Azure portal, under Azure Active Directory > Overview).
$tenantID = '<tenant-id>'
# The name of your web app, which has a managed identity that should be assigned to the server app's app role.
$webAppName = '<web-app-name>'
$resourceGroupName = '<resource-group-name-containing-web-app>'
# The name of the server app that exposes the app role.
$serverApplicationName = '<server-application-name>' # For example, MyApi
# The name of the app role that the managed identity should be assigned to.
$appRoleName = '<app-role-name>' # For example, MyApi.Read.All
# Look up the web app's managed identity's object ID.
$managedIdentityObjectId = (Get-AzWebApp -ResourceGroupName $resourceGroupName -Name $webAppName).identity.principalid
Connect-MgGraph -TenantId $tenantId -Scopes 'Application.Read.All','Application.ReadWrite.All','AppRoleAssignment.ReadWrite.All','Directory.AccessAsUser.All','Directory.Read.All','Directory.ReadWrite.All'
# Look up the details about the server app's service principal and app role.
$serverServicePrincipal = (Get-MgServicePrincipal -Filter "DisplayName eq '$serverApplicationName'")
$serverServicePrincipalObjectId = $serverServicePrincipal.Id
$appRoleId = ($serverServicePrincipal.AppRoles | Where-Object {$_.Value -eq $appRoleName }).Id
# Assign the managed identity access to the app role.
New-MgServicePrincipalAppRoleAssignment `
-ServicePrincipalId $serverServicePrincipalObjectId `
-PrincipalId $managedIdentityObjectId `
-ResourceId $serverServicePrincipalObjectId `
-AppRoleId $appRoleId
Affecter à une identité managée l’accès au rôle d’application d’une autre application en utilisant CLI
Utilisez l’environnement Bash dans Azure Cloud Shell. Pour plus d’informations, consultez Démarrage rapide pour Bash dans Azure Cloud Shell.
Si vous préférez exécuter les commandes de référence de l’interface de ligne de commande localement, installez l’interface Azure CLI. Si vous exécutez sur Windows ou macOS, envisagez d’exécuter Azure CLI dans un conteneur Docker. Pour plus d’informations, consultez Guide pratique pour exécuter Azure CLI dans un conteneur Docker.
Si vous utilisez une installation locale, connectez-vous à Azure CLI à l’aide de la commande az login. Pour finir le processus d’authentification, suivez les étapes affichées dans votre terminal. Pour connaître les autres options de connexion, consultez Se connecter avec Azure CLI.
Lorsque vous y êtes invité, installez l’extension Azure CLI lors de la première utilisation. Pour plus d’informations sur les extensions, consultez Utiliser des extensions avec Azure CLI.
Exécutez az version pour rechercher la version et les bibliothèques dépendantes installées. Pour effectuer une mise à niveau vers la dernière version, exécutez az upgrade.
Activez l’identité managée sur une ressource Azure, telle qu’une machine virtuelle Azure.
Recherchez l’ID d’objet du principal de service de l’identité managée.
- Pour une identité managée affectée par le système, vous pouvez rechercher l’ID d’objet dans le portail Azure, dans la page Identité de la ressource.
- Vous pouvez également utiliser le script suivant pour rechercher l’ID d’objet. Vous aurez besoin de l’ID de ressource de la ressource que vous avez créée à l’étape précédente, qui est disponible dans le portail Azure, dans la page Propriétés de la ressource.
resourceIdWithManagedIdentity="/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.Compute/virtualMachines/{my virtual machine name}" oidForMI=$(az resource show --ids $resourceIdWithManagedIdentity --query "identity.principalId" -o tsv | tr -d '[:space:]') echo "object id for managed identity is: $oidForMI"
- Pour une identité managée affectée par l’utilisateur, vous pouvez rechercher l’ID d’objet de l’identité managée dans le portail Azure, dans la page Vue d’ensemble de la ressource. Vous pouvez également utiliser le script suivant pour rechercher l’ID d’objet. Vous aurez besoin de l’ID de ressource de l’identité managée affectée par l’utilisateur.
userManagedIdentityResourceId="/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{my managed identity name}" oidForMI=$(az resource show --id $userManagedIdentityResourceId --query "properties.principalId" -o tsv | tr -d '[:space:]') echo "object id for managed identity is: $oidForMI"
Créez une nouvelle inscription d’application pour représenter le service auquel votre identité managée envoie une demande.
- Si l’API ou le service qui expose l’octroi de rôle d’application à l’identité managée a déjà un principal de service dans votre locataire Microsoft Entra, ignorez cette étape.
Recherchez l’ID d’objet du principal de service de l’application de service. Vous le trouverez en utilisant le portail Azure.
- Accédez à Microsoft Entra ID et ouvrez la page Applications d’entreprise, puis recherchez l’application et recherchez l’ID d’objet.
- Vous pouvez également rechercher l’ID d’objet du principal de service par son nom d’affichage à l’aide du script suivant :
appName="{name for your application}" serverSPOID=$(az ad sp list --filter "displayName eq '$appName'" --query '[0].id' -o tsv | tr -d '[:space:]') echo "object id for server service principal is: $serverSPOID"
Notes
Les noms d’affichage des applications ne sont pas uniques et vous devez vérifier que vous obtenez le principal de service de l’application appropriée.
Ou vous pouvez rechercher l’ID d’objet par l’ID d’application unique pour votre inscription d’application :
appID="{application id for your application}" serverSPOID=$(az ad sp list --filter "appId eq '$appID'" --query '[0].id' -o tsv | tr -d '[:space:]') echo "object id for server service principal is: $serverSPOID"
Ajoutez un rôle d’application à l’application que vous avez créée à l’étape précédente. Vous pouvez créer ce rôle à l’aide du portail Azure ou de Microsoft Graph. Par exemple, vous pouvez ajouter un rôle d’application comme suit :
{ "allowedMemberTypes": [ "Application" ], "displayName": "Read data from MyApi", "id": "0566419e-bb95-4d9d-a4f8-ed9a0f147fa6", "isEnabled": true, "description": "Allow the application to read data as itself.", "value": "MyApi.Read.All" }
Affectez le rôle d’application à l’identité managée. Vous aurez besoin des informations suivantes pour affecter le rôle d’application :
managedIdentityObjectId
: ID d’objet du principal de service de l’identité managée, que vous avez trouvé à l’étape 2.serverServicePrincipalObjectId
: ID d’objet du principal de service de l’application serveur, que vous avez trouvé à l’étape 4.appRoleId
: ID du rôle d’application exposé par l’application serveur, que vous avez généré à l’étape 5 – dans cet exemple, l’ID du rôle d’application est00000000-0000-0000-0000-000000000000
.
Exécutez le script suivant pour ajouter l’attribution de rôle. Cette fonctionnalité n’est pas directement exposée sur l’Azure CLI, et qu’une commande REST est utilisée ici à la place :
roleguid="00000000-0000-0000-0000-000000000000" az rest -m POST -u https://graph.microsoft.com/v1.0/servicePrincipals/$oidForMI/appRoleAssignments -b "{\"principalId\": \"$oidForMI\", \"resourceId\": \"$serverSPOID\",\"appRoleId\": \"$roleguid\"}"
Étapes suivantes
- Vue d’ensemble de l’identité managée pour les ressources Azure
- Pour activer l’identité managée sur une machine virtuelle Azure, consultez Configurer des identités managées pour ressources Azure sur une machine virtuelle Azure.