Delen via


Toegang tot een beheerde identiteit toewijzen aan een toepassingsrol

Beheerde identiteiten voor Azure-resources bieden Azure-services een identiteit in Microsoft Entra-id. Ze werken zonder referenties in uw code nodig te hebben. Azure-services gebruiken deze identiteit om te verifiëren bij services die ondersteuning bieden voor Microsoft Entra-verificatie. Toepassingsrollen bieden een vorm van op rollen gebaseerd toegangsbeheer en stellen een service in staat autorisatieregels te implementeren.

Notitie

De tokens die uw toepassing ontvangt, worden in de cache opgeslagen door de onderliggende infrastructuur. Dit betekent dat het veel tijd kost om wijzigingen in de rollen van de beheerde identiteit te verwerken. Zie Beperking van het gebruik van beheerde identiteiten voor autorisatie voor meer informatie.

In dit artikel leert u hoe u een beheerde identiteit toewijst aan een toepassingsrol die wordt weergegeven door een andere toepassing met behulp van de Microsoft Graph PowerShell SDK.

Vereisten

Toegang tot een beheerde identiteit toewijzen aan de app-rol van een andere toepassing met behulp van PowerShell

Als u de voorbeeldscripts wilt uitvoeren, hebt u twee opties:

  1. Schakel beheerde identiteit in voor een Azure-resource, zoals een Azure-VM.

  2. Zoek de object-id van de service-principal van de beheerde identiteit.

    Voor een door het systeem toegewezen beheerde identiteit kunt u de object-id vinden in de Azure-portal op de pagina Identiteit van de resource. U kunt ook het volgende PowerShell-script gebruiken om de object-id te vinden. U hebt de resource-id nodig van de resource die u in stap 1 hebt gemaakt. Deze is beschikbaar in de Azure-portal op de pagina Eigenschappen van de resource.

    $resourceIdWithManagedIdentity = '/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.Compute/virtualMachines/{my virtual machine name}'
    (Get-AzResource -ResourceId $resourceIdWithManagedIdentity).Identity.PrincipalId
    

    Voor een door de gebruiker toegewezen beheerde identiteit kunt u de object-id van de beheerde identiteit vinden in de Azure-portal op de pagina Overzicht van de resource. U kunt ook het volgende PowerShell-script gebruiken om de object-id te vinden. U hebt de resource-id van de door de gebruiker toegewezen beheerde identiteit nodig.

    $userManagedIdentityResourceId = '/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{my managed identity name}'
    (Get-AzResource -ResourceId $userManagedIdentityResourceId).Properties.PrincipalId
    
  3. Maak een nieuwe toepassingsregistratie om de service weer te geven waarnaar uw beheerde identiteit een aanvraag moet verzenden.

    • Als de API of service die de app-rol beschikbaar maakt voor de beheerde identiteit al een service-principal in uw Microsoft Entra-tenant heeft, slaat u deze stap over. In het geval dat u bijvoorbeeld de beheerde identiteit toegang wilt verlenen tot de Microsoft Graph API.
  4. Zoek de object-id van de service-principal van de servicetoepassing. U kunt deze vinden met behulp van de Azure-portal.

    • Ga bijvoorbeeld naar Microsoft Entra-id en open de pagina Bedrijfstoepassingen . Zoek vervolgens de toepassing en zoek naar de object-id.
    • U kunt de object-id van de service-principal ook vinden op basis van de weergavenaam met behulp van het volgende PowerShell-script:
    $serverServicePrincipalObjectId = (Get-MgServicePrincipal -Filter "DisplayName eq '$applicationName'").Id
    

    Notitie

    Weergavenamen voor toepassingen zijn niet uniek, dus controleer of u de service-principal van de juiste toepassing ophaalt.

  5. Voeg een app-rol toe aan de toepassing die u in de vorige stap hebt gemaakt. Vervolgens kunt u de rol maken met behulp van Azure Portal of met behulp van Microsoft Graph.

    • U kunt bijvoorbeeld een app-rol toevoegen door de volgende query uit te voeren 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"
            }
        ]
    }
    
  6. Wijs de app-rol toe aan de beheerde identiteit. U hebt de volgende informatie nodig om de app-rol toe te wijzen:

    • managedIdentityObjectId: de object-id van de service-principal van de beheerde identiteit, die u in de vorige stap hebt gevonden.
    • serverServicePrincipalObjectId: de object-id van de service-principal van de servertoepassing, die u in stap 4 hebt gevonden.
    • appRoleId: de id van de app-rol die wordt weergegeven door de server-app, die u in stap 5 hebt gegenereerd – in het voorbeeld is de app-rol-id 00000000-0000-0000-0000-000000000000.
    • Voer de volgende PowerShell-opdracht uit om de roltoewijzing toe te voegen:
    New-MgServicePrincipalAppRoleAssignment `
        -ServicePrincipalId $serverServicePrincipalObjectId `
        -PrincipalId $managedIdentityObjectId `
        -ResourceId $serverServicePrincipalObjectId `
        -AppRoleId $appRoleId
    

Volledig voorbeeldscript

In dit voorbeeldscript ziet u hoe u de beheerde identiteit van een Azure-web-app toewijst aan een app-rol.

# 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

Een beheerde identiteit toegang toewijzen aan de app-rol van een andere toepassing met behulp van CLI

  1. Beheerde identiteit inschakelen voor een Azure-resource, zoals een virtuele Azure-machine.

  2. Zoek de object-id van de service-principal van de beheerde identiteit.

    • Voor een door het systeem toegewezen beheerde identiteit kunt u de object-id vinden in de Azure-portal op de pagina Identiteit van de resource.
    • U kunt ook het volgende script gebruiken om de object-id te vinden. U hebt de resource-id nodig van de resource die u in de vorige stap hebt gemaakt. Deze is beschikbaar in Azure Portal op de pagina Eigenschappen van de resource.
    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"
    
    • Voor een door de gebruiker toegewezen beheerde identiteit kunt u de object-id van de beheerde identiteit vinden in de Azure-portal op de pagina Overzicht van de resource. U kunt ook het volgende script gebruiken om de object-id te vinden. U hebt de resource-id van de door de gebruiker toegewezen beheerde identiteit nodig.
    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. Maak een nieuwe toepassingsregistratie om de service weer te geven waarnaar uw beheerde identiteit een aanvraag verzendt.

    • Als de API of service die de app-rol beschikbaar maakt voor de beheerde identiteit al een service-principal in uw Microsoft Entra-tenant heeft, slaat u deze stap over.
  4. Zoek de object-id van de service-principal van de servicetoepassing. U kunt deze vinden met behulp van de Azure-portal.

    • Ga naar Microsoft Entra ID en open de pagina Bedrijfstoepassingen , zoek de toepassing en zoek de object-id.
    • U kunt de object-id van de service-principal ook vinden op basis van de weergavenaam met behulp van het volgende script:
    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"
    

    Notitie

    Weergavenamen voor toepassingen zijn niet uniek, dus controleer of u de service-principal van de juiste toepassing ophaalt.

    U kunt de object-id ook vinden op basis van de unieke toepassings-id voor uw toepassingsregistratie:

    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. Voeg een app-rol toe aan de toepassing die u in de vorige stap hebt gemaakt. U kunt de rol maken met behulp van Azure Portal of Microsoft Graph. U kunt bijvoorbeeld een app-rol als volgt toevoegen:

    {
        "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. Wijs de app-rol toe aan de beheerde identiteit. U hebt de volgende informatie nodig om de app-rol toe te wijzen:

    • managedIdentityObjectId: de object-id van de service-principal van de beheerde identiteit, die u in stap 2 hebt gevonden.
    • serverServicePrincipalObjectId: de object-id van de service-principal van de servertoepassing, die u in stap 4 hebt gevonden.
    • appRoleId: de id van de app-rol die wordt weergegeven door de server-app, die u in stap 5 hebt gegenereerd – in het voorbeeld is de app-rol-id 00000000-0000-0000-0000-000000000000.
  7. Voer het volgende script uit om de roltoewijzing toe te voegen. Deze functionaliteit wordt niet rechtstreeks weergegeven in de Azure CLI en dat in plaats daarvan een REST-opdracht wordt gebruikt:

    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\"}"
    

Volgende stappen