Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O Azure tem um poderoso sistema de controle de acesso baseado em função (RBAC). Para obter mais informações sobre o Azure RBAC, consulte O que é o controle de acesso baseado em função do Azure (Azure RBAC)? Usando o Bicep, você pode definir programaticamente suas atribuições de função RBAC e definições de função.
Atribuições de funções
As atribuições de função permitem atribuir a um principal, como um utilizador, um grupo ou uma entidade de serviço, acesso a um recurso específico do Azure.
Para definir uma atribuição de função, crie um recurso com o tipo Microsoft.Authorization/roleAssignments
. Uma definição de função tem várias propriedades, incluindo um escopo, um nome, um ID da função, um ID de entidade principal e um tipo de entidade principal.
Âmbito de aplicação
As atribuições de função se aplicam em um escopo específico, que define o recurso ou conjunto de recursos aos quais você está concedendo acesso. Para obter mais informações, consulte Entender o escopo do Azure RBAC.
As atribuições de função são recursos de extensão, o que significa que se aplicam a outro recurso. O exemplo a seguir mostra como criar uma conta de armazenamento e uma atribuição de função com escopo para essa conta de armazenamento:
param ___location string = resourceGroup().___location
param storageAccountName string = 'stor${uniqueString(resourceGroup().id)}'
param storageSkuName string = 'Standard_LRS'
param roleDefinitionResourceId string
param principalId string
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
name: storageAccountName
___location: ___location
kind: 'StorageV2'
sku: {
name: storageSkuName
}
}
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
scope: storageAccount
name: guid(storageAccount.id, principalId, roleDefinitionResourceId)
properties: {
roleDefinitionId: roleDefinitionResourceId
principalId: principalId
principalType: 'ServicePrincipal'
}
}
Se você não especificar explicitamente o escopo, o Bicep usará o arquivo targetScope
. No exemplo a seguir, como nenhuma scope
propriedade é especificada, a atribuição de função está limitada à assinatura:
param roleDefinitionResourceId string
param principalId string
targetScope = 'subscription'
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(subscription().id, principalId, roleDefinitionResourceId)
properties: {
roleDefinitionId: roleDefinitionResourceId
principalId: principalId
principalType: 'ServicePrincipal'
}
}
Sugestão
Use o menor escopo necessário para atender às suas necessidades.
Por exemplo, se você precisar conceder acesso a uma identidade gerenciada a uma única conta de armazenamento, é uma boa prática de segurança criar a atribuição de função no escopo da conta de armazenamento e não no escopo do grupo de recursos ou da assinatura.
Nome
O nome do recurso de uma atribuição de função deve ser um identificador global exclusivo (GUID).
Os nomes de recursos de atribuição de função devem ser exclusivos dentro do tenant do Microsoft Entra, mesmo que o escopo seja mais restrito.
Para que a sua implementação do Bicep seja repetível, é importante que o nome seja determinístico; ou seja, use o mesmo nome sempre que implementar. É uma boa prática criar um GUID que use o escopo, a ID principal e a ID da função juntos. É uma boa ideia usar a guid()
função para ajudá-lo a criar um GUID determinístico para seus nomes de atribuição de função, como neste exemplo:
name: guid(subscription().id, principalId, roleDefinitionResourceId)
ID de definição de função
A função atribuída pode ser uma definição de função interna ou uma definição de função personalizada. Para usar uma definição de função interna, localize a ID de definição de função apropriada. Por exemplo, a função de Colaborador tem uma ID de definição de função de b24988ac-6180-42a0-ab88-20f7382dd24c
.
Ao criar o recurso de atribuição de função, você precisa especificar um ID de recurso totalmente qualificado. Os IDs de definição de funções internos são recursos com âmbito de subscrição. É recomendável usar existing
recurso para fazer referência à função incorporada e usar a .id
propriedade para acessar a sua ID de recurso totalmente qualificada:
param principalId string
@description('This is the built-in Contributor role. See https://learn.microsoft.com/azure/role-based-access-control/built-in-roles#contributor')
resource contributorRoleDefinition 'Microsoft.Authorization/roleDefinitions@2022-04-01' existing = {
scope: subscription()
name: 'b24988ac-6180-42a0-ab88-20f7382dd24c'
}
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(resourceGroup().id, principalId, contributorRoleDefinition.id)
properties: {
roleDefinitionId: contributorRoleDefinition.id
principalId: principalId
principalType: 'ServicePrincipal'
}
}
Diretor
A principalId
propriedade deve ser definida como um GUID que representa o identificador do Microsoft Entra para o principal. No Microsoft Entra ID, isso às vezes é chamado de ID de objeto.
A principalType
propriedade especifica se o principal é um utilizador, um grupo ou uma entidade de serviço. As identidades gerenciadas são uma forma de entidade de serviço.
Sugestão
É importante definir a principalType
propriedade ao criar uma atribuição de função no Bicep. Caso contrário, você poderá obter erros de implantação intermitentes, especialmente quando trabalha com entidades de serviço e identidades gerenciadas.
O exemplo a seguir mostra como criar uma identidade gerenciada atribuída pelo usuário e uma atribuição de função:
param ___location string = resourceGroup().___location
param roleDefinitionResourceId string
var managedIdentityName = 'MyManagedIdentity'
resource managedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
name: managedIdentityName
___location: ___location
}
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(resourceGroup().id, managedIdentity.id, roleDefinitionResourceId)
properties: {
roleDefinitionId: roleDefinitionResourceId
principalId: managedIdentity.properties.principalId
principalType: 'ServicePrincipal'
}
}
Comportamento de exclusão de recursos
Quando você exclui um usuário, grupo, entidade de serviço ou identidade gerenciada da ID do Microsoft Entra, é recomendável excluir todas as atribuições de função. Eles não são excluídos automaticamente.
Todas as atribuições de função que se referem a um ID principal excluído tornam-se inválidas. Se você tentar reutilizar o nome de uma atribuição de função para outra atribuição de função, a implantação falhará. Para contornar esse comportamento, você deve remover a atribuição de função antiga antes de recriá-la ou garantir que você use um nome exclusivo quando você implantar uma nova atribuição de função. Este modelo de início rápido ilustra como podes definir uma atribuição de função num módulo Bicep e usar um identificador principal como valor inicial para o nome da atribuição de função.
Definições de função personalizadas
As definições de função personalizadas permitem definir um conjunto de permissões que podem ser atribuídas a uma entidade através de uma atribuição de função. Para obter mais informações sobre definições de função, consulte Compreender definições de função do Azure.
Para criar uma definição de função personalizada, defina um recurso do tipo Microsoft.Authorization/roleDefinitions
. Consulte Criar uma nova definição de função por meio de um início rápido de implantação no nível de assinatura para obter um exemplo.
Os nomes de recursos de definição de função devem ser exclusivos dentro do inquilino do Microsoft Entra, mesmo que os âmbitos atribuíveis sejam mais restritos.
Observação
Alguns serviços gerenciam suas próprias definições e atribuições de função. Por exemplo, o Azure Cosmos DB mantém os seus próprios recursos Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments
e Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions
. Para obter mais informações, consulte a documentação do serviço específico.
Recursos relacionados
- Documentação de recursos
- Recursos de extensão
- Âmbitos de aplicação
- Modelos de início rápido
- Criar uma nova função através de uma implementação ao nível de subscrição
- Atribuir uma função no escopo da assinatura
- Atribuir uma função no âmbito do arrendatário
- Criar um grupo de recursos, aplicar um bloqueio e Controle de Acesso Baseado em Funções (RBAC)
- Criar cofre de chaves, identidade gerida e atribuição de função
- Publicações no blogue da comunidade
- Crie atribuições de função para diferentes escopos com o Bicep, por Barbara Forbes