Přiřazení přístupu ke spravované identitě k roli aplikace
Spravované identity pro prostředky Azure poskytují službám Azure identitu v Microsoft Entra ID. Fungují bez nutnosti přihlašovacích údajů v kódu. Služby Azure tuto identitu používají k ověřování ve službách, které podporují ověřování Microsoft Entra. Role aplikací poskytují formu řízení přístupu na základě role a umožňují službě implementovat autorizační pravidla.
Poznámka:
Tokeny, které vaše aplikace obdrží, se ukládají do mezipaměti základní infrastrukturou. To znamená, že zpracování jakýchkoli změn rolí spravované identity může trvat dlouho. Další informace najdete v tématu Omezení používání spravovaných identit pro autorizaci.
V tomto článku se dozvíte, jak přiřadit spravovanou identitu k roli aplikace vystavené jinou aplikací pomocí sady Microsoft Graph PowerShell SDK.
Požadavky
- Pokud neznáte spravované identity pro prostředky Azure, přečtěte si přehled spravované identity pro prostředky Azure.
- Zkontrolujte rozdíl mezi spravovanou identitou přiřazenou systémem a přiřazenou uživatelem.
- Pokud ještě nemáte účet Azure, zaregistrujte si bezplatný účet před tím, než budete pokračovat.
Přiřazení přístupu spravované identity k roli aplikace jiné aplikace pomocí PowerShellu
Pokud chcete spustit ukázkové skripty, máte dvě možnosti:
- Použijte Azure Cloud Shell, který můžete otevřít pomocí tlačítka Vyzkoušet v pravém horním rohu bloků kódu.
- Spusťte skripty místně instalací nejnovější verze sady Microsoft Graph PowerShell SDK.
Povolte spravovanou identitu na prostředku Azure, jako je virtuální počítač Azure.
Vyhledejte ID objektu instančního objektu spravované identity.
U spravované identity přiřazené systémem najdete ID objektu na webu Azure Portal na stránce Identita prostředku. K vyhledání ID objektu můžete použít také následující skript PowerShellu. Budete potřebovat ID prostředku prostředku, který jste vytvořili v kroku 1, který je k dispozici na webu Azure Portal na stránce Vlastnosti prostředku.
$resourceIdWithManagedIdentity = '/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.Compute/virtualMachines/{my virtual machine name}' (Get-AzResource -ResourceId $resourceIdWithManagedIdentity).Identity.PrincipalId
U spravované identity přiřazené uživatelem najdete ID objektu spravované identity na webu Azure Portal na stránce Přehled prostředku. K vyhledání ID objektu můžete použít také následující skript PowerShellu. Budete potřebovat ID prostředku spravované identity přiřazené uživatelem.
$userManagedIdentityResourceId = '/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{my managed identity name}' (Get-AzResource -ResourceId $userManagedIdentityResourceId).Properties.PrincipalId
Vytvořte novou registraci aplikace, která bude představovat službu, na kterou chcete, aby spravovaná identita odeslala žádost.
- Pokud rozhraní API nebo služba, které zpřístupňuje udělení role aplikace spravované identitě, už má ve vašem tenantovi Microsoft Entra instanční objekt, přeskočte tento krok. Například v případě, že chcete udělit spravované identitě přístup k rozhraní Microsoft Graph API.
Vyhledejte ID objektu instančního objektu aplikace služby. Najdete ho na webu Azure Portal.
- Přejděte například na Microsoft Entra ID a otevřete stránku Podnikové aplikace . Pak vyhledejte aplikaci a vyhledejte ID objektu.
- ID objektu instančního objektu můžete najít také podle jeho zobrazovaného názvu pomocí následujícího skriptu PowerShellu:
$serverServicePrincipalObjectId = (Get-MgServicePrincipal -Filter "DisplayName eq '$applicationName'").Id
Poznámka:
Zobrazované názvy aplikací nejsou jedinečné, proto byste měli ověřit, že získáte správný instanční objekt aplikace.
Přidejte do aplikace, kterou jste vytvořili v předchozím kroku, roli aplikace. Roli pak můžete vytvořit pomocí webu Azure Portal nebo pomocí Microsoft Graphu.
- Například můžete přidat roli aplikace spuštěním následujícího dotazu v Průzkumníku Graphu:
PATCH /applications/{id}/ { "appRoles": [ { "allowedMemberTypes": [ "User", "Application" ], "description": "Read reports", "id": "1e250995-3081-451e-866c-0f6efef9c638", "displayName": "Report reader", "isEnabled": true, "value": "report.read" } ] }
Přiřaďte roli aplikace spravované identitě. K přiřazení role aplikace budete potřebovat následující informace:
managedIdentityObjectId
: ID objektu instančního objektu spravované identity, které jste našli v předchozím kroku.serverServicePrincipalObjectId
: ID objektu instančního objektu serverové aplikace, které jste našli v kroku 4.appRoleId
: ID role aplikace vystavené serverovou aplikací, kterou jste vygenerovali v kroku 5 – v příkladu je00000000-0000-0000-0000-000000000000
ID role aplikace .
- Spuštěním následujícího příkazu PowerShellu přidejte přiřazení role:
New-MgServicePrincipalAppRoleAssignment ` -ServicePrincipalId $serverServicePrincipalObjectId ` -PrincipalId $managedIdentityObjectId ` -ResourceId $serverServicePrincipalObjectId ` -AppRoleId $appRoleId
Kompletní ukázkový skript
Tento ukázkový skript ukazuje, jak přiřadit spravovanou identitu webové aplikace Azure k roli aplikace.
# 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
Přiřazení přístupu spravované identity k roli aplikace jiné aplikace pomocí rozhraní příkazového řádku
Použijte prostředí Bash v Azure Cloud Shellu. Další informace najdete v tématu Rychlý start pro Bash v Azure Cloud Shellu.
Pokud dáváte přednost místnímu spouštění referenčních příkazů rozhraní příkazového řádku, nainstalujte Azure CLI. Pokud používáte Windows nebo macOS, zvažte spuštění Azure CLI v kontejneru Docker. Další informace najdete v tématu Jak spustit Azure CLI v kontejneru Dockeru.
Pokud používáte místní instalaci, přihlaste se k Azure CLI pomocí příkazu az login. Pokud chcete dokončit proces ověřování, postupujte podle kroků zobrazených na terminálu. Další možnosti přihlášení najdete v tématu Přihlášení pomocí Azure CLI.
Po zobrazení výzvy nainstalujte rozšíření Azure CLI při prvním použití. Další informace o rozšířeních najdete v tématu Využití rozšíření v Azure CLI.
Spuštěním příkazu az version zjistěte verzi a závislé knihovny, které jsou nainstalované. Pokud chcete upgradovat na nejnovější verzi, spusťte az upgrade.
Povolte spravovanou identitu u prostředku Azure, jako jsou virtuální počítače Azure.
Vyhledejte ID objektu instančního objektu spravované identity.
- U spravované identity přiřazené systémem najdete ID objektu na webu Azure Portal na stránce Identita prostředku.
- Id objektu můžete najít také pomocí následujícího skriptu. Budete potřebovat ID prostředku prostředku, který jste vytvořili v předchozím kroku, který je k dispozici na webu Azure Portal na stránce Vlastnosti prostředku.
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"
- U spravované identity přiřazené uživatelem najdete ID objektu spravované identity na webu Azure Portal na stránce Přehled prostředku. Id objektu můžete najít také pomocí následujícího skriptu. Budete potřebovat ID prostředku spravované identity přiřazené uživatelem.
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"
Vytvořte novou registraci aplikace, která představuje službu, na kterou vaše spravovaná identita odešle požadavek.
- Pokud rozhraní API nebo služba, které zpřístupňuje udělení role aplikace spravované identitě, už má ve vašem tenantovi Microsoft Entra instanční objekt, přeskočte tento krok.
Vyhledejte ID objektu instančního objektu aplikace služby. Najdete ho na webu Azure Portal.
- Přejděte na Microsoft Entra ID a otevřete stránku Podnikové aplikace a vyhledejte aplikaci a vyhledejte ID objektu.
- ID objektu instančního objektu můžete najít také podle jeho zobrazovaného názvu pomocí následujícího skriptu:
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"
Poznámka:
Zobrazované názvy aplikací nejsou jedinečné, proto byste měli ověřit, že získáte správný instanční objekt aplikace.
Nebo můžete ID objektu najít podle jedinečného ID aplikace pro vaši registraci aplikace:
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"
Přidejte do aplikace, kterou jste vytvořili v předchozím kroku, roli aplikace. Roli můžete vytvořit pomocí webu Azure Portal nebo pomocí Microsoft Graphu. Můžete například přidat roli aplikace takto:
{ "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" }
Přiřaďte roli aplikace spravované identitě. K přiřazení role aplikace budete potřebovat následující informace:
managedIdentityObjectId
: ID objektu instančního objektu spravované identity, které jste našli v kroku 2.serverServicePrincipalObjectId
: ID objektu instančního objektu serverové aplikace, které jste našli v kroku 4.appRoleId
: ID role aplikace vystavené serverovou aplikací, kterou jste vygenerovali v kroku 5 – v příkladu je00000000-0000-0000-0000-000000000000
ID role aplikace .
Spuštěním následujícího skriptu přidejte přiřazení role. Tato funkce není přímo zpřístupněná v Azure CLI a že se tady používá příkaz 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\"}"
Další kroky
- Přehled spravované identity pro prostředky Azure
- Pokud chcete povolit spravovanou identitu na virtuálním počítači Azure, přečtěte si téma Konfigurace spravovaných identit pro prostředky Azure na virtuálním počítači Azure.