Compartilhar via


Atribuir funções do Azure usando a CLI do Azure

O RBAC (controle de acesso baseado em função) do Azure é o sistema de autorização que você usa para gerenciar o acesso aos recursos do Azure. Para conceder acesso, você atribui funções a usuários, grupos, entidades de serviço ou identidades gerenciadas em um determinado escopo. 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, são necessários três elementos: principal 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. A ID tem o formato: 11111111-1111-1111-1111-111111111111. Você pode obter a ID usando o portal do Azure ou a CLI do Azure.

User

Para um usuário do Microsoft Entra, obtenha o nome principal do usuário, como patlong@contoso.com ou o ID do objeto do usuário. Para obter a 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 de grupo. Para obter a 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

Entidade 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 a 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 gerenciada

Para uma identidade gerenciada atribuída pelo sistema ou atribuída pelo usuário, você precisa da ID do objeto. Para obter a 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: Selecionar 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 a ID de função exclusiva, 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 privilégio mínimo necessário, portanto, evite atribuir uma função em um escopo mais amplo. Para obter mais informações sobre o escopo, consulte Noções básicas sobre o escopo.

Escopo do recurso

Para o escopo do recurso, você precisa da ID do recurso. Você pode encontrar a ID do recurso examinando as propriedades do recurso no portal do Azure. Uma ID de recurso tem o seguinte formato.

/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{providerName}/{resourceType}/{resourceSubType}/{resourceName}

Escopo 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 az group list.

az group list --query "[].{name:name}" --output tsv

Escopo da assinatura

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 usar az account list.

az account list --query "[].{name:name, id:id}" --output tsv

Escopo do grupo de gerenciamento

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 usar az account management-group list.

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.

Escopo do recurso

az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{providerName}/{resourceType}/{resourceSubType}/{resourceName}"

Escopo do grupo de recursos

az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}"

Escopo da assinatura

az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}"

Escopo do grupo de gerenciamento

az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/providers/Microsoft.Management/managementGroups/{managementGroupName}"

O exemplo a seguir mostra um exemplo da saída quando você atribui a função 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 da conta de armazenamento

Atribui a função de Colaborador de dados de blob de armazenamento a uma entidade de serviço com a ID de objeto 55555555-5555-5555-5555-555555555555 em um escopo de recurso para uma conta de armazenamento denominada 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 a 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 a ID de objeto 55555555-5555-5555-5555-555555555555 em um escopo de recurso para um contêiner de blob denominado 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 Colaborador da Máquina Virtual para o grupo Ann Mack Team com ID 22222222-2222-2222-2222-222222222222 em um escopo de recursos para uma rede virtual denominada 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 para um usuário em um escopo de grupo de recursos

Atribui a função 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 "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"

Atribuir uma função para 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 (versão prévia) no nome. Quando o papel é liberado, o papel é renomeado.

Mesmo que uma função seja renomeada, a ID da função não será alterada. Se você estiver usando scripts ou automação para criar suas atribuições de função, é uma prática recomendada usar a ID de função exclusiva em vez do nome da função. Portanto, se uma função for renomeada, os scripts serão mais propensos a funcionar.

O exemplo a seguir atribui a função Colaborador de Máquina Virtual ao usuário patlong@contoso.com 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 a ID de objeto 55555555-5555-5555-5555-555555555555 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 Colaborador de Máquina Virtual a um aplicativo com a ID do objeto principal do serviço 44444444-4444-4444-4444-444444444444 no escopo do grupo de recursos pharma-sales.

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 um cargo para um novo principal 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 tentar atribuir uma função a essa entidade de serviço, a atribuição de função poderá falhar. O motivo dessa falha provavelmente é um atraso de 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, em seguida, 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 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 para um usuário em um escopo de assinatura

Atribui a função Leitor ao usuário annm@example.com no escopo de uma assinatura.

az role assignment create --assignee "annm@example.com" \
--role "Reader" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000"

Atribuir uma função para um grupo em um escopo de assinatura

Atribui a função Leitor ao grupo Ann Mack Team com ID 22222222-2222-2222-2222-222222222222 no escopo da 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 de Leitor de dados de blob de armazenamento ao usuário alain@example.com 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 para um usuário em um escopo de grupo de gerenciamento

Atribui a função Leitor de Cobrança ao usuário alain@example.com no escopo de um grupo de gerenciamento.

az role assignment create --assignee "alain@example.com" \
--role "Billing Reader" \
--scope "/providers/Microsoft.Management/managementGroups/marketing-group"

Próximas etapas