Atribuir funções Azure usando Azure CLI

O controlo de acesso baseado em funções Azure (Azure RBAC) é o sistema de autorização que utiliza para gerir o acesso aos recursos 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 Azure CLI.

Pré-requisitos

Para atribuir funções, deve ter:

Passos para atribuir um papel de Azure

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

Passo 1: Determinar quem precisa de acesso

Pode atribuir uma função a um utilizador, grupo, principal de serviço ou identidade gerida. Para atribuir uma função, pode ser necessário especificar o ID único do objeto. O ID tem o formato: 11111111-1111-1111-1111-111111111111 . Pode obter o ID usando o portal Azure ou Azure CLI.

Utilizador

Para um utilizador AZure AD, obtenha o nome principal do utilizador, como patlong @ contoso.com ou o ID do objeto de utilizador. Para obter o ID do objeto, você pode usar a az show de usuário de anúncios.

az ad user show --id "{principalName}" --query "objectId" --output tsv

Grupo

Para um grupo AD Azure, você precisa da identificação do objeto de grupo. Para obter o ID do objeto, você pode usar a az ad group show ou a lista de grupos de anúncios az.

az ad group show --group "{groupName}" --query "objectId" --output tsv

Service principal (Principal de serviço)

Para um principal de serviço Azure AD (identidade utilizada por uma aplicação), precisa do iD principal do objeto de serviço. Para obter o ID do objeto, você pode usar a lista az ad sp. Para um principiante de serviço, utilize o ID do objeto e não o ID da aplicação.

az ad sp list --all --query "[].{displayName:displayName, objectId:objectId}" --output tsv
az ad sp list --display-name "{displayName}"

Identidade gerida

Para uma identidade gerida atribuída pelo sistema ou para uma identidade gerida atribuída pelo utilizador, precisa do ID do objeto. Para obter o ID do objeto, você pode usar a lista az ad sp.

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

Para listar apenas as identidades geridas atribuídas pelo utilizador, pode utilizar a lista de identidades az.

az identity list

Passo 2: Selecione a função adequada

As permissões são agrupadas em papéis. Pode selecionar a partir de uma lista de várias funções incorporadas do Azure ou pode usar as suas próprias funções personalizadas. É uma boa prática conceder acesso com o menor privilégio que for necessário, por isso evite atribuir um papel mais amplo.

Para listar papéis e obter o ID de papel único, você pode usar a lista de definição de função az.

az role definition list --query "[].{name:name, roleType:roleType, roleName:roleName}" --output tsv

Aqui está como listar os detalhes de um papel particular.

az role definition list --name "{roleName}"

Para obter mais informações, consulte as definições de funções list Azure.

Passo 3: Identificar o âmbito necessário

O Azure fornece quatro níveis de âmbito: recurso, grupo de recursos,subscrição e grupo de gestão. É uma boa prática conceder acesso com o menor privilégio que for necessário, por isso evite atribuir um papel num âmbito mais amplo. Para obter mais informações sobre o âmbito, consulte o âmbito de aplicação.

Âmbito do recurso

Para o âmbito de recursos, precisa do ID de recurso para o recurso. Pode encontrar o ID do recurso olhando para as propriedades do recurso no portal Azure. Um ID de recurso tem o seguinte formato.

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

Âmbito de grupo de recursos

Para o âmbito do grupo de recursos, precisa do nome do grupo de recursos. Pode encontrar o nome na página dos grupos de Recursos no portal Azure ou pode utilizar a lista de grupos az.

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

Âmbito de subscrição

Para o âmbito de subscrição, precisa do ID de subscrição. Pode encontrar o ID na página de Subscrições no portal Azure ou pode utilizar a lista de conta az.

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

Âmbito do grupo de gestão

Para o âmbito do grupo de gestão, você precisa do nome do grupo de gestão. Pode encontrar o nome na página de grupos de Gestão no portal Azure ou pode utilizar a lista de grupos de gestão de conta az.

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

Passo 4: Atribuir função

Para atribuir um papel, use a atribuição de função az criar comando. Dependendo do âmbito, o comando tem normalmente 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 de grupo de recursos

az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--resource-group "{resourceGroupName}"

Âmbito de subscrição

az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--subscription "{subscriptionNameOrId}"

Âmbito do grupo de gestão

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

O seguinte mostra um exemplo da saída quando atribui a função de Contribuinte de Máquina Virtual a um utilizador num âmbito 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ções

Atribuir uma função para todos os recipientes blob num âmbito de recursos de conta de armazenamento

Atribui a função de Contribuinte de Dados Blob de Armazenamento a um titular de serviço com iD 55555555-5555-55555-555555555555555555555555555 numa área de recursos para uma conta de armazenamento denominada armazenamento12345.

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 âmbito específico de recurso de recipiente de bolhas

Atribui a função de contribuinte de dados blob de armazenamento a um titular de serviço com o ID do objeto 5555555-5555-5555-555555555555555555555555555, numa mira de recurso para um recipiente de bolhas 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 um papel para um grupo num âmbito específico de recursos de rede virtual

Atribui o papel de Contribuinte de Máquina Virtual ao grupo Ann Mack Team com o ID 2222222-2222-2222-2222-222222222222222 numa área de recursos 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 para um utilizador num âmbito de grupo de recursos

Atribui o papel de Contribuinte de Máquina Virtual ao utilizador @ patlong contoso.com no âmbito do grupo de recursos de vendas de pharma.

az role assignment create --assignee "patlong@contoso.com" \
--role "Virtual Machine Contributor" \
--resource-group "pharma-sales"

Atribuir uma função para um utilizador que usa o ID de função único num âmbito de grupo de recursos

Há um par de vezes em que um nome pode mudar, por exemplo:

  • Está a usar o seu próprio papel personalizado e decide mudar o nome.
  • Está a utilizar um papel de pré-visualização que tem (Pré-visualização) no nome. Quando o papel é lançado, o papel é renomeado.

Mesmo que um papel seja renomeado, o iD do papel não muda. Se estiver a usar scripts ou automação para criar as suas atribuições de papéis, é uma boa prática usar o ID de função único em vez do nome de função. Portanto, se um papel for renomeado, os seus scripts são mais propensos a funcionar.

O exemplo a seguir atribui o papel de Contribuinte de Máquina Virtual ao utilizador @ patlong contoso.com no âmbito do grupo de recursos de vendas de pharma.

az role assignment create --assignee "patlong@contoso.com" \
--role "9980e02c-c2be-4d73-94e8-173b1dc7cf3c" \
--resource-group "pharma-sales"

Atribuir uma função para todos os recipientes blob num âmbito de grupo de recursos

Atribui a função de Contribuinte de Dados Blob de Armazenamento a um titular de serviço com o objeto ID 5555555-5555-55555-5555555555555555555555555555555 no âmbito do grupo de recursos Exemplo-Armazenamento-rg.

az role assignment create --assignee "55555555-5555-5555-5555-555555555555" \
--role "Storage Blob Data Contributor" \
--resource-group "Example-Storage-rg"

Alternadamente, pode especificar o grupo de recursos totalmente qualificado com o --scope parâmetro:

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 uma aplicação num âmbito de grupo de recursos

Atribui a função de Contribuinte de Máquina Virtual a uma aplicação com o iD do objeto principal de serviço 44444444-4444-4444-4444444444444444444444444444444 no âmbito do grupo de recursos de vendas de pharma.

az role assignment create --assignee "44444444-4444-4444-4444-444444444444" \
--role "Virtual Machine Contributor" \
--resource-group "pharma-sales"

Atribuir um papel para um novo diretor de serviço num âmbito de grupo de recursos

Se criar um novo diretor de serviço e tentar imediatamente atribuir um papel a esse diretor de serviço, essa atribuição de funções pode falhar em alguns casos. Por exemplo, se usar um script para criar uma nova identidade gerida e tentar atribuir um papel a esse principal de serviço, a atribuição de funções pode falhar. A razão para esta falha é provavelmente um atraso de replicação. O principal serviço é criado numa região; no entanto, a atribuição de funções pode ocorrer em uma região diferente que ainda não replicou o principal serviço. Para abordar este cenário, deve especificar o tipo principal ao criar a atribuição de funções.

Para atribuir uma função, utilize a az role assignment assignção,especifique um valor para --assignee-object-id , e, em seguida, definido --assignee-principal-type para ServicePrincipal .

az role assignment create --assignee-object-id "{assigneeObjectId}" \
--assignee-principal-type "{assigneePrincipalType}" \
--role "{roleNameOrId}" \
--resource-group "{resourceGroupName}" \
--scope "/subscriptions/{subscriptionId}"

O exemplo a seguir atribui o papel de Contribuinte de Máquina Virtual à identidade gerida pelo msi-teste no âmbito do grupo de recursos de vendas de pharma:

az role assignment create --assignee-object-id "33333333-3333-3333-3333-333333333333" \
--assignee-principal-type "ServicePrincipal" \
--role "Virtual Machine Contributor" \
--resource-group "pharma-sales"

Atribuir uma função para um utilizador num âmbito de subscrição

Atribui o papel de Leitor ao utilizador annm @ example.com num âmbito de subscrição.

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

Atribuir um papel para um grupo num âmbito de subscrição

Atribui o papel de Reader ao grupo Ann Mack Team com iD 22222222-2222-2222-2222-2222-2222222222222 num âmbito de subscrição.

az role assignment create --assignee "22222222-2222-2222-2222-222222222222" \
--role "Reader" \
--subscription "00000000-0000-0000-0000-000000000000"

Atribuir uma função para todos os recipientes blob num âmbito de subscrição

Atribui a função de Leitor de Dados blob de armazenamento ao utilizador @ alain example.com num âmbito de subscrição.

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 utilizador no âmbito de um grupo de gestão

Atribui o papel de Leitor de Faturação ao utilizador alain @ example.com num âmbito de grupo de gestão.

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

Passos seguintes