Atribuir funções do Azure usando a CLI do Azure
O controle de acesso baseado em função do Azure (Azure RBAC) é o sistema de autorização que você usa para gerenciar o acesso aos recursos do Azure. Para conceder acesso, atribua funções a utilizadores, grupos, principais de serviço ou identidades geridas num determinado âmbito. Este artigo descreve como atribuir funções usando a CLI do Azure.
Pré-requisitos
Para atribuir funções, você deve ter:
Microsoft.Authorization/roleAssignments/write
permissões, como Administrador de Controle de Acesso Baseado em Função- Bash no Azure Cloud Shell ou CLI do Azure
Etapas para atribuir uma função do Azure
Para atribuir uma função consiste em três elementos: entidade de segurança, definição de função e escopo.
Etapa 1: Determinar quem precisa de acesso
Você pode atribuir uma função a um usuário, grupo, entidade de serviço ou identidade gerenciada. Para atribuir uma função, talvez seja necessário especificar a ID exclusiva do objeto. O ID tem o formato: 11111111-1111-1111-1111-111111111111
. Você pode obter a ID usando o portal do Azure ou a CLI do Azure.
Utilizador
Para um usuário do Microsoft Entra, obtenha o nome principal do usuário, como patlong@contoso.com ou a ID do objeto do usuário. Para obter o ID do objeto, você pode usar az ad user show.
az ad user show --id "{principalName}" --query "id" --output tsv
Grupo
Para um grupo do Microsoft Entra, você precisa da ID do objeto do grupo. Para obter o ID do objeto, você pode usar az ad group show ou az ad group list.
az ad group show --group "{groupName}" --query "id" --output tsv
Principal de serviço
Para uma entidade de serviço do Microsoft Entra (identidade usada por um aplicativo), você precisa da ID do objeto da entidade de serviço. Para obter o ID do objeto, você pode usar az ad sp list. Para uma entidade de serviço, use a ID do objeto e não a ID do aplicativo.
az ad sp list --all --query "[].{displayName:displayName, id:id}" --output tsv
az ad sp list --display-name "{displayName}"
Identidade gerida
Para uma identidade gerenciada atribuída pelo sistema ou pelo usuário, você precisa da ID do objeto. Para obter o ID do objeto, você pode usar az ad sp list.
az ad sp list --all --filter "servicePrincipalType eq 'ManagedIdentity'"
Para listar apenas identidades gerenciadas atribuídas pelo usuário, você pode usar az identity list.
az identity list
Etapa 2: Selecione a função apropriada
As permissões são agrupadas em funções. Você pode selecionar em uma lista de várias funções internas do Azure ou pode usar suas próprias funções personalizadas. É uma prática recomendada conceder acesso com o menor privilégio necessário, portanto, evite atribuir uma função mais ampla.
Para listar funções e obter o ID de função exclusivo, você pode usar az role definition list.
az role definition list --query "[].{name:name, roleType:roleType, roleName:roleName}" --output tsv
Veja como listar os detalhes de uma função específica.
az role definition list --name "{roleName}"
Para obter mais informações, consulte Listar definições de função do Azure.
Etapa 3: Identificar o escopo necessário
O Azure fornece quatro níveis de escopo: recurso, grupo de recursos, assinatura e grupo de gerenciamento. É uma prática recomendada conceder acesso com o menor privilégio necessário, portanto, evite atribuir uma função em um escopo mais amplo. Para obter mais informações sobre escopo, consulte Entender escopo.
Âmbito do recurso
Para o escopo do recurso, você precisa da ID do recurso para o recurso. Você pode encontrar a ID do recurso examinando as propriedades do recurso no portal do Azure. Um ID de recurso tem o seguinte formato.
/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{providerName}/{resourceType}/{resourceSubType}/{resourceName}
Âmbito do grupo de recursos
Para o escopo do grupo de recursos, você precisa do nome do grupo de recursos. Você pode encontrar o nome na página Grupos de recursos no portal do Azure ou pode usar a lista az group.
az group list --query "[].{name:name}" --output tsv
Âmbito da subscrição
Para o escopo da assinatura, você precisa da ID da assinatura. Você pode encontrar a ID na página Assinaturas no portal do Azure ou pode usar a lista de contas az.
az account list --query "[].{name:name, id:id}" --output tsv
Âmbito do grupo de gestão
Para o escopo do grupo de gerenciamento, você precisa do nome do grupo de gerenciamento. Você pode encontrar o nome na página Grupos de gerenciamento no portal do Azure ou pode usar a lista de grupos de gerenciamento de contas az.
az account management-group list --query "[].{name:name, id:id}" --output tsv
Etapa 4: Atribuir função
Para atribuir uma função, use o comando az role assignment create . Dependendo do escopo, o comando normalmente tem um dos seguintes formatos.
Âmbito do recurso
az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{providerName}/{resourceType}/{resourceSubType}/{resourceName}"
Âmbito do grupo de recursos
az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}"
Âmbito da subscrição
az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}"
Âmbito do grupo de gestão
az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/providers/Microsoft.Management/managementGroups/{managementGroupName}"
A seguir mostra um exemplo da saída quando você atribui a função de Colaborador de Máquina Virtual a um usuário em um escopo de grupo de recursos.
{
"canDelegate": null,
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
"name": "{roleAssignmentId}",
"principalId": "{principalId}",
"principalType": "User",
"resourceGroup": "{resourceGroupName}",
"roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/9980e02c-c2be-4d73-94e8-173b1dc7cf3c",
"scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}",
"type": "Microsoft.Authorization/roleAssignments"
}
Atribuir exemplos de função
Atribuir uma função para todos os contêineres de blob em um escopo de recurso de conta de armazenamento
Atribui a função de Colaborador de Dados de Blob de Armazenamento a uma entidade de serviço com ID de objeto 55555555-5555-5555-5555-555555555555555 em um escopo de recurso para uma conta de armazenamento chamada storage12345.
az role assignment create --assignee "55555555-5555-5555-5555-555555555555" \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/storage12345"
Atribuir uma função para um escopo de recurso de contêiner de blob específico
Atribui a função de Colaborador de Dados de Blob de Armazenamento a uma entidade de serviço com ID de objeto 55555555-5555-5555-5555-55555555555555 em um escopo de recurso para um contêiner de blob chamado blob-container-01.
az role assignment create --assignee "55555555-5555-5555-5555-555555555555" \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/storage12345/blobServices/default/containers/blob-container-01"
Atribuir uma função a um grupo em um escopo de recurso de rede virtual específico
Atribui a função de Colaborador de Máquina Virtual ao grupo Ann Mack Team com ID 22222222-2222-2222-2222-2222222222222 em um escopo de recurso para uma rede virtual chamada pharma-sales-project-network.
az role assignment create --assignee "22222222-2222-2222-2222-222222222222" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales/providers/Microsoft.Network/virtualNetworks/pharma-sales-project-network"
Atribuir uma função a um utilizador no âmbito de um grupo de recursos
Atribui a função de Colaborador de Máquina Virtual ao patlong@contoso.com usuário no escopo do grupo de recursos de vendas farmacêuticas.
az role assignment create --assignee "patlong@contoso.com" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"
Atribuir uma função a um usuário usando a ID de função exclusiva em um escopo de grupo de recursos
Há algumas vezes em que um nome de função pode mudar, por exemplo:
- Você está usando sua própria função personalizada e decide alterar o nome.
- Você está usando uma função de visualização que tem (Visualização) no nome. Quando a função é liberada, ela é renomeada.
Mesmo que uma função seja renomeada, a ID da função não é alterada. Se você estiver usando scripts ou automação para criar suas atribuições de função, é uma prática recomendada usar o ID de função exclusivo em vez do nome da função. Portanto, se uma função for renomeada, é mais provável que seus scripts funcionem.
O exemplo a seguir atribui a função de Colaborador de Máquina Virtual ao patlong@contoso.com usuário no escopo do grupo de recursos pharma-sales .
az role assignment create --assignee "patlong@contoso.com" \
--role "9980e02c-c2be-4d73-94e8-173b1dc7cf3c" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"
Atribuir uma função para todos os contêineres de blob em um escopo de grupo de recursos
Atribui a função de Colaborador de Dados de Blob de Armazenamento a uma entidade de serviço com ID de objeto 55555555-5555-5555-5555-55555555555555 no escopo do grupo de recursos Example-Storage-rg.
az role assignment create --assignee "55555555-5555-5555-5555-555555555555" \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/Example-Storage-rg"
Atribuir uma função para um aplicativo em um escopo de grupo de recursos
Atribui a função de Colaborador de Máquina Virtual a um aplicativo com ID de objeto principal de serviço 44444444-4444-4444-4444-444444444444 no escopo do grupo de recursos de vendas farmacêuticas.
az role assignment create --assignee "44444444-4444-4444-4444-444444444444" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"
Atribuir uma função para uma nova entidade de serviço em um escopo de grupo de recursos
Se você criar uma nova entidade de serviço e tentar atribuir imediatamente uma função a essa entidade de serviço, essa atribuição de função poderá falhar em alguns casos. Por exemplo, se você usar um script para criar uma nova identidade gerenciada e, em seguida, tentar atribuir uma função a essa entidade de serviço, a atribuição de função poderá falhar. A razão para essa falha é provavelmente um atraso na replicação. A entidade de serviço é criada em uma região; no entanto, a atribuição de função pode ocorrer em uma região diferente que ainda não replicou a entidade de serviço. Para resolver esse cenário, você deve especificar o tipo principal ao criar a atribuição de função.
Para atribuir uma função, use az role assignment create, especifique um valor para --assignee-object-id
e defina --assignee-principal-type
como ServicePrincipal
.
az role assignment create --assignee-object-id "{assigneeObjectId}" \
--assignee-principal-type "{assigneePrincipalType}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}"
O exemplo a seguir atribui a função de Colaborador de Máquina Virtual à identidade gerenciada msi-test no escopo do grupo de recursos pharma-sales:
az role assignment create --assignee-object-id "33333333-3333-3333-3333-333333333333" \
--assignee-principal-type "ServicePrincipal" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"
Atribuir uma função a um utilizador num âmbito de subscrição
Atribui a função Leitor ao annm@example.com usuário em um escopo de assinatura.
az role assignment create --assignee "annm@example.com" \
--role "Reader" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000"
Atribuir uma função a um grupo no âmbito de uma subscrição
Atribui a função de Leitor ao grupo Ann Mack Team com ID 22222222-2222-2222-2222-222222222222222 em um escopo de assinatura.
az role assignment create --assignee "22222222-2222-2222-2222-222222222222" \
--role "Reader" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000"
Atribuir uma função para todos os contêineres de blob em um escopo de assinatura
Atribui a função Leitor de Dados de Blob de Armazenamento ao alain@example.com usuário em um escopo de assinatura.
az role assignment create --assignee "alain@example.com" \
--role "Storage Blob Data Reader" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000"
Atribuir uma função a um usuário em um escopo de grupo de gerenciamento
Atribui a função Leitor de Faturamento ao alain@example.com usuário em um escopo de grupo de gerenciamento.
az role assignment create --assignee "alain@example.com" \
--role "Billing Reader" \
--scope "/providers/Microsoft.Management/managementGroups/marketing-group"