Condividi tramite


Assegnare un accesso all'identità gestita a un ruolo applicazione usando l'interfaccia della riga di comando di Azure

Le identità gestite per le risorse di Azure forniscono ai servizi di Azure un'identità in Microsoft Entra ID. Funzionano senza bisogno di 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 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, il che significa che le modifiche apportate ai ruoli dell'identità gestita possono richiedere tempo significativo per rendere effettive. Per altre informazioni, vedere Limitazione dell'uso di identità gestite per l'autorizzazione.

Questo articolo illustra come assegnare un'identità gestita a un ruolo applicazione esposto da un'altra applicazione usando l'interfaccia della riga di comando di Azure.

Prerequisiti

Assegnare un accesso all'identità gestita al ruolo dell'app di un'altra applicazione

  1. Abilitare l'identità gestita in una risorsa di Azure, ad esempio una macchina virtuale di Azure.

  2. Trovare l'ID oggetto dell'entità servizio dell'identità gestita.

    Per un'identità gestita assegnata dal sistema, è possibile trovare l'ID oggetto nella portale di Azure nella pagina Identità della risorsa. È anche possibile usare lo script seguente per trovare l'ID oggetto. Sarà necessario l'ID risorsa della risorsa creata nel passaggio 1, disponibile nella 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 nella 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"
    
  3. Creare una nuova registrazione dell'applicazione per rappresentare il servizio a cui l'identità gestita invierà 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.

  4. Trovare l'ID oggetto dell'entità servizio dell'applicazione di servizio. È possibile trovarla usando il portale di Azure. Passare a Microsoft Entra ID e aprire la pagina Applicazioni aziendali, quindi trovare 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, pertanto è necessario verificare 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"
    
  5. Aggiungere un ruolo dell'app all'applicazione creata nel passaggio 3. È possibile creare il ruolo usando il portale di Azure o Microsoft Graph. Ad esempio, è possibile aggiungere un ruolo app simile al 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"
    }
    
  6. Assegnare il ruolo dell'app all'identità gestita. Per assegnare il ruolo dell'app, sono necessarie le informazioni seguenti:

    • managedIdentityObjectId: ID oggetto dell'entità servizio dell'identità gestita, disponibile nel passaggio 2.
    • serverServicePrincipalObjectId: ID oggetto dell'entità servizio dell'applicazione server, disponibile nel passaggio 4.
    • appRoleId: l'ID del ruolo 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. Si noti che questa funzionalità non è esposta direttamente nell'interfaccia della riga di comando di Azure e che 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