Zuweisung eines verwalteten Identitätszugriffs zu einer Anwendungsrolle

Verwaltete Identitäten für Azure-Ressourcen stellen Azure-Diensten eine Identität in Microsoft Entra ID bereit. Für die Funktionalität sind keine Anmeldeinformationen in Ihrem Code erforderlich. Azure-Dienste nutzen diese Identitäten, um sich bei Diensten zu authentifizieren, die die Microsoft Entra -Authentifizierung unterstützen. Anwendungsrollen stellen eine Art rollenbasierter Zugriffssteuerung dar und ermöglichen es einem Dienst, Autorisierungsregeln zu implementieren.

Hinweis

Die Token, die Ihre Anwendung empfängt, werden von der zugrunde liegenden Infrastruktur zwischengespeichert. Dies bedeutet, dass Änderungen an den Rollen der verwalteten Identität erhebliche Zeit in Anspruch nehmen können. Weitere Informationen finden Sie unter Einschränkung der Verwendung verwalteter Identitäten zur Autorisierung.

In diesem Artikel erfahren Sie, wie Sie einer Anwendungsrolle, die durch eine andere Anwendung verfügbar gemacht wird, über das Microsoft Graph-PowerShell SDK eine verwaltete Identität zuweisen.

Voraussetzungen

Zuweisen des Zugriffs einer verwalteten Identität auf die App-Rolle einer anderen Anwendung mithilfe von PowerShell

Zum Ausführen der Beispielskripts haben Sie zwei Möglichkeiten:

  • Verwenden Sie die Azure Cloud Shell, die Sie über die Schaltfläche Testen in der rechten oberen Ecke der Codeblöcke öffnen können.
  • Führen Sie Skripts lokal aus, indem Sie die neueste Version des Microsoft Graph-PowerShell SDK installieren.
  1. Aktivieren Sie die verwaltete Identität für eine Azure-Ressource, zum Beispiel einen virtuellen Azure-Computer.

  2. Suchen Sie die Objekt-ID des Dienstprinzipals der verwalteten Identität.

    Bei einer systemseitig zugewiesenen verwalteten Identität finden Sie die Objekt-ID im Azure-Portal auf der Seite Identität der Ressource. Sie können auch das folgende PowerShell-Skript verwenden, um die Objekt-ID zu suchen. Sie benötigen die Ressourcen-ID der in Schritt 1 erstellten Ressource, die Sie im Azure-Portal auf der Seite Eigenschaften der Ressource finden.

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

    Bei einer benutzerseitig zugewiesenen verwalteten Identität finden Sie die Objekt-ID der verwalteten Identität im Azure-Portal auf der Seite Übersicht der Ressource. Sie können auch das folgende PowerShell-Skript verwenden, um die Objekt-ID zu suchen. Sie benötigen die Ressourcen-ID der benutzerseitig zugewiesenen verwalteten Identität.

    $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. Erstellen Sie eine neue Anwendungsregistrierung, um den von Ihnen gewählten Dienst zu repräsentieren, an den Ihre verwaltete Identität eine Anforderung senden soll.

    • Wenn die API oder der Dienst, die bzw. der die Gewährung der App-Rolle für die verwaltete Identität verfügbar macht, bereits über einen Dienstprinzipal in Ihrem Microsoft Entra -Mandanten verfügt, überspringen Sie diesen Schritt. Beispielsweise, wenn Sie der verwalteten Identität Zugriff auf die Microsoft Graph-API gewähren möchten.
  4. Suchen Sie die Objekt-ID des Dienstprinzipals der Dienstanwendung. Sie finden diese im Azure-Portal.

    • Navigieren Sie beispielsweise zu Microsoft Entra ID, und wählen Sie Unternehmensanwendungen aus. Suchen Sie dann die Anwendung, und suchen Sie nach der Objekt-ID.
    • Sie können die Objekt-ID des Dienstprinzipals auch mithilfe des folgenden PowerShell-Skripts anhand ihres Anzeigenamens suchen:
    $serverServicePrincipalObjectId = (Get-MgServicePrincipal -Filter "DisplayName eq '$applicationName'").Id
    

    Hinweis

    Anzeigenamen für Anwendungen sind nicht eindeutig, daher müssen Sie überprüfen, ob Sie den Dienstprinzipal der richtigen Anwendung abrufen.

  5. Fügen Sie der im vorherigen Schritt erstellten Anwendung eine App-Rolle hinzu. Sie können dann die Rolle über das Azure-Portal oder mithilfe von Microsoft Graph erstellen.

    • Sie können beispielsweise eine App-Rolle hinzufügen, indem Sie die folgende Abfrage im Graph-Explorer ausführen:
    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. Weisen Sie der verwalteten Identität die App-Rolle zu. Sie benötigen die folgenden Informationen, um die App-Rolle zuzuweisen:

    • managedIdentityObjectId: die Objekt-ID des Dienstprinzipals der verwalteten Identität, die Sie im vorherigen Schritt ermittelt haben.
    • serverServicePrincipalObjectId: die Objekt-ID des Dienstprinzipals der Serveranwendung, die Sie in Schritt 4 ermittelt haben
    • appRoleId: die ID der App-Rolle, die von der Server-App verfügbar gemacht wird und die Sie in Schritt 5 generiert haben; im Beispiel lautet die App-Rollen-ID 00000000-0000-0000-0000-000000000000
    • Führen Sie den folgenden PowerShell-Befehl aus, um die Rollenzuweisung hinzuzufügen:
    New-MgServicePrincipalAppRoleAssignment `
        -ServicePrincipalId $serverServicePrincipalObjectId `
        -PrincipalId $managedIdentityObjectId `
        -ResourceId $serverServicePrincipalObjectId `
        -AppRoleId $appRoleId
    

Vollständiges Beispielskript

Dieses Beispielskript zeigt Ihnen, wie Sie die verwaltete Identität einer Azure-Web-App einer App-Rolle zuweisen.

# 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

Zuweisen des Zugriffs einer verwalteten Identität auf die App-Rolle einer anderen Anwendung mithilfe von CLI

  • Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter Schnellstart für Bash in Azure Cloud Shell.

  • Wenn Sie CLI-Referenzbefehle lieber lokal ausführen, installieren Sie die Azure CLI. Wenn Sie Windows oder macOS ausführen, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.

    • Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Informationen zu anderen Anmeldeoptionen finden Sie unter Anmelden mit der Azure CLI.

    • Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden von Erweiterungen mit der Azure CLI.

    • Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.

  1. Aktivieren Sie die verwaltete Identität für eine Azure-Ressource, zum Beispiel einen virtuellen Azure-Computer.

  2. Suchen Sie die Objekt-ID des Dienstprinzipals der verwalteten Identität.

    • Bei einer systemseitig zugewiesenen verwalteten Identität finden Sie die Objekt-ID im Azure-Portal auf der Seite Identität der Ressource.
    • Sie können auch das folgende Skript verwenden, um die Objekt-ID zu ermitteln. Sie benötigen die Ressourcen-ID der im vorherigen Schritt erstellten Ressource, die Sie im Azure-Portal auf der Seite Eigenschaften der Ressource finden.
    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"
    
    • Bei einer benutzerseitig zugewiesenen verwalteten Identität finden Sie die Objekt-ID der verwalteten Identität im Azure-Portal auf der Seite Übersicht der Ressource. Sie können auch das folgende Skript verwenden, um die Objekt-ID zu ermitteln. Sie benötigen die Ressourcen-ID der benutzerseitig zugewiesenen verwalteten Identität.
    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. Erstellen Sie eine neue Anwendungsregistrierung, um den Dienst zu repräsentieren, an den Ihre verwaltete Identität eine Anforderung senden soll.

    • Wenn die API oder der Dienst, die bzw. der die Gewährung der App-Rolle für die verwaltete Identität verfügbar macht, bereits über einen Dienstprinzipal in Ihrem Microsoft Entra -Mandanten verfügt, überspringen Sie diesen Schritt.
  4. Suchen Sie die Objekt-ID des Dienstprinzipals der Dienstanwendung. Sie finden diese im Azure-Portal.

    • Wechseln Sie zu Microsoft Entra ID und öffnen Sie die Seite Unternehmensanwendungen. Suchen Sie nach der Anwendung und dort nach der Objekt-ID.
    • Sie können die Objekt-ID des Dienstherrn auch mit dem folgenden Skript anhand seines Anzeigenamens ermitteln:
    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"
    

    Hinweis

    Anzeigenamen für Anwendungen sind nicht eindeutig, daher müssen Sie überprüfen, ob Sie den Dienstprinzipal der richtigen Anwendung abrufen.

    Alternativ können Sie die Objekt-ID auch über die eindeutige Anwendungs-ID für Ihre Anwendungsregistrierung finden:

    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. Fügen Sie der im vorherigen Schritt erstellten Anwendung eine App-Rolle hinzu. Sie können die Rolle im Azure-Portal oder mithilfe von Microsoft Graph erstellen. Sie können beispielsweise folgendermaßen eine Rolle hinzufügen:

    {
        "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. Weisen Sie der verwalteten Identität die App-Rolle zu. Sie benötigen die folgenden Informationen, um die App-Rolle zuzuweisen:

    • managedIdentityObjectId: die Objekt-ID des Dienstprinzipals der verwalteten Identität, die Sie in Schritt 2 ermittelt haben
    • serverServicePrincipalObjectId: die Objekt-ID des Dienstprinzipals der Serveranwendung, die Sie in Schritt 4 ermittelt haben
    • appRoleId: die ID der App-Rolle, die von der Server-App verfügbar gemacht wird und die Sie in Schritt 5 generiert haben; im Beispiel lautet die App-Rollen-ID 00000000-0000-0000-0000-000000000000
  7. Führen Sie das folgende Skript aus, um die Rollenzuweisung hinzuzufügen. Diese Funktion ist nicht direkt in der Azure CLI verfügbar und hier stattdessen ein REST-Befehl verwendet wird:

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

Nächste Schritte