Atribuir funções do Azure usando o Azure PowerShell
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 o Azure PowerShell.
Observação
Recomendamos que você use o módulo Az PowerShell do Azure para interagir com o Azure. Para começar, confira Instalar o Azure PowerShell. Para saber como migrar para o módulo Az PowerShell, confira Migrar o Azure PowerShell do AzureRM para o Az.
Pré-requisitos
Para atribuir funções, você deve ter:
- Permissões
Microsoft.Authorization/roleAssignments/write
, como Administrador de controle de acesso baseado em função - PowerShell no Azure Cloud Shell ou Azure PowerShell
- A conta usada para executar o comando do PowerShell deve ter a permissão
Directory.Read.All
do Microsoft Graph.
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 o Azure PowerShell.
Usuário
Para um usuário do Microsoft Entra, obtenha o nome UPN, como patlong@contoso.com ou a ID do objeto de usuário. Para ter acesso à ID do objeto, você pode usar o Get-AzADUser.
Get-AzADUser -StartsWith <userName>
(Get-AzADUser -DisplayName <userName>).id
Grupo
Para um grupo do Microsoft Entra, você precisa da ID do objeto de grupo. Para ter acesso à ID do objeto, você pode usar o Get-AzADGroup.
Get-AzADGroup -SearchString <groupName>
(Get-AzADGroup -DisplayName <groupName>).id
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 Get-AzADServicePrincipal. Para uma entidade de serviço, use a ID de objeto, e não a ID do aplicativo.
Get-AzADServicePrincipal -SearchString <principalName>
(Get-AzADServicePrincipal -DisplayName <principalName>).id
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 Get-AzADServicePrincipal.
Get-AzADServicePrincipal -SearchString <principalName>
(Get-AzADServicePrincipal -DisplayName <principalName>).id
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 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 Get-AzRoleDefinition.
Get-AzRoleDefinition | Format-Table -Property Name, IsCustom, Id
Veja como listar os detalhes de uma função específica.
Get-AzRoleDefinition -Name <roleName>
Para saber mais, veja Lista de definições de função do Azure.
Etapa 3: identifique 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 Get-AzResourceGroup.
Get-AzResourceGroup
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 Get-AzSubscription.
Get-AzSubscription
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 Get-AzManagementGroup.
Get-AzManagementGroup
Etapa 4: Atribua função
Para atribuir uma função, use o comando New-AzRoleAssignment. Dependendo do escopo, o comando normalmente tem um dos formatos a seguir.
Escopo do recurso
New-AzRoleAssignment -ObjectId <objectId> `
-RoleDefinitionName <roleName> `
-Scope /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/<providerName>/<resourceType>/<resourceSubType>/<resourceName>
New-AzRoleAssignment -ObjectId <objectId> `
-RoleDefinitionId <roleId> `
-ResourceName <resourceName> `
-ResourceType <resourceType> `
-ResourceGroupName <resourceGroupName>
Escopo do grupo de recursos
New-AzRoleAssignment -SignInName <emailOrUserprincipalname> `
-RoleDefinitionName <roleName> `
-ResourceGroupName <resourceGroupName>
New-AzRoleAssignment -ObjectId <objectId> `
-RoleDefinitionName <roleName> `
-ResourceGroupName <resourceGroupName>
Escopo da assinatura
New-AzRoleAssignment -SignInName <emailOrUserprincipalname> `
-RoleDefinitionName <roleName> `
-Scope /subscriptions/<subscriptionId>
New-AzRoleAssignment -ObjectId <objectId> `
-RoleDefinitionName <roleName> `
-Scope /subscriptions/<subscriptionId>
Escopo do grupo de gerenciamento
New-AzRoleAssignment -SignInName <emailOrUserprincipalname> `
-RoleDefinitionName <roleName> `
-Scope /providers/Microsoft.Management/managementGroups/<groupName>
New-AzRoleAssignment -ObjectId <objectId> `
-RoleDefinitionName <roleName> `
-Scope /providers/Microsoft.Management/managementGroups/<groupName>
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 Colaborador de Dados de Blob de Armazenamento a uma entidade de serviço com a ID de objeto 55555555-5555-5555-5555-555555555555 e a ID de Aplicativo 66666666-6666-6666-6666-666666666666 em um escopo de recurso para uma conta de armazenamento chamada storage12345.
PS C:\> New-AzRoleAssignment -ApplicationId 66666666-6666-6666-6666-666666666666 `
-RoleDefinitionName "Storage Blob Data Contributor" `
-Scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/storage12345"
RoleAssignmentId : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/storage12345/providers/Microsoft.Authorization/roleAssignments/cccccccc-cccc-cccc-cccc-cccccccccccc
Scope : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/storage12345
DisplayName : example-identity
SignInName :
RoleDefinitionName : Storage Blob Data Contributor
RoleDefinitionId : ba92f5b4-2d11-453d-a403-e96b0029c9fe
ObjectId : 55555555-5555-5555-5555-555555555555
ObjectType : ServicePrincipal
CanDelegate : False
Atribuir uma função a um escopo de recurso de contêiner de blob específico
Atribui a função Colaborador de Dados de Blob de Armazenamento a uma entidade de serviço com a ID de objeto 55555555-5555-5555-5555-555555555555 e a ID de aplicativo 66666666-6666-6666-6666-666666666666 em um escopo de recurso para um contêiner de blob chamado blob-container-01.
PS C:\> New-AzRoleAssignment -ApplicationId 66666666-6666-6666-6666-666666666666 `
-RoleDefinitionName "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"
RoleAssignmentId : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/storage12345/blobServices/default/containers/blob-container-01/providers/Microsoft.Authorization/roleAssignm
ents/dddddddd-dddd-dddd-dddd-dddddddddddd
Scope : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/storage12345/blobServices/default/containers/blob-container-01
DisplayName : example-identity
SignInName :
RoleDefinitionName : Storage Blob Data Contributor
RoleDefinitionId : ba92f5b4-2d11-453d-a403-e96b0029c9fe
ObjectId : 55555555-5555-5555-5555-555555555555
ObjectType : ServicePrincipal
CanDelegate : False
Atribuir uma função para um grupo em um escopo de recurso de rede virtual específico
Atribui a função de colaborador da máquina virtual ao grupo Administradores de vendas farmacêuticas com a ID aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa em um escopo de recurso para uma rede virtual chamada pharma-sales-project-network.
PS C:\> New-AzRoleAssignment -ObjectId aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa `
-RoleDefinitionName "Virtual Machine Contributor" `
-ResourceName pharma-sales-project-network `
-ResourceType Microsoft.Network/virtualNetworks `
-ResourceGroupName MyVirtualNetworkResourceGroup
RoleAssignmentId : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyVirtualNetworkResourceGroup
/providers/Microsoft.Network/virtualNetworks/pharma-sales-project-network/providers/Microsoft.Authorizat
ion/roleAssignments/bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb
Scope : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyVirtualNetworkResourceGroup
/providers/Microsoft.Network/virtualNetworks/pharma-sales-project-network
DisplayName : Pharma Sales Admins
SignInName :
RoleDefinitionName : Virtual Machine Contributor
RoleDefinitionId : 9980e02c-c2be-4d73-94e8-173b1dc7cf3c
ObjectId : aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa
ObjectType : Group
CanDelegate : False
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.
PS C:\> New-AzRoleAssignment -SignInName patlong@contoso.com `
-RoleDefinitionName "Virtual Machine Contributor" `
-ResourceGroupName pharma-sales
RoleAssignmentId : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/pharma-sales/pr
oviders/Microsoft.Authorization/roleAssignments/55555555-5555-5555-5555-555555555555
Scope : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/pharma-sales
DisplayName : Pat Long
SignInName : patlong@contoso.com
RoleDefinitionName : Virtual Machine Contributor
RoleDefinitionId : 9980e02c-c2be-4d73-94e8-173b1dc7cf3c
ObjectId : 44444444-4444-4444-4444-444444444444
ObjectType : User
CanDelegate : False
Você também pode especificar o grupo de recursos com o parâmetro -Scope
:
PS C:\> New-AzRoleAssignment -SignInName patlong@contoso.com `
-RoleDefinitionName "Virtual Machine Contributor" `
-Scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/pharma-sales"
RoleAssignmentId : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/pharma-sales/providers/Microsoft.Authorization/roleAssignments/55555555-5555-5555-5555-555555555555
Scope : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/pharma-sales
DisplayName : Pat Long
SignInName : patlong@contoso.com
RoleDefinitionName : Virtual Machine Contributor
RoleDefinitionId : 9980e02c-c2be-4d73-94e8-173b1dc7cf3c
ObjectId : 44444444-4444-4444-4444-444444444444
ObjectType : User
CanDelegate : False
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.
PS C:\> New-AzRoleAssignment -ObjectId 44444444-4444-4444-4444-444444444444 `
-RoleDefinitionId 9980e02c-c2be-4d73-94e8-173b1dc7cf3c `
-Scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/pharma-sales"
RoleAssignmentId : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/pharma-sales/providers/Microsoft.Authorization/roleAssignments/55555555-5555-5555-5555-555555555555
Scope : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/pharma-sales
DisplayName : Pat Long
SignInName : patlong@contoso.com
RoleDefinitionName : Virtual Machine Contributor
RoleDefinitionId : 9980e02c-c2be-4d73-94e8-173b1dc7cf3c
ObjectId : 44444444-4444-4444-4444-444444444444
ObjectType : User
CanDelegate : False
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 77777777-7777-7777-7777-777777777777 no escopo do grupo de recursos pharma-sales.
PS C:\> New-AzRoleAssignment -ObjectId 77777777-7777-7777-7777-777777777777 `
-RoleDefinitionName "Virtual Machine Contributor" `
-ResourceGroupName pharma-sales
RoleAssignmentId : /subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Authorization/roleAssignments/66666666-6666-6666-6666-666666666666
Scope : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/pharma-sales
DisplayName : MyApp1
SignInName :
RoleDefinitionName : Virtual Machine Contributor
RoleDefinitionId : 9980e02c-c2be-4d73-94e8-173b1dc7cf3c
ObjectId : 77777777-7777-7777-7777-777777777777
ObjectType : ServicePrincipal
CanDelegate : False
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.
PS C:\> New-AzRoleAssignment -SignInName annm@example.com `
-RoleDefinitionName "Reader" `
-Scope "/subscriptions/00000000-0000-0000-0000-000000000000"
RoleAssignmentId : /subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Authorization/roleAssignments/66666666-6666-6666-6666-666666666666
Scope : /subscriptions/00000000-0000-0000-0000-000000000000
DisplayName : Ann M
SignInName : annm@example.com
RoleDefinitionName : Reader
RoleDefinitionId : acdd72a7-3385-48ef-bd42-f606fba81ae7
ObjectId : 77777777-7777-7777-7777-777777777777
ObjectType : ServicePrincipal
CanDelegate : False
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.
PS C:\> New-AzRoleAssignment -SignInName alain@example.com `
-RoleDefinitionName "Billing Reader" `
-Scope "/providers/Microsoft.Management/managementGroups/marketing-group"
RoleAssignmentId : /providers/Microsoft.Management/managementGroups/marketing-group/providers/Microsoft.Authorization/roleAssignments/22222222-2222-2222-2222-222222222222
Scope : /providers/Microsoft.Management/managementGroups/marketing-group
DisplayName : Alain Charon
SignInName : alain@example.com
RoleDefinitionName : Billing Reader
RoleDefinitionId : fa23ad8b-c56e-40d8-ac0c-ce449e1d2c64
ObjectId : 44444444-4444-4444-4444-444444444444
ObjectType : User
CanDelegate : False