Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este artigo descreve algumas soluções comuns quando você excede os limites no controle de acesso baseado em função do Azure (Azure RBAC).
Prerequisites
- Função de leitor para executar consultas do Azure Resource Graph.
- Função de Administrador de Controle de Acesso Baseado em Função para adicionar ou remover atribuições de função.
- Função de Administrador de Acesso de Usuário para adicionar atribuições de função, remover atribuições de função ou excluir funções personalizadas.
- Função de Administrador de Grupos ou Administrador de Usuários para criar grupos.
Note
As consultas usadas neste artigo retornam apenas atribuições de função ou funções personalizadas que você tem permissões para ler. Por exemplo, se você tiver permissões apenas para ler atribuições de função no escopo do grupo de recursos, as atribuições de função no escopo da assinatura não serão retornadas.
Sintoma - Não é possível criar mais atribuições de função
Quando você tenta atribuir uma função, você recebe a seguinte mensagem de erro:
No more role assignments can be created (code: RoleAssignmentLimitExceeded)
Cause
O Azure suporta até 4000 atribuições de função por subscrição. Esse limite inclui atribuições de função nos escopos de assinatura, grupo de recursos e recursos, mas não no escopo do grupo de gerenciamento. As atribuições de funções elegíveis e as atribuições de função agendadas no futuro não contam para este limite. Recomenda-se tentar reduzir as atribuições de função na subscrição.
Note
O limite de 4000 atribuições de função por assinatura é fixo e não pode ser aumentado.
Para obter o número de atribuições de função, você pode exibir o gráfico na página Controle de acesso (IAM) no portal do Azure. Você também pode usar os seguintes comandos do Azure PowerShell:
$scope = "/subscriptions/<subscriptionId>"
$ras = Get-AzRoleAssignment -Scope $scope | Where-Object {$_.scope.StartsWith($scope)}
$ras.Count
Solução 1 - Substitua atribuições de função baseadas em entidade por atribuições de função baseadas em grupo
Para reduzir o número de atribuições de função na assinatura, adicione entidades (usuários, entidades de serviço e identidades gerenciadas) aos grupos e atribua funções aos grupos. Siga estes passos para identificar onde várias atribuições de função para principais podem ser substituídas por uma única atribuição de função para um grupo.
Entre no portal do Azure e abra o Azure Resource Graph Explorer.
Selecione Escopo e defina o escopo da consulta.
Normalmente, você define o escopo como Diretório para consultar todo o locatário, mas pode restringir o escopo a assinaturas específicas.
Selecione Definir escopo de autorização e defina o escopo de autorização como At, acima e abaixo para consultar todos os recursos no escopo especificado.
Execute a consulta a seguir para obter as atribuições de função com a mesma função e no mesmo escopo, mas para entidades diferentes.
Esta consulta verifica atribuições de função ativas e não considera atribuições de função qualificadas no Microsoft Entra Privileged Identity Management. Para listar atribuições de função qualificadas, você pode usar o centro de administração do Microsoft Entra, o PowerShell ou a API REST. Para mais informações, consulte Get-AzRoleEligibilityScheduleInstance ou Instâncias do Agendamento de Elegibilidade de Função - Lista por Escopo.
Se você estiver usando condições de atribuição de função ou delegando o gerenciamento de atribuição de função com condições, deverá usar a consulta Condições. Caso contrário, use a consulta padrão.
authorizationresources | where type =~ "microsoft.authorization/roleassignments" | where id startswith "/subscriptions" | extend RoleId = tolower(tostring(properties.roleDefinitionId)) | join kind = leftouter ( authorizationresources | where type =~ "microsoft.authorization/roledefinitions" | extend RoleDefinitionName = tostring(properties.roleName) | extend RoleId = tolower(id) | project RoleDefinitionName, RoleId ) on $left.RoleId == $right.RoleId | extend principalId = tostring(properties.principalId) | extend principal_to_ra = pack(principalId, id) | summarize count_ = count(), AllPrincipals = make_set(principal_to_ra) by RoleDefinitionId = RoleId, Scope = tolower(properties.scope), RoleDefinitionName | where count_ > 1 | order by count_ descSegue-se um exemplo dos resultados. A coluna count_ é o número de entidades a quem foi atribuída a mesma função e ao mesmo âmbito. A contagem é ordenada por ordem decrescente.
Identifique uma linha na qual você deseja substituir as várias atribuições de função por uma única atribuição de função para um grupo.
Na linha, selecione Ver detalhes para abrir o painel Detalhes .
Column Description RoleDefinitionId ID da função atribuída no momento. Scope Escopo para a atribuição de função, que será uma assinatura, grupo de recursos ou recurso. RoleDefinitionName Nome da função atribuída no momento. count_ Número de entidades a quem foi atribuída a mesma função e no mesmo âmbito. AllPrincipals Lista de IDs principais atribuídos à mesma função e no mesmo escopo. Use RoleDefinitionId, RoleDefinitionName e Scope para obter a função e o escopo.
Use AllPrincipals para obter a lista dos IDs principais com a mesma atribuição de função.
Crie um grupo do Microsoft Entra. Para obter mais informações, consulte Gerenciar grupos e associação a grupos do Microsoft Entra.
Adicione os principais de AllPrincipals ao grupo.
Para obter informações sobre como adicionar entidades em massa, consulte Adicionar membros do grupo em massa no Microsoft Entra ID.
Atribua a função ao grupo criado no mesmo escopo. Para obter mais informações, consulte Atribuir funções do Azure usando o portal do Azure.
Agora você pode localizar e remover as atribuições de função baseadas em principal.
Obtenha os nomes principais das IDs principais.
- Para usar o portal do Azure, consulte Adicionar ou atualizar as informações e configurações de perfil de um usuário.
- Para usar o PowerShell, consulte Get-MgUser.
- Para usar o Azure, CLI, consulte az ad user show.
Abra a página Controle de acesso (IAM) na mesma abrangência que as atribuições de função.
Selecione o separador Atribuição de funções.
Para filtrar as atribuições de função, selecione o filtro Função e, em seguida, selecione o nome da função.
Identifique as atribuições de funções baseadas em entidade principal.
Você também deve ver sua atribuição de função baseada em grupo.
Selecione e remova as atribuições de função baseadas em principal. Para obter mais informações, veja Remover atribuições de funções do Azure.
Solução 2 - Remover atribuições de função redundantes
Para reduzir o número de atribuições de função na assinatura, remova as atribuições de função redundantes. Siga estas etapas para identificar onde as atribuições de função redundantes em um escopo inferior podem ser potencialmente removidas, uma vez que uma atribuição de função em um escopo mais alto já concede acesso.
Entre no portal do Azure e abra o Azure Resource Graph Explorer.
Selecione Escopo e defina o escopo da consulta.
Normalmente, você define o escopo como Diretório para consultar todo o locatário, mas pode restringir o escopo a assinaturas específicas.
Selecione Definir escopo de autorização e defina o escopo de autorização como At, acima e abaixo para consultar todos os recursos no escopo especificado.
Execute a consulta seguinte para obter as atribuições de função com a mesma função e o mesmo principal, mas em escopos diferentes.
Esta consulta verifica atribuições de função ativas e não considera atribuições de função qualificadas no Microsoft Entra Privileged Identity Management. Para listar atribuições de função qualificadas, você pode usar o centro de administração do Microsoft Entra, o PowerShell ou a API REST. Para mais informações, consulte Get-AzRoleEligibilityScheduleInstance ou Instâncias do Agendamento de Elegibilidade de Função - Lista por Escopo.
Se você estiver usando condições de atribuição de função ou delegando o gerenciamento de atribuição de função com condições, deverá usar a consulta Condições. Caso contrário, use a consulta padrão.
authorizationresources | where type =~ "microsoft.authorization/roleassignments" | where id startswith "/subscriptions" | extend RoleDefinitionId = tolower(tostring(properties.roleDefinitionId)) | extend PrincipalId = tolower(properties.principalId) | extend RoleDefinitionId_PrincipalId = strcat(RoleDefinitionId, "_", PrincipalId) | join kind = leftouter ( authorizationresources | where type =~ "microsoft.authorization/roledefinitions" | extend RoleDefinitionName = tostring(properties.roleName) | extend rdId = tolower(id) | project RoleDefinitionName, rdId ) on $left.RoleDefinitionId == $right.rdId | summarize count_ = count(), Scopes = make_set(tolower(properties.scope)) by RoleDefinitionId_PrincipalId,RoleDefinitionName | project RoleDefinitionId = split(RoleDefinitionId_PrincipalId, "_", 0)[0], RoleDefinitionName, PrincipalId = split(RoleDefinitionId_PrincipalId, "_", 1)[0], count_, Scopes | where count_ > 1 | order by count_ descSegue-se um exemplo dos resultados. A coluna count_ representa o número de âmbitos diferentes para atribuições de função que têm a mesma função e o mesmo principal. A contagem é ordenada por ordem decrescente.
Column Description RoleDefinitionId ID da função atribuída no momento. RoleDefinitionName Nome da função atribuída no momento. PrincipalId ID do principal atribuído à função. count_ Número de âmbitos diferentes para atribuições de função com a mesma função e o mesmo principal. Scopes Escopos para atribuições de função com a mesma função e o mesmo principal. Identifique uma linha onde você deseja remover atribuições de função redundantes.
Numa linha, selecione Ver detalhes para abrir o painel Detalhes .
Use RoleDefinitionId, RoleDefinitionName e PrincipalId para obter a função e a ID principal.
Use Escopos para obter a lista dos escopos para a mesma função e o mesmo principal.
Determine qual escopo é necessário para a atribuição de função. As outras atribuições de função podem ser removidas.
Você deve seguir as práticas recomendadas de menor privilégio ao determinar quais atribuições de função podem ser removidas. A atribuição de função no escopo mais alto pode estar concedendo mais acesso ao principal do que o necessário. Nesse caso, você deve remover a atribuição de função com o escopo mais alto. Por exemplo, um utilizador pode não precisar de uma atribuição de função de Colaborador de Máquina Virtual no âmbito de subscrição quando uma atribuição de função de Colaborador de Máquina Virtual num âmbito inferior de grupo de recursos concede o acesso necessário.
Recolha o nome principal a partir do identificador principal.
- Para usar o portal do Azure, consulte Adicionar ou atualizar as informações e configurações de perfil de um usuário.
- Para usar o PowerShell, consulte Get-MgUser.
- Para usar o Azure, CLI, consulte az ad user show.
Abra a página Controle de acesso (IAM) no escopo de uma atribuição de função que você deseja remover.
Selecione o separador Atribuição de funções.
Para filtrar as atribuições de função, selecione o filtro Função e, em seguida, selecione o nome da função.
Encontre o principal.
Selecione e remova a atribuição de função. Para obter mais informações, veja Remover atribuições de funções do Azure.
Solução 3 - Substitua várias atribuições de função internas por uma atribuição de função personalizada
Para reduzir o número de atribuições de função na assinatura, substitua várias atribuições de função internas por uma única atribuição de função personalizada. Siga estas etapas para identificar onde várias atribuições de função internas podem ser substituídas.
Entre no portal do Azure e abra o Azure Resource Graph Explorer.
Selecione Escopo e defina o escopo da consulta.
Normalmente, você define o escopo como Diretório para consultar todo o locatário, mas pode restringir o escopo a assinaturas específicas.
Execute a consulta a seguir para obter atribuições de função com a mesma entidade principal e o mesmo escopo, mas com funções internas diferentes.
Esta consulta verifica atribuições de função ativas e não considera atribuições de função qualificadas no Microsoft Entra Privileged Identity Management. Para listar atribuições de função qualificadas, você pode usar o centro de administração do Microsoft Entra, o PowerShell ou a API REST. Para mais informações, consulte Get-AzRoleEligibilityScheduleInstance ou Instâncias do Agendamento de Elegibilidade de Função - Lista por Escopo.
Se você estiver usando condições de atribuição de função ou delegando o gerenciamento de atribuição de função com condições, deverá usar a consulta Condições. Caso contrário, use a consulta padrão.
authorizationresources | where type =~ "microsoft.authorization/roleassignments" | where id startswith "/subscriptions" | extend PrincipalId = tostring(properties.principalId) | extend Scope = tolower(properties.scope) | extend RoleDefinitionId = tolower(tostring(properties.roleDefinitionId)) | join kind = leftouter ( authorizationresources | where type =~ "microsoft.authorization/roledefinitions" | extend RoleName = tostring(properties.roleName) | extend RoleId = tolower(id) | extend RoleType = tostring(properties.type) | where RoleType == "BuiltInRole" | extend RoleId_RoleName = pack(RoleId, RoleName) ) on $left.RoleDefinitionId == $right.RoleId | summarize count_ = count(), AllRD = make_set(RoleId_RoleName) by PrincipalId, Scope | where count_ > 1 | order by count_ descSegue-se um exemplo dos resultados. A coluna count_ é o número de diferentes atribuições de função internas com o mesmo principal e o mesmo escopo. A contagem é ordenada por ordem decrescente.
Column Description PrincipalId ID do principal atribuído às funções integradas. Scope Escopo para atribuições de funções predefinidas. count_ Número de atribuições de função internas com o mesmo principal e mesmo escopo. AllRD ID e nome das funções predefinidas. Numa linha, selecione Ver detalhes para abrir o painel Detalhes .
Use o AllRD para ver as funções internas que podem ser combinadas numa função personalizada.
Liste as ações e ações de dados para as funções internas. Para obter mais informações, consulte Listar definições de função do Azure ou funções internas do Azure.
Crie uma função personalizada que inclua todas as ações e ações de dados como as funções internas. Para facilitar a criação da função personalizada, você pode começar clonando uma das funções internas. Para obter mais informações, consulte Criar ou atualizar funções personalizadas do Azure usando o portal do Azure.
Recolha o nome principal a partir do identificador principal.
- Para usar o portal do Azure, consulte Adicionar ou atualizar as informações e configurações de perfil de um usuário.
- Para usar o PowerShell, consulte Get-MgUser.
- Para usar o Azure, CLI, consulte az ad user show.
Abra a página Controle de acesso (IAM) na mesma abrangência que as atribuições de função.
Atribua a nova função personalizada à entidade. Para obter mais informações, consulte Atribuir funções do Azure usando o portal do Azure.
Agora você pode remover as atribuições de função incorporadas.
Na página Controle de acesso (IAM) no mesmo escopo, selecione a guia Atribuições de função .
Encontre as atribuições de funções principais e predefinidas.
Remova as atribuições de função internas do principal. Para obter mais informações, veja Remover atribuições de funções do Azure.
Solução 4 - Tornar as atribuições de função elegíveis
Para reduzir o número de atribuições de função na assinatura e caso tenha o Microsoft Entra ID P2, defina as atribuições de função como elegíveis no Microsoft Entra Privileged Identity Management em vez de as atribuir permanentemente.
Solução 5 - Adicionar uma subscrição adicional
Adicione uma assinatura adicional.
Sintoma - Não é possível criar mais atribuições de função no escopo do grupo de gerenciamento
Não é possível atribuir uma função no escopo do grupo de gerenciamento.
Cause
O Azure suporta até 500 atribuições de função por grupo de gestão. Esse limite é diferente do limite de atribuições de função por assinatura.
Note
O limite de 500 atribuições de funções por grupo de gerenciamento é fixo e não pode ser aumentado.
Solution
Tente reduzir o número de atribuições de função no grupo de gerenciamento. Para obter opções possíveis, consulte Sintoma - Não é possível criar mais atribuições de função. Para que as consultas recuperem recursos no nível do grupo de gerenciamento, você precisará fazer a seguinte alteração nas consultas:
Replace
| where id startswith "/subscriptions"
With
| where id startswith "/providers/Microsoft.Management/managementGroups"
Sintoma - Não é possível criar mais definições de função
Quando você tenta criar uma nova função personalizada, você recebe a seguinte mensagem:
Role definition limit exceeded. No more role definitions can be created (code: RoleDefinitionLimitExceeded)
Cause
O Azure suporta até 5000 funções personalizadas num diretório. (Para o Microsoft Azure operado pela 21Vianet, o limite é de 2000 funções personalizadas.)
Solution
Siga estas etapas para localizar e excluir funções personalizadas do Azure não utilizadas.
Entre no portal do Azure e abra o Azure Resource Graph Explorer.
Selecione Escopo e defina o escopo como Diretório para a consulta.
Execute a seguinte consulta para obter todas as funções personalizadas que não têm atribuições de função:
Esta consulta verifica atribuições de função ativas e não considera atribuições de função personalizadas qualificadas no Microsoft Entra Privileged Identity Management. Para listar atribuições de função personalizadas qualificadas, você pode usar o Centro de administração do Microsoft Entra, o PowerShell ou a API REST. Para mais informações, consulte Get-AzRoleEligibilityScheduleInstance ou Instâncias do Agendamento de Elegibilidade de Função - Lista por Escopo.
authorizationresources | where type =~ "microsoft.authorization/roledefinitions" | where tolower(properties.type) == "customrole" | extend rdId = tolower(id) | extend Scope = tolower(properties.assignableScopes) | join kind = leftouter ( authorizationresources | where type =~ "microsoft.authorization/roleassignments" | extend RoleId = tolower(tostring(properties.roleDefinitionId)) | summarize RoleAssignmentCount = count() by RoleId ) on $left.rdId == $right.RoleId | where isempty(RoleAssignmentCount) | project RoleDefinitionId = rdId, RoleDefinitionName = tostring(properties.roleName), ScopeSegue-se um exemplo dos resultados:
Column Description RoleDefinitionId ID da função personalizada não utilizada. RoleDefinitionName Nome da função personalizada não utilizada. Scope Escopos atribuíveis para a função personalizada não utilizada. Abra o escopo (normalmente assinatura) e, em seguida, abra a página Controle de acesso (IAM).
Selecione a guia Funções para ver uma lista de todas as funções internas e personalizadas.
No filtro Tipo , selecione CustomRole para ver apenas suas funções personalizadas .
Selecione as reticências ... para a função personalizada que pretende eliminar e, em seguida, selecione Eliminar.