Compartilhar via


Criar ou atualizar funções personalizadas do Azure usando Bicep

Se as funções internas do Azure não atenderem às necessidades específicas da sua organização, você poderá criar funções personalizadas próprias. Este artigo descreve como criar ou atualizar uma função personalizada usando Bicep.

O Bicep é um DSL (linguagem específica de domínio) que usa sintaxe declarativa para implantar recursos do Azure. Ele fornece sintaxe concisa, segurança de tipos confiável e suporte para reutilização de código. O Bicep oferece a melhor experiência de criação para suas soluções de infraestrutura como código no Azure.

Para criar uma função personalizada, você especifica um nome de função, permissões de função e onde ela pode ser usada. Neste artigo, você cria uma função chamada de Função Personalizada – Leitor RG com permissões de recurso que podem ser atribuídas a um escopo de assinatura ou inferior.

Pré-requisitos

Para criar uma função personalizada, você deve ter permissões para criar funções personalizadas, como Administrador de Acesso do Usuário.

É necessário ter uma assinatura ativa do Azure. Se não tiver uma, crie uma conta gratuita antes de começar.

Examinar o arquivo Bicep

O arquivo Bicep usado neste artigo é proveniente dos Modelos de Início Rápido do Azure. O arquivo Bicep tem quatro parâmetros e uma seção de recursos. Os quatro parâmetros são:

  • Matriz de ações com um valor padrão de ["Microsoft.Resources/subscriptions/resourceGroups/read"].
  • Matriz de notActions com um valor padrão vazio.
  • Nome da função com um valor padrão de Custom Role - RG Reader.
  • Descrição da função com um valor padrão de Subscription Level Deployment of a Role Definition.

O escopo onde essa função personalizada pode ser atribuída é definido como a assinatura atual.

Uma função personalizada requer uma ID exclusiva. A ID pode ser gerada com a função guid(). Como uma função personalizada também requer um nome de exibição exclusivo para o locatário, você pode usar o nome da função como um parâmetro para a função guid() para criar um GUID determinístico. Um GUID determinístico será útil se mais tarde você precisar atualizar a função personalizada usando o mesmo arquivo Bicep.

targetScope = 'subscription'

@description('Array of actions for the roleDefinition')
param actions array = [
  'Microsoft.Resources/subscriptions/resourceGroups/read'
]

@description('Array of notActions for the roleDefinition')
param notActions array = []

@description('Friendly name of the role definition')
param roleName string = 'Custom Role - RG Reader'

@description('Detailed description of the role definition')
param roleDescription string = 'Subscription Level Deployment of a Role Definition'

var roleDefName = guid(roleName)

resource roleDef 'Microsoft.Authorization/roleDefinitions@2022-04-01' = {
  name: roleDefName
  properties: {
    roleName: roleName
    description: roleDescription
    type: 'customRole'
    permissions: [
      {
        actions: actions
        notActions: notActions
      }
    ]
    assignableScopes: [
      subscription().id
    ]
  }
}

O recurso definido no arquivo Bicep é:

Implante o arquivo Bicep

  1. Salve o arquivo Bicep como main.bicep em seu computador local.

  2. Crie uma variável chamada myActions com as ações para roleDefinition.

    $myActions='["Microsoft.Resources/subscriptions/resourceGroups/read"]'
    
  3. Para implantar o arquivo Bicep, use a CLI do Azure ou o Azure PowerShell.

    az deployment sub create --location eastus --name customRole --template-file ./main.bicep --parameters actions=$myActions
    

Quando a implantação for concluída, você deverá ver uma mensagem indicando que ela foi bem-sucedida.

Examinar os recursos implantados

Use o portal do Azure, a CLI do Azure ou o Azure PowerShell para verificar se a função personalizada foi criada.

az role definition list --name "Custom Role - RG Reader"

Atualizar uma função personalizada

Semelhante à criação de uma função personalizada, é possível atualizar uma função personalizada existente usando Bicep. Para atualizar uma função personalizada, você precisa especificar a função que deseja atualizar. Se você criou anteriormente a função personalizada no Bicep com uma ID de função exclusiva que é determinística, você pode usar o mesmo arquivo Bicep e especificar a função personalizada usando apenas o nome de exibição.

  1. Especifique as ações atualizadas.

    $myActions='["Microsoft.Resources/resources/read","Microsoft.Resources/subscriptions/resourceGroups/read"]'
    
  2. Use a CLI do Azure ou o Azure PowerShell para atualizar a função personalizada.

    az deployment sub create --location eastus --name customrole --template-file ./main.bicep --parameters actions=$myActions roleName="Custom Role - RG Reader"
    

    Observação

    Pode levar vários minutos para que a função personalizada atualizada seja propagada.

Limpar os recursos

Quando a função personalizada não for mais necessária, use o portal do Azure, a CLI do Azure ou o Azure PowerShell para removê-la.

az role definition delete --name "Custom Role - RG Reader"

Próximas etapas