O que é a propriedade delegatedManagedIdentityResourceId?
No Azure, a delegatedManagedIdentityResourceId
propriedade é usada para atribuir corretamente funções a identidades gerenciadas em diferentes locatários. Essa atribuição é útil ao lidar com aplicativos gerenciados publicados no Azure Marketplace em que o editor e o cliente existem em locatários separados.
Por que razão precisamos dela?
Quando um cliente implanta um aplicativo gerenciado do mercado, o editor é responsável pelo gerenciamento de recursos dentro do grupo de recursos gerenciados (MRG). No entanto, todas as atribuições de função executadas como parte do modelo de implantação ocorrem no locatário do editor. Essas atribuições criam um desafio quando a identidade gerenciada é criada no locatário do cliente, porque a atribuição de função falha se tentar localizar a identidade no locatário errado.
A delegatedManagedIdentityResourceId
propriedade resolve esse problema especificando explicitamente onde a identidade gerenciada existe, garantindo que o processo de atribuição de função possa localizar e atribuir permissões corretamente.
Como funciona
Criação de identidade gerenciada
Quando você implanta um aplicativo gerenciado, a identidade gerenciada é criada no locatário do cliente.
Atribuição de função
A implantação de atribuição de função ocorre sob o locatário do editor, as atribuições de função naturalmente procuram identidades dentro desse locatário.
Usando delegatedManagedIdentityResourceId
Especificando o ID de recurso correto:
- Para Identidades Atribuídas ao Sistema: Use a ID do recurso que contém a identidade. Por exemplo, um aplicativo de função ou um aplicativo lógico.
- Para Identidades Atribuídas ao Usuário: use a ID do recurso da própria identidade.
Como aplicar delegatedManagedIdentityResourceId
Para configurar a atribuição de função corretamente, adicione a delegatedManagedIdentityResourceId
propriedade na seção de atribuição de função do seu modelo do Azure Resource Manager (modelo ARM). Exemplo:
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"properties": {
"roleDefinitionId": "<role-definition-id>",
"principalId": "<principal-id>",
"delegatedManagedIdentityResourceId": "<resource-id-of-identity>"
}
}
Erros comuns e solução de problemas
Falha na atribuição de função devido à falta de identidade
- Certifique-se de que o ID de recurso correto é fornecido em
delegatedManagedIdentityResourceId
. - Verifique se a identidade gerenciada existe no locatário do cliente.
Negar atribuição impede o acesso
- A atribuição de negação impede o acesso dos clientes ao MRG.
- Verifique se a identidade do editor que gerencia o MRG está corretamente referenciada no locatário do cliente.
Contexto de implantação mal configurado
- As implantações AMA com aplicativos gerenciados publicados e acesso de editor habilitado ocorrem no locatário do editor.
- Verifique se
delegatedManagedIdentityResourceId
está configurado corretamente para fazer referência à identidade do locatário do cliente.
Solicitação PUT de atribuição de função suportada apenas em um locatário cruzado
Uma solicitação PUT de atribuição de função com o só é suportada delegatedManagedIdentityResourceId
em cenários entre locatários e não oferece suporte a implantações dentro do mesmo locatário. Para usá-lo dentro do mesmo locatário durante o teste, adicione um parâmetro para incluir a propriedade da seguinte maneira:
{
"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'))]"
}
}