Share via


Toegang tot een beheerde identiteit toewijzen aan een toepassingsrol met behulp van PowerShell

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, wat betekent dat wijzigingen in de rollen van de beheerde identiteit aanzienlijke tijd in beslag kunnen nemen. 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

  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 te vertegenwoordigen 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. Als u bijvoorbeeld de toegang tot een beheerde identiteit wilt verlenen aan de Microsoft Graph-API, kunt u deze stap overslaan.

  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 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 stap 3 hebt gemaakt. U kunt de rol maken met behulp van de 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 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 0566419e-bb95-4d9d-a4f8-ed9a0f147fa6.

    Voer de volgende PowerShell-opdracht uit om de roltoewijzing toe te voegen:

    New-MgServicePrincipalAppRoleAssignment `
        -ServicePrincipalId $serverServicePrincipalObjectId `
        -PrincipalId $managedIdentityObjectId `
        -ResourceId $serverServicePrincipalObjectId `
        -AppRoleId $appRoleId
    

Script voltooien

Dit voorbeeldscript laat zien 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

Volgende stappen