Что такое делегированное свойствоManagedIdentityResourceId?

В Azure delegatedManagedIdentityResourceId свойство используется для правильного назначения ролей управляемым удостоверениям в разных клиентах. Это назначение полезно при работе с управляемыми приложениями, опубликованными в Azure Marketplace, где издатель и клиент существуют в отдельных клиентах.

Зачем нам это нужно?

При развертывании управляемого приложения из Marketplace издатель отвечает за управление ресурсами в управляемой группе ресурсов (MRG). Однако все назначения ролей, выполняемые в рамках шаблона развертывания, происходят в клиенте издателя. Эти назначения создают вызов при создании управляемого удостоверения в клиенте клиента, так как назначение ролей завершается ошибкой, если он пытается найти удостоверение в неправильном клиенте.

Свойство delegatedManagedIdentityResourceId устраняет эту проблему, явно указывая, где существует управляемое удостоверение, гарантируя, что процесс назначения ролей может правильно находить и назначать разрешения.

Принцип работы

Создание управляемого удостоверения

При развертывании управляемого приложения в клиенте клиента создается управляемое удостоверение.

Назначение ролей

Развертывание назначения ролей происходит в клиенте издателя, назначения ролей естественно ищут удостоверения в этом клиенте.

Использование делегатаManagedIdentityResourceId

Указав правильный идентификатор ресурса:

  • Для удостоверений, назначенных системой: используйте идентификатор ресурса ресурса, в котором хранится удостоверение. Например, приложение-функция или приложение логики.
  • Для удостоверений, назначенных пользователем: используйте идентификатор ресурса самого удостоверения.

Применение делегатаManagedIdentityResourceId

Чтобы правильно настроить назначение ролей, добавьте delegatedManagedIdentityResourceId свойство в раздел назначения ролей шаблона Azure Resource Manager (шаблон ARM). Пример:

{
  "type": "Microsoft.Authorization/roleAssignments",
  "apiVersion": "2022-04-01",
  "properties": {
    "roleDefinitionId": "<role-definition-id>",
    "principalId": "<principal-id>",
    "delegatedManagedIdentityResourceId": "<resource-id-of-identity>"
  }
}

Распространенные ошибки и устранение неполадок

Сбой назначения ролей из-за отсутствия удостоверения

  • Убедитесь, что указан delegatedManagedIdentityResourceIdправильный идентификатор ресурса.
  • Убедитесь, что управляемое удостоверение существует в клиенте клиента.

Запрет назначения запрещает доступ

  • Назначение запрета запрещает клиентам доступ к MRG.
  • Убедитесь, что удостоверение издателя, управляющего MRG, правильно ссылается в клиенте клиента.

Неправильный контекст развертывания

  • Развертывания AMA с опубликованными управляемыми приложениями и доступом издателя происходят в клиенте издателя.
  • Убедитесь delegatedManagedIdentityResourceId , что настроено правильное указание ссылки на удостоверение клиента.

Запрос PUT назначения ролей поддерживается только в межтенантном клиенте

Запрос PUT назначения ролей поддерживается delegatedManagedIdentityResourceId только в сценариях между клиентами и не поддерживает развертывания в одном клиенте. Чтобы использовать его в одном клиенте во время тестирования, добавьте параметр, чтобы включить свойство следующим образом:

{
  "comments": "Using cross-tenant delegatedManagedIdentityResourceId property",
  "type": "Microsoft.Authorization/roleAssignments",
  "apiVersion": "2021-04-01-preview",
  "name": "[guid(resourceGroup().id, variables('<identityName>'), variables('<roleDefinitionId>'))]",
  "dependsOn": [
    "[variables('<identityName>')]"
  ],
  "properties": {
    "roleDefinitionId": "[resourceId('Microsoft.Authorization/roleDefinitions',variables('<roleDefinitionId>'))]",
    "principalId": "[reference(variables('<identityName>')).principalId]",
    "principalType": "<PrincipalType>",
    "scope": "[resourceGroup().id]",
    "delegatedManagedIdentityResourceId": "[if(parameters('crossTenant'), resourceId('Microsoft.ManagedIdentity/userAssignedIdentities',variables('<identityName>')), json('null'))]"
  }
}

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