Поделиться через


Назначение управляемой идентичности для доступа к роли приложения

Управляемые удостоверения для ресурсов Azure предоставляют службам Azure удостоверение в Microsoft Entra ID. Для них не нужно указывать учетные данные в коде. Службы Azure используют это удостоверение для проверки подлинности в службах, поддерживающих проверку подлинности Microsoft Entra. Роли приложений предоставляют форму управления доступом на основе ролей и позволяют службе реализовывать правила авторизации.

Примечание.

Токены, которые получает ваше приложение, кэшируются базовой инфраструктурой. Это означает, что любые изменения ролей управляемого удостоверения могут требовать значительное время на обработку. Дополнительные сведения см. в разделе Ограничение использования управляемых удостоверений для авторизации.

В этой статье вы узнаете, как назначить управляемое удостоверение роли приложения, предоставляемой другим приложением, с помощью пакета SDK Microsoft Graph PowerShell или Azure CLI.

Предварительные условия

Назначение доступа к управляемому удостоверению роли приложения другого приложения с помощью PowerShell

Выполнить примеры скриптов можно двумя приведенными ниже способами.

  • Используйте службу Azure Cloud Shell, которую можно открыть с помощью кнопки Попробовать в правом верхнем углу блоков кода.
  • Запустите скрипты локально, установив последнюю версию пакета SDK Microsoft Graph PowerShell.
  1. Включите управляемое удостоверение для ресурса Azure, например виртуальной машины Azure.

  2. Найдите идентификатор объекта служебного главного объекта управляемого удостоверения.

    Для управляемого удостоверения, назначенного системой, идентификатор объекта можно найти на странице Удостоверение ресурса в портале Azure. Для поиска идентификатора объекта можно также использовать указанный ниже скрипт PowerShell. Вам потребуется идентификатор ресурса, созданный на шаге 1, который доступен на портале Azure на странице Свойства ресурса.

    $resourceIdWithManagedIdentity = '/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.Compute/virtualMachines/{my virtual machine name}'
    (Get-AzResource -ResourceId $resourceIdWithManagedIdentity).Identity.PrincipalId
    

    Идентификатор объекта пользовательской управляемой идентичности можно найти на портале Azure на странице Обзор ресурса. Для поиска идентификатора объекта можно также использовать указанный ниже скрипт PowerShell. Вам потребуется идентификатор ресурса управляемого удостоверения, назначенного пользователем.

    $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. создайте новую регистрацию приложения, чтобы представлять службу, в которую ваш управляемый идентификатор должен отправить запрос.

    • Если API или служба, предоставляющая роль приложения управляемому удостоверению, уже имеет субъект-службу в клиенте Microsoft Entra, пропустите этот шаг. Например, если вы хотите предоставить управляемому удостоверению доступ к API Microsoft Graph.
  4. Найдите идентификатор объекта служебного элементa приложения службы. Это можно найти с помощью Центра администрирования Microsoft Entra.

    • Войдите в Центр администрирования Microsoft Entra. В колонке навигации слева выберите удостоверения, затем приложенияи корпоративные приложения. Затем найдите приложение и найдите идентификатор объекта.
    • Идентификатор объекта субъекта-службы также можно найти по его отображаемому имени с помощью следующего скрипта PowerShell:
    $serverServicePrincipalObjectId = (Get-MgServicePrincipal -Filter "DisplayName eq '$applicationName'").Id
    

    Примечание.

    Отображаемые имена приложений не являются уникальными, поэтому убедитесь, что вы подтвердили, что получили правильный основной объект службы приложения.

  5. Добавьте роль приложения в приложение, созданное на предыдущем шаге. Затем можно создать роль с помощью портал Azure или с помощью Microsoft Graph.

    • Например, можно добавить роль приложения, выполнив следующий запрос в обозревателе 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"
            }
        ]
    }
    
  6. Назначьте роль приложения управляемому удостоверению. Чтобы назначить роль приложения потребуются следующие сведения:

    • managedIdentityObjectId: идентификатор объекта служебной записи управляемого удостоверения, который вы нашли на предыдущем шаге.
    • serverServicePrincipalObjectId — идентификатор объекта сервисного принципала серверного приложения, который вы нашли на шаге 4.
    • appRoleId — идентификатор роли приложения, предоставляемый серверным приложением, созданным на шаге 5. В этом примере идентификатор роли приложения имеет значение 00000000-0000-0000-0000-000000000000.
    • Выполните следующую команду PowerShell, чтобы добавить назначение ролей:
    New-MgServicePrincipalAppRoleAssignment `
        -ServicePrincipalId $serverServicePrincipalObjectId `
        -PrincipalId $managedIdentityObjectId `
        -ResourceId $serverServicePrincipalObjectId `
        -AppRoleId $appRoleId
    

Полный пример скрипта

Сценарий в этом примере показывает, как назначить управляемую идентичность веб-приложению Azure для роли приложения.

# 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

Назначение доступа к управляемому удостоверению роли приложения другого приложения с помощью интерфейса командной строки

  • Используйте среду Bash в Azure Cloud Shell. Для получения дополнительной информации см. краткое руководство по Bash в Azure Cloud Shell.

  • Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.

    • Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.

    • Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.

    • Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.

  1. Включите управляемое удостоверение в ресурсе Azure, например виртуальные машины Azure.

  2. Найдите идентификатор объекта основного сервиса управляемого удостоверения.

    • Идентификатор объекта для системного управляемого удостоверения можно найти на портале Azure на странице Удостоверение ресурса.
    • Для поиска идентификатора объекта можно также использовать указанный ниже скрипт. Вам потребуется идентификатор ресурса, созданного на предыдущем шаге, который доступен в портал Azure на странице свойств ресурса.
    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"
    
    • Идентификатор объекта управляемого удостоверения, назначенного пользователем, можно найти на портале Azure на странице Обзор ресурса. Для поиска идентификатора объекта можно также использовать указанный ниже скрипт. Вам понадобится идентификатор ресурса управляемой удостоверенности, назначенной пользователем.
    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. создание новой регистрации приложения для представления службы, в которую отправляется управляемое удостоверение.

    • Если API или служба, предоставляющая роль приложения управляемому удостоверению, уже имеет субъект-службу в клиенте Microsoft Entra, пропустите этот шаг.
  4. Найдите идентификатор объекта основного объекта служебного приложения. Это можно найти с помощью Центра администрирования Microsoft Entra.

    • Войдите в Центр администрирования Microsoft Entra. В левой панели навигации выберите Идентификация, затем Приложения, и затем выберите Корпоративные приложения. Затем найдите приложение и найдите идентификатор объекта.
    • Идентификатор объекта субъекта-службы также можно найти по его отображаемому имени с помощью следующего скрипта:
    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"
    

    Примечание.

    Отображаемые имена приложений не являются уникальными, поэтому убедитесь, что вы получили правильный основной объект службы приложения.

    Или вы можете найти идентификатор объекта по уникальному идентификатору приложения для регистрации приложения:

    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. Добавьте роль приложения в приложение, созданное на предыдущем шаге. Вы можете создать роль с помощью портала Azure или Microsoft Graph. Например, можно добавить роль приложения следующим образом:

    {
        "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"
    }
    
  6. Назначьте роль приложения управляемому удостоверению. Чтобы назначить роль приложения потребуются следующие сведения:

    • managedIdentityObjectId — идентификатор объекта субъекта-службы управляемого удостоверения, определенный на шаге 2.
    • serverServicePrincipalObjectId — идентификатор объекта субъекта-службы серверного приложения, определенный на шаге 4.
    • appRoleId — идентификатор роли приложения, предоставляемый серверным приложением, созданным на шаге 5. В этом примере идентификатор роли приложения имеет значение 00000000-0000-0000-0000-000000000000.
  7. Выполните указанный ниже скрипт, чтобы добавить назначение ролей. Эта функция не предоставляется напрямую в Azure CLI, а команда 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\"}"
    

Следующие шаги