DEV Community

Luiz Bernardo
Luiz Bernardo

Posted on

Como criar uma função personalizada para RBAC

Função de diretório e RBAC

Ao usar o Azure AD, muitas pessoas ficam confusas porque não entendem a diferença entre funções de diretório e RBAC (Controle de Acesso Baseado em Recursos), falo por mim e minha dificuldades de forma generalista (beneficios de escrever esse post :p).

As funções de diretório são configurações de privilégios para recursos do Azure AD (usuários, grupos, acesso condicional etc. nas entradas do Azure Active Directory no portal do Azure), enquanto o RBAC está além do escopo do Azure AD, como a Rede do Azure.) É a configuração de permissão usar.

Não vou entrar em detalhes aqui, mas os seguintes blogs da Microsoft são muito fáceis de entender. https://docs.microsoft.com/pt-br/azure/role-based-access-control/overview

Eu quero usar o RBAC de forma mais flexível

RBAC tem funções padrão como co-administrador, proprietário, etc. (atribuições de funções adicionais na tela abaixo)

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/62u7uu1pli6fvcikytps.png

No entanto, em alguns casos, a função padrão é muito poderosa ou isso seria perfeito se eu pudesse fazer isso com um teste. Acho que existem algumas situações como essa. E ai que entra as funções personalizadas.

Bora no passo a paso por que e complicadinho ><

Etapa 1. Entenda como é a função personalizada

Antes de configurar uma função personalizada, vamos primeiro entender como o RBAC é configurado.
Vamos verificar as funções padrão das configurações de co-administrador e colaborador de rede no Powershell.

Get-AzRoleDefinition | where Name -eq "Contributor"

Name             : Contributor
Id               : b24988ac-6180-42a0-ab88-20f7382dd24c
IsCustom         : False
Description      : Lets you manage everything except access to resources.
Actions          : {*}
NotActions       : {Microsoft.Authorization/*/Delete, Microsoft.Authorization/*/Write, Microsoft.Authorization/elevateAccess/Action, Microsoft.Blueprint/blueprintAssignments/write...}
DataActions      : {}
NotDataActions   : {}
AssignableScopes : {/}
Enter fullscreen mode Exit fullscreen mode
Get-AzRoleDefinition | where Name -eq "Network Contributor"

Name             : Network Contributor
Id               : 4d97b98b-1d4f-4787-a291-c67834d212e7
IsCustom         : False
Description      : Lets you manage networks, but not access to them.
Actions          : {Microsoft.Authorization/*/read, Microsoft.Insights/alertRules/*, Microsoft.Network/*, Microsoft.ResourceHealth/availabilityStatuses/read...}
NotActions       : {}
DataActions      : {}
NotDataActions   : {}
AssignableScopes : {/}
Enter fullscreen mode Exit fullscreen mode

Como você pode ver, o escopo definido em Actions/NotActions é a entidade do RBAC.

Para co-administradores, Actions define todos os escopos com [*] e NotActions define escopos que não podem ser manipulados, pois este é um privilégio bastante forte .

Os coautores da rede, por outro lado, são apenas funções configuráveis relacionadas à rede, portanto, Actions define apenas um escopo que pode ser aplicado.

As funções personalizadas, portanto, fornecem configurações de permissão flexíveis, definindo as ações que você deseja (ou não) executar no escopo de Ações (NotActions).

Etapa 2. Definido de fato

Vamos definir uma função personalizada.

Desta vez, criaremos uma função personalizada que atenda aos requisitos a seguir.

  • Desejo evitar a visualização de informações relacionadas à assinatura, incluindo informações de faturamento.
  • Quero ver/alterar permissão (quero evitar a exclusão).
  • Eu quero conceder o acima em unidades de grupos de recursos especificados em vez de recursos individuais.

Aplicar as condições acima para Actions/NotActions dá:

// Adicionado para habilitar operações básicas

Ações: Criação e gerenciamento de todos os tipos de recursos
*

// Adicionado para evitar a visualização de informações de faturamento

Não ações: ler informações de faturamento
Microsoft.Billing / / ler
Microsoft.Commerce / / ler
Microsoft.Consumption / * / ler

// Adicionado para tornar a exclusão impossível

Não ações: Excluir tudo

  • / excluir

É uma configuração para impedir a exibição de informações de faturamento, mas aqui me referi ao documento público da Microsoft.
Há uma regra padrão chamada Leitor de cobrança, mas esta função adiciona a seguinte configuração a Ações para ler informações de cobrança, portanto, adicione esta configuração a NotActions. Se você fizer isso, não poderá ver suas informações de cobrança.

Funções integradas para recursos do Azure
https://docs.microsoft.com/en-us/azure/role-based-access-control/built-in-roles

Leitura de informações de faturamento
Billing Reader
Microsoft.Billing / / read
Microsoft.Commerce / / read
Microsoft.Consumption / * / read

Em seguida, crie um arquivo JSON no Bloco de notas.

{
  "Name": "Test Custom Role",
  "Id": null,
  "IsCustom": true,
  "Description": "Test Custom Role",
  "Actions": [
    "*"
  ],
  "NotActions": [
    "*/delete", 
    "Microsoft.Billing/*/read", 
    "Microsoft.Commerce/*/read", 
    "Microsoft.Consumption/*/read", 
  ],
  "AssignableScopes": [
    "/subscriptions/e55e4aa8-889c-4424-a88d-7f5XXXXXXX20/resourceGroups/test"
  ]
}
Enter fullscreen mode Exit fullscreen mode

Insira qualquer descrição para Nome e Descrição.Defina IsCustome como true e Actions / NotActions de acordo com seus requisitos.

A configuração de assinaturas especifica o ID de assinatura que você está usando. Normalmente, está OK se você definir da seguinte maneira.

"/subscriptions/e55e4aa8-889c-4424-a88d-7f5XXXXXXX20"
Enter fullscreen mode Exit fullscreen mode

Desta vez, há um requisito [desejo conceder na unidade de grupo de recursos especificada, não em recursos individuais], então especifique como segue. É definido como uma função customizada que está disponível apenas no grupo de recursos denominado "teste".

Se desejar disponibilizá-lo para outros grupos de recursos, separe-os com vírgulas para aumentar a definição.

"/subscriptions/e55e4aa8-889c-4424-a88d-7f5XXXXXXX20/resourceGroups/test"
Enter fullscreen mode Exit fullscreen mode

Especifique o arquivo JSON preparado com o Powershell e execute-o.

New-AzRoleDefinition -InputFile "C:\Users\admin\Desktop\customrole.json"

Name             : Test Custom Role
Id               : e6fabc8a-891a-4ae9-9ffd-21cb7b5798a7
IsCustom         : True
Description      : Test Custom Role
Actions          : {*}
NotActions       : {*/delete, Microsoft.Billing/*/read, Microsoft.Commerce/*/read, Microsoft.Consumption/*/read...}
DataActions      : {}
NotDataActions   : {}
AssignableScopes : {/subscriptions/e55e4aa8-889c-4424-a88d-7f5XXXXXXXX20/resourceGroups/test}
Enter fullscreen mode Exit fullscreen mode

Como atualizar uma função personalizada

Atualizar uma função personalizada é o mesmo que criá-la.

Está tudo bem se você executar o comando Set-azureAzRoleDefinition conforme mostrado abaixo

Set-azureAzRoleDefinition -InputFile "C:\Users\nasekigu\Desktop\test.json"
Enter fullscreen mode Exit fullscreen mode

O conteúdo do JSON é quase o mesmo de quando foi criado.

A única diferença é que você precisa especificar o Id da função personalizada que você criou para "Id".

Em Actions/NotActions, descreva todos os escopos a serem usados após a atualização.

Observe que se você inserir apenas um novo escopo, o escopo anterior à configuração será excluído

{
  "Name": "Test",
  "Id": "40a919ec-0571-439d-aaec-XXXX510357",
  "IsCustom": true,
Enter fullscreen mode Exit fullscreen mode

Vlw flw

Discussion (0)