Sdílet prostřednictvím


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

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:

  1. Povolte spravovanou identitu na prostředku Azure, jako je virtuální počítač Azure.

  2. 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
    
  3. 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.
  4. 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.

  5. 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"
            }
        ]
    }
    
  6. 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 je 00000000-0000-0000-0000-000000000000ID 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

  1. Povolte spravovanou identitu u prostředku Azure, jako jsou virtuální počítače Azure.

  2. 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"
    
  3. 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.
  4. 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"
    
  5. 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"
    }
    
  6. 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 je 00000000-0000-0000-0000-000000000000ID role aplikace .
  7. 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