Udostępnij za pośrednictwem


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

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ę. Oznacza to, że wszelkie zmiany ról tożsamości zarządzanej mogą zająć dużo czasu na przetworzenie. Aby uzyskać więcej informacji, zobacz Ograniczenie używania tożsamości zarządzanych do autoryzacji.

W tym artykule 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, zobacz Omówienie tożsamości zarządzanej dla zasobów platformy Azure.
  • Zapoznaj 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.

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

Aby uruchomić przykładowe skrypty, dostępne są dwie opcje:

  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 reprezentującą usługę, do której ma zostać wysł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. Na przykład w przypadku udzielenia tożsamości zarządzanej dostępu do interfejsu API programu Microsoft Graph.
  4. Znajdź identyfikator obiektu jednostki usługi aplikacji usługi. Można to znaleźć w witrynie Azure Portal.

    • Na przykład przejdź do pozycji Microsoft Entra ID i otwórz stronę Aplikacje dla przedsiębiorstw. 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 poprzednim kroku. Następnie możesz utworzyć rolę 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 poprzednim kroku.
    • 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 00000000-0000-0000-0000-000000000000.
    • Wykonaj następujące polecenie programu PowerShell, aby dodać przypisanie roli:
    New-MgServicePrincipalAppRoleAssignment `
        -ServicePrincipalId $serverServicePrincipalObjectId `
        -PrincipalId $managedIdentityObjectId `
        -ResourceId $serverServicePrincipalObjectId `
        -AppRoleId $appRoleId
    

Kompletny przykładowy 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

Przypisywanie dostępu tożsamości zarządzanej do roli aplikacji innej aplikacji przy użyciu interfejsu wiersza polecenia

  1. Włączanie tożsamości zarządzanej w zasobie platformy Azure, takim jak maszyny wirtualne 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, aby znaleźć identyfikator obiektu. Potrzebny będzie identyfikator zasobu utworzonego w poprzednim kroku, 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}"
    
    oidForMI=$(az resource show --ids $resourceIdWithManagedIdentity --query "identity.principalId" -o tsv | tr -d '[:space:]')
    echo "object id for managed identity is: $oidForMI"
    
    • 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, 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}"
    
    oidForMI=$(az resource show --id $userManagedIdentityResourceId --query "properties.principalId" -o tsv | tr -d '[:space:]')
    echo "object id for managed identity is: $oidForMI"
    
  3. Utwórz nową rejestrację aplikacji, aby reprezentować usługę, do którego wysyłana jest 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.
  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:
    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"
    

    Uwaga

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

    Możesz też znaleźć identyfikator obiektu według unikatowego identyfikatora aplikacji na potrzeby rejestracji aplikacji:

    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. Dodaj rolę aplikacji do aplikacji utworzonej w poprzednim kroku. Rolę można utworzyć przy użyciu witryny Azure Portal lub programu Microsoft Graph. Możesz na przykład dodać rolę aplikacji w następujący sposób:

    {
        "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. 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 00000000-0000-0000-0000-000000000000.
  7. Wykonaj następujący skrypt, aby dodać przypisanie roli. Ta funkcja nie jest bezpośrednio widoczna w interfejsie wiersza polecenia platformy Azure i że w tym miejscu jest używane polecenie REST:

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

Następne kroki