Zuweisen des Zugriffs einer verwalteten Identität auf eine Anwendungsrolle mithilfe von PowerShell

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, was bedeutet, dass alle Änderungen an den Rollen der verwalteten Identität viel Zeit in Anspruch nehmen können. Weitere Informationen finden Sie unter Einschränkung der Verwendung verwalteter Identitäten für die 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

  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 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. Sie können diesen Schritt beispielsweise dann überspringen, 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. 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 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 in Schritt 3 erstellten Anwendung eine App-Rolle hinzu. Sie können 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 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 0566419e-bb95-4d9d-a4f8-ed9a0f147fa6

    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 Skript

Dieses Beispielskript zeigt, 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

Nächste Schritte