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


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

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

Замечание

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

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

Предпосылки

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

  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. Найдите идентификатор объекта служебного элементa приложения службы. Это можно найти с помощью Центра администрирования Microsoft Entra.

    1. Войдите в Центр администрирования Microsoft Entra.

    2. В левом меню навигации выберите Entra ID>Приложения для предприятий. Затем найдите приложение и найдите идентификатор объекта.

    3. Идентификатор объекта субъекта-службы также можно найти по его отображаемому имени с помощью следующего скрипта:

      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"
      

      Замечание

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

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

      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\"}"
    

Дальнейшие шаги