Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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ą wymagać 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 SDK programu Microsoft Graph powerShell lub interfejsu wiersza polecenia platformy Azure.
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 w 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łącz tożsamość zarządzaną na zasobie platformy Azure, takim jak maszyna wirtualna 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źć na Portalu Azure 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 zarządzanej tożsamości przypisanej przez użytkownika, identyfikator obiektu tej tożsamości można znaleźć w 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, aby reprezentować usługę, do której Twoja tożsamość zarządzana ma wysyłać żądania.
- Jeśli interfejs API lub usługa, która udostępnia przypisanie roli aplikacji dla tożsamości zarządzanej, ma już jednostkę usługi w dzierżawie 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żesz to znaleźć przy użyciu Centrum administracyjnego firmy Microsoft Entra.
- Zaloguj się do centrum administracyjnego Microsoft Entra. W bloku nawigacji po lewej stronie wybierz pozycję Identity, a następnie Applications, a następnie wybierz pozycję 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 uzyskujesz właściwą jednostkę usługi dla 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": "00001111-aaaa-2222-bbbb-3333cccc4444", "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 usługi głównej tożsamości zarządzanej, 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 CLI
Użyj interfejsu powłoki Bash w usłudze Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Szybki start: Bash w 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.
Przy wyświetleniu monitu zainstaluj rozszerzenie Azure CLI przy pierwszym użyciu. 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łącz tożsamość zarządzaną w zasobie platformy Azure, takim jak maszyna wirtualna platformy Azure.
Znajdź identyfikator obiektu jednostki usługi tożsamości zarządzanej.
- W przypadku zarządzanej tożsamości przypisanej przez system, identyfikator obiektu można znaleźć na portalu Azure 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 tej tożsamości można znaleźć w portalu Azure 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, która będzie reprezentować usługę, do której wysyła żądanie twoja tożsamość zarządzana.
- Jeśli interfejs API lub usługa, która udostępnia przyznanie roli aplikacji dla tożsamości zarządzanej, ma już główną usługę w dzierżawie Microsoft Entra, pomiń ten krok.
Znajdź identyfikator obiektu głównego elementu usługi aplikacji. Możesz to znaleźć przy użyciu Centrum administracyjnego firmy Microsoft Entra.
- Zaloguj się do centrum administracyjnego Microsoft Entra. W bloku nawigacji po lewej stronie wybierz pozycję Identity, a następnie Applications, a następnie wybierz pozycję 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:
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 zweryfikować, czy uzyskano prawidłowy główny element 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": "00001111-aaaa-2222-bbbb-3333cccc4444", "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 usługi aplikacji serwera, który znalazłeś 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 funkcjonalność nie jest bezpośrednio dostępna w interfejsie linii poleceń Azure, więc zamiast tego używane jest tutaj 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.