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:

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-ide 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"

Próximos passos