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 usado para gerenciar o acesso aos recursos no 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 funções no Azure

Atribuir uma função consiste em três elementos: entidade de segurança, definição de função e escopo.

Etapa 1: Determine 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.

Usuário

Para um usuário do Microsoft Entra, obtenha o nome principal do usuário, como patlong@contoso.com ou a ID do objeto de usuário. Para ter acesso à ID do objeto, você pode usar o 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 de 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 ter acesso à ID do objeto, você pode usar o az ad sp list. Para uma entidade de serviço, use a ID de 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 pelo usuário, você precisa da ID de objeto. Para ter acesso à ID do objeto, você pode usar o az ad sp list.

az ad sp list --all --filter "servicePrincipalType eq 'ManagedIdentity'"

Para apenas listar 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 privilégio mínimo 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 saber mais, veja Lista de 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 recurso, 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 escopo, confira Noções básicas de escopo.

Escopo do recurso

Para o escopo de recurso, você precisa da ID de recurso para o recurso. Você pode encontrar a ID do recurso examinando as propriedades do recurso no portal do Azure. Uma ID do 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 de Assinaturas no portal do Azure ou pode 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 pode usar o az account management-group list.

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

Etapa 4: Atribua função

Para atribuir uma função, use o comando az role assignment create. Dependendo do escopo, o comando normalmente tem um dos formatos a seguir.

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

Veja a seguir um exemplo de 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"
}

Exemplos de atribuição 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 para 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 do grupo de recursos

Atribui a função Colaborador da 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 "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 ocasiões em que um nome de função pode ser alterado, 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 será alterada. Se você estiver usando scripts ou automação para criar 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 provavelmente funcionarão.

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 do grupo de recursos

Atribui a função Colaborador da Máquina Virtual a um aplicativo com ID de objeto 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 uma função para uma nova entidade de serviço em um escopo de grupo de recursos

Se você criar uma entidade de serviço e tentar atribuir uma função imediatamente 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 identidade gerenciada e, em seguida, tentar atribuir uma função a essa entidade, a atribuição de função poderá falhar. Provavelmente, o motivo dessa falha é 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 tenha replicado a entidade de serviço. Para resolver esse cenário, você deve especificar o tipo de entidade quando 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, 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

Atribua a função Leitor ao usuário annm@example.com no escopo da 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 de Leitor de cobrança ao usuário alain@example.com 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óximas etapas