Qual é a propriedade delegatedManagedIdentityResourceId?
No Azure, a propriedade delegatedManagedIdentityResourceId
é 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 publicador e o cliente existem em locatários separados.
Por que precisamos disso?
Quando um cliente implanta um aplicativo gerenciado do marketplace, o editor é responsável pelo gerenciamento de recursos dentro do MRG (grupo de recursos gerenciados). No entanto, quaisquer 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, pois a atribuição de função falhará se tentar localizar a identidade no locatário errado.
A propriedade delegatedManagedIdentityResourceId
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 ele 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 da atribuição de função ocorre no locatário do editor, as atribuições de função naturalmente procuram identidades dentro desse locatário.
Usando delegatedManagedIdentityResourceId
Especificando a ID do recurso correta:
- Para identidades atribuídas pelo sistema: use a ID do recurso que contém a identidade. Por exemplo, um aplicativo de funções ou aplicativo lógico.
- Para identidades atribuídas pelo usuário: use a ID do recurso da identidade propriamente dita.
Como aplicar delegatedManagedIdentityResourceId
Para configurar a atribuição de função corretamente, adicione a propriedade delegatedManagedIdentityResourceId
na seção de atribuição de função do modelo do ARM (Azure Resource Manager). 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 à identidade ausente
- Verifique se a ID de recurso correta é fornecida em
delegatedManagedIdentityResourceId
. - Verifique se a identidade gerenciada existe no locatário do cliente.
A atribuição de negação impede o acesso
- A atribuição de negação impede que os clientes acessem o MRG.
- Verifique se a identidade do editor que gerencia o MRG é referenciada corretamente no locatário do cliente.
Contexto de implantação configurado incorretamente
- As implantações de AMA com aplicativos gerenciados publicados e acesso de editor habilitado ocorrem no locatário do editor.
- Verifique se
delegatedManagedIdentityResourceId
está definido corretamente para fazer referência à identidade do locatário do cliente.
Solicitação PUT de atribuição de função com suporte apenas em um locatário cruzado
Uma solicitação PUT de atribuição de função com o delegatedManagedIdentityResourceId
só tem suporte em cenários entre locatários e não dá suporte a implantações no mesmo locatário. Para usá-lo no 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'))]"
}
}