Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В 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'))]"
}
}