Assegnare a un'identità gestita l'accesso a un ruolo dell'applicazione
Le identità gestite per le risorse di Azure offrono ai servizi di Azure un'identità in Microsoft Entra ID. Non richiedono di incorporare le credenziali nel codice. I servizi di Azure usano questa identità per eseguire l'autenticazione ai servizi che supportano l'autenticazione di Microsoft Entra. I ruoli dell'applicazione forniscono una forma di controllo degli accessi in base al ruolo e consentono a un servizio di implementare le regole di autorizzazione.
Nota
I token ricevuti dall'applicazione vengono memorizzati nella cache dall'infrastruttura sottostante. Ciò significa che le modifiche apportate ai ruoli dell'identità gestita possono richiedere tempi di elaborazione prolungati. Per altre informazioni, vedere Limitazione dell'uso di identità gestite per l'autorizzazione.
Questo articolo illustra come assegnare un'identità gestita a un ruolo dell'applicazione esposto da un'altra applicazione usando Microsoft Graph PowerShell SDK.
Prerequisiti
- Se non si ha familiarità con le identità gestite per le risorse di Azure, vedere Panoramica sulle identità gestite per le risorse di Azure.
- Esaminare la differenza tra identità assegnata dal sistema e identità gestita assegnata dall'utente.
- Se non si ha un account Azure, registrarsi per ottenere un account gratuito prima di continuare.
Assegnare a un'identità gestita l'accesso al ruolo app di un'altra applicazione tramite PowerShell
Per eseguire gli script di esempio, sono disponibili due opzioni:
- Usare Azure Cloud Shell, che è possibile aprire con il pulsante Prova nell'angolo in alto a destra dei blocchi di codice.
- Eseguire gli script in locale installando l'ultima versione di Microsoft Graph PowerShell SDK.
Abilitare l'identità gestita in una risorsa di Azure, ad esempio una macchina virtuale di Azure.
Trovare l'ID oggetto dell'entità servizio dell'identità gestita.
Per un'identità gestita assegnata dal sistema, è possibile trovare l'ID oggetto nel portale di Azure nella pagina Identità della risorsa. È anche possibile usare lo script di PowerShell seguente per trovare l'ID oggetto. Sarà necessario l'ID della risorsa creata nel passaggio 1, disponibile nel portale di Azure nella pagina Proprietà della risorsa.
$resourceIdWithManagedIdentity = '/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.Compute/virtualMachines/{my virtual machine name}' (Get-AzResource -ResourceId $resourceIdWithManagedIdentity).Identity.PrincipalId
Per un'identità gestita assegnata dall'utente, è possibile trovare l'ID oggetto dell'identità gestita nel portale di Azure nella pagina Panoramica della risorsa. È anche possibile usare lo script di PowerShell seguente per trovare l'ID oggetto. Sarà necessario l'ID risorsa dell'identità gestita assegnata dall'utente.
$userManagedIdentityResourceId = '/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{my managed identity name}' (Get-AzResource -ResourceId $userManagedIdentityResourceId).Properties.PrincipalId
Creare una nuova registrazione dell'applicazione per rappresentare il servizio a cui l'identità gestita dovrà inviare una richiesta.
- Se l'API o il servizio che espone la concessione del ruolo app all'identità gestita ha già un'entità servizio nel tenant di Microsoft Entra, ignorare questo passaggio. Ad esempio, se si vuole concedere all'identità gestita l'accesso all'API Microsoft Graph.
Trovare l'ID oggetto dell'entità servizio dell'applicazione del servizio. Tale ID è reperibile nel portale di Azure.
- Ad esempio, passare a Microsoft Entra ID e aprire la pagina Applicazioni aziendali. Trovare quindi l'applicazione e cercare l'ID oggetto.
- È anche possibile trovare l'ID oggetto dell'entità servizio in base al nome visualizzato usando lo script di PowerShell seguente:
$serverServicePrincipalObjectId = (Get-MgServicePrincipal -Filter "DisplayName eq '$applicationName'").Id
Nota
I nomi visualizzati per le applicazioni non sono univoci, quindi è necessario assicurarsi di ottenere l'entità servizio dell'applicazione corretta.
Aggiungere un ruolo dell'app all'applicazione creata nel passaggio precedente. È quindi possibile creare il ruolo usando il portale di Azure o Microsoft Graph.
- Ad esempio, è possibile aggiungere un ruolo dell'app eseguendo la query seguente in Graph explorer:
PATCH /applications/{id}/ { "appRoles": [ { "allowedMemberTypes": [ "User", "Application" ], "description": "Read reports", "id": "1e250995-3081-451e-866c-0f6efef9c638", "displayName": "Report reader", "isEnabled": true, "value": "report.read" } ] }
Assegnare il ruolo dell'app all'identità gestita. Per assegnare il ruolo, sono necessarie le informazioni seguenti:
managedIdentityObjectId
: ID oggetto dell'entità servizio dell'identità gestita, trovato nel passaggio precedente.serverServicePrincipalObjectId
: ID oggetto dell'entità servizio dell'applicazione server, trovato nel passaggio 4.appRoleId
: ID del ruolo dell'app esposto dall'app server, generato nel passaggio 5. Nell'esempio, l'ID ruolo dell'app è00000000-0000-0000-0000-000000000000
.
- Eseguire il comando di PowerShell seguente per aggiungere l'assegnazione di ruolo:
New-MgServicePrincipalAppRoleAssignment ` -ServicePrincipalId $serverServicePrincipalObjectId ` -PrincipalId $managedIdentityObjectId ` -ResourceId $serverServicePrincipalObjectId ` -AppRoleId $appRoleId
Script di esempio completo
Questo script di esempio illustra come assegnare l'identità gestita di un'app Web di Azure a un ruolo dell'app.
# 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
Assegnare a un'identità gestita l'accesso al ruolo app di un'altra applicazione tramite l'interfaccia della riga di comando
Usare l'ambiente Bash in Azure Cloud Shell. Per altre informazioni, vedere Avvio rapido su Bash in Azure Cloud Shell.
Se si preferisce eseguire i comandi di riferimento dell'interfaccia della riga di comando in locale, installare l'interfaccia della riga di comando di Azure. Per l'esecuzione in Windows o macOS, è consigliabile eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker. Per altre informazioni, vedere Come eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker.
Se si usa un'installazione locale, accedere all'interfaccia della riga di comando di Azure con il comando az login. Per completare il processo di autenticazione, seguire la procedura visualizzata nel terminale. Per altre opzioni di accesso, vedere Accedere tramite l'interfaccia della riga di comando di Azure.
Quando richiesto, al primo utilizzo installare l'estensione dell'interfaccia della riga di comando di Azure. Per altre informazioni sulle estensioni, vedere Usare le estensioni con l'interfaccia della riga di comando di Azure.
Eseguire az version per trovare la versione e le librerie dipendenti installate. Per eseguire l'aggiornamento alla versione più recente, eseguire az upgrade.
Abilitare l'identità gestita in una risorsa di Azure, ad esempio una macchina virtuale di Azure.
Trovare l'ID oggetto dell'entità servizio dell'identità gestita.
- Per un'identità gestita assegnata dal sistema, è possibile trovare l'ID oggetto nel portale di Azure nella pagina Identità della risorsa.
- È anche possibile usare lo script seguente per trovare l'ID oggetto. Sarà necessario l'ID della risorsa creata nel passaggio precedente, disponibile nel portale di Azure nella pagina Proprietà della risorsa.
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"
- Per un'identità gestita assegnata dall'utente, è possibile trovare l'ID oggetto dell'identità gestita nel portale di Azure nella pagina Panoramica della risorsa. È anche possibile usare lo script seguente per trovare l'ID oggetto. Sarà necessario l'ID risorsa dell'identità gestita assegnata dall'utente.
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"
Creare una nuova registrazione dell'applicazione per rappresentare il servizio a cui l'identità gestita invia una richiesta.
- Se l'API o il servizio che espone la concessione del ruolo app all'identità gestita ha già un'entità servizio nel tenant di Microsoft Entra, ignorare questo passaggio.
Trovare l'ID oggetto dell'entità servizio dell'applicazione del servizio. Tale ID è reperibile nel portale di Azure.
- Passare a Microsoft Entra ID e aprire la pagina Applicazioni aziendali, quindi individuare l'applicazione e cercare l'ID oggetto.
- È anche possibile trovare l'ID oggetto dell'entità servizio in base al nome visualizzato usando lo script seguente:
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"
Nota
I nomi visualizzati per le applicazioni non sono univoci, quindi è necessario assicurarsi di ottenere l'entità servizio dell'applicazione corretta.
In alternativa, è possibile trovare l'ID oggetto in base all'ID applicazione univoco per la registrazione dell'applicazione:
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"
Aggiungere un ruolo dell'app all'applicazione creata nel passaggio precedente. È possibile creare il ruolo usando il portale di Azure o Microsoft Graph. Ad esempio, è possibile aggiungere un ruolo dell'app nel modo seguente:
{ "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" }
Assegnare il ruolo dell'app all'identità gestita. Per assegnare il ruolo, sono necessarie le informazioni seguenti:
managedIdentityObjectId
: ID oggetto dell'entità servizio dell'identità gestita, trovato nel passaggio 2.serverServicePrincipalObjectId
: ID oggetto dell'entità servizio dell'applicazione server, trovato nel passaggio 4.appRoleId
: ID del ruolo dell'app esposto dall'app server, generato nel passaggio 5. Nell'esempio, l'ID ruolo dell'app è00000000-0000-0000-0000-000000000000
.
Eseguire lo script seguente per aggiungere l'assegnazione di ruolo. Questa funzionalità non è esposta direttamente nell'interfaccia della riga di comando di Azure e in questo caso viene usato un comando REST:
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\"}"
Passaggi successivi
- Panoramica delle identità gestite per le risorse di Azure
- Per abilitare l'identità gestita in una macchina virtuale di Azure, vedere Configurare identità gestite per le risorse di Azure in una macchina virtuale di Azure.