Przypisywanie dostępu tożsamości zarządzanej do roli aplikacji przy użyciu programu PowerShell

Tożsamości zarządzane dla zasobów platformy Azure zapewniają usługom platformy Azure tożsamość w identyfikatorze Entra firmy Microsoft. Działają one bez konieczności wprowadzania poświadczeń w kodzie. Usługi platformy Azure używają tej tożsamości do uwierzytelniania w usługach obsługujących uwierzytelnianie firmy Microsoft Entra. Role aplikacji zapewniają formę kontroli dostępu opartej na rolach i umożliwiają usłudze implementowanie reguł autoryzacji.

Uwaga

Tokeny odbierane przez aplikację są buforowane przez podstawową infrastrukturę, co oznacza, że wszelkie zmiany ról tożsamości zarządzanej mogą zająć dużo czasu. Aby uzyskać więcej informacji, zobacz Ograniczenie używania tożsamości zarządzanych do autoryzacji.

Z tego artykułu dowiesz się, jak przypisać tożsamość zarządzaną do roli aplikacji uwidocznionej przez inną aplikację przy użyciu zestawu MICROSOFT Graph PowerShell SDK.

Wymagania wstępne

  • Jeśli nie znasz tożsamości zarządzanych dla zasobów platformy Azure, zapoznaj się z sekcją Przegląd. Pamiętaj, aby zapoznać się z różnicą między tożsamością zarządzaną przypisaną przez system i przypisaną przez użytkownika.
  • Jeśli nie masz jeszcze konta platformy Azure, utwórz bezpłatne konto przed kontynuowaniem.
  • Aby uruchomić przykładowe skrypty, dostępne są dwie opcje:

Przypisywanie dostępu tożsamości zarządzanej do roli aplikacji innej aplikacji

  1. Włączanie tożsamości zarządzanej w zasobie platformy Azure, takim jak maszyna wirtualna platformy Azure.

  2. Znajdź identyfikator obiektu jednostki usługi tożsamości zarządzanej.

    W przypadku tożsamości zarządzanej przypisanej przez system identyfikator obiektu można znaleźć w witrynie Azure Portal na stronie Tożsamość zasobu. Możesz również użyć następującego skryptu programu PowerShell, aby znaleźć identyfikator obiektu. Potrzebny będzie identyfikator zasobu utworzonego w kroku 1, który jest dostępny w witrynie Azure Portal na stronie Właściwości zasobu.

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

    W przypadku tożsamości zarządzanej przypisanej przez użytkownika identyfikator obiektu tożsamości zarządzanej można znaleźć w witrynie Azure Portal na stronie Przegląd zasobu. Możesz również użyć następującego skryptu programu PowerShell, aby znaleźć identyfikator obiektu. Potrzebny będzie identyfikator zasobu tożsamości zarządzanej przypisanej przez użytkownika.

    $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. Utwórz nową rejestrację aplikacji, aby reprezentować usługę, do których będzie wysyłana tożsamość zarządzana. Jeśli interfejs API lub usługa, która uwidacznia przyznanie roli aplikacji tożsamości zarządzanej, ma już jednostkę usługi w dzierżawie firmy Microsoft Entra, pomiń ten krok. Jeśli na przykład chcesz udzielić tożsamości zarządzanej dostępu do interfejsu API programu Microsoft Graph, możesz pominąć ten krok.

  4. Znajdź identyfikator obiektu jednostki usługi aplikacji usługi. Można to znaleźć w witrynie Azure Portal. Przejdź do pozycji Microsoft Entra ID i otwórz stronę Aplikacje dla przedsiębiorstw, a następnie znajdź aplikację i poszukaj identyfikatora obiektu. Identyfikator obiektu jednostki usługi można również znaleźć według jego nazwy wyświetlanej przy użyciu następującego skryptu programu PowerShell:

    $serverServicePrincipalObjectId = (Get-MgServicePrincipal -Filter "DisplayName eq '$applicationName'").Id
    

    Uwaga

    Nazwy wyświetlane aplikacji nie są unikatowe, dlatego należy sprawdzić, czy uzyskasz prawidłową jednostkę usługi aplikacji.

  5. Dodaj rolę aplikacji do aplikacji utworzonej w kroku 3. Rolę można utworzyć przy użyciu witryny Azure Portal lub programu Microsoft Graph. Możesz na przykład dodać rolę aplikacji, uruchamiając następujące zapytanie w Eksploratorze programu Graph:

    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. Przypisz rolę aplikacji do tożsamości zarządzanej. Do przypisania roli aplikacji potrzebne będą następujące informacje:

    • managedIdentityObjectId: identyfikator obiektu jednostki usługi tożsamości zarządzanej, który został znaleziony w kroku 2.
    • serverServicePrincipalObjectId: identyfikator obiektu jednostki usługi aplikacji serwera, który został znaleziony w kroku 4.
    • appRoleId: identyfikator roli aplikacji uwidocznionej przez aplikację serwera wygenerowaną w kroku 5 — w przykładzie identyfikator roli aplikacji to 0566419e-bb95-4d9d-a4f8-ed9a0f147fa6.

    Wykonaj następujące polecenie programu PowerShell, aby dodać przypisanie roli:

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

Kompletny skrypt

Ten przykładowy skrypt przedstawia sposób przypisywania tożsamości zarządzanej aplikacji internetowej platformy Azure do roli aplikacji.

# 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

Następne kroki