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:
- Użyj usługi Azure Cloud Shell, którą można otworzyć za pomocą przycisku Wypróbuj w prawym górnym rogu bloków kodu.
- Uruchamiaj skrypty lokalnie, instalując najnowszą wersję zestawu Microsoft Graph PowerShell SDK.
Włączanie tożsamości zarządzanej w zasobie platformy Azure, takim jak maszyna wirtualna platformy Azure.
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
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.
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.
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" } ] }
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 to00000000-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
Użyj środowiska powłoki Bash w usłudze Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Szybki start dotyczący powłoki Bash w usłudze Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj interfejs wiersza polecenia platformy Azure. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie interfejsu wiersza polecenia platformy Azure w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić interfejs wiersza polecenia platformy Azure w kontenerze platformy Docker.
Jeśli korzystasz z instalacji lokalnej, zaloguj się do interfejsu wiersza polecenia platformy Azure za pomocą polecenia az login. Aby ukończyć proces uwierzytelniania, wykonaj kroki wyświetlane w terminalu. Aby uzyskać inne opcje logowania, zobacz Logowanie się przy użyciu interfejsu wiersza polecenia platformy Azure.
Po wyświetleniu monitu zainstaluj rozszerzenie interfejsu wiersza polecenia platformy Azure podczas pierwszego użycia. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Korzystanie z rozszerzeń w interfejsie wiersza polecenia platformy Azure.
Uruchom polecenie az version, aby znaleźć zainstalowane wersje i biblioteki zależne. Aby uaktualnić do najnowszej wersji, uruchom polecenie az upgrade.
Włączanie tożsamości zarządzanej w zasobie platformy Azure, takim jak maszyny wirtualne platformy Azure.
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"
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.
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"
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" }
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 to00000000-0000-0000-0000-000000000000
.
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
- Omówienie tożsamości zarządzanej dla zasobów platformy Azure
- Aby włączyć tożsamość zarządzaną na maszynie wirtualnej platformy Azure, zobacz Konfigurowanie tożsamości zarządzanych dla zasobów platformy Azure na maszynie wirtualnej platformy Azure.