Criar ou atualizar funções personalizadas do Azure usando a CLI do Azure

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

Para obter um tutorial passo a passo sobre como criar uma função personalizada, confira Tutorial: Criar uma função personalizada do Azure usando o CLI do Azure.

Pré-requisitos

Para criar funções personalizadas, você precisará:

Listar funções personalizadas

Para listar as funções personalizadas disponíveis para atribuição, use a lista de definições de função az. Os exemplos a seguir listam todas as funções personalizadas na assinatura atual.

az role definition list --custom-role-only true --output json --query '[].{roleName:roleName, roleType:roleType}'
[
  {
    "roleName": "My Management Contributor",
    "type": "CustomRole"
  },
  {
    "roleName": "My Service Reader Role",
    "type": "CustomRole"
  },
  {
    "roleName": "Virtual Machine Operator",
    "type": "CustomRole"
  }
]

Listar uma definição de função personalizada

Para listar uma definição de função personalizada, use az role definition list. Esse comando é o mesmo que você usaria para uma função interna.

az role definition list --name {roleName}

O exemplo a seguir exclui a função personalizada Operador de Máquina Virtual:

az role definition list --name "Virtual Machine Operator"
[
  {
    "assignableScopes": [
      "/subscriptions/{subscriptionId}"
    ],
    "description": "Can monitor and restart virtual machines.",
    "id": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/00000000-0000-0000-0000-000000000000",
    "name": "00000000-0000-0000-0000-000000000000",
    "permissions": [
      {
        "actions": [
          "Microsoft.Storage/*/read",
          "Microsoft.Network/*/read",
          "Microsoft.Compute/*/read",
          "Microsoft.Compute/virtualMachines/start/action",
          "Microsoft.Compute/virtualMachines/restart/action",
          "Microsoft.Authorization/*/read",
          "Microsoft.ResourceHealth/availabilityStatuses/read",
          "Microsoft.Resources/subscriptions/resourceGroups/read",
          "Microsoft.Insights/alertRules/*",
          "Microsoft.Insights/diagnosticSettings/*",
          "Microsoft.Support/*"
        ],
        "dataActions": [],
        "notActions": [],
        "notDataActions": []
      }
    ],
    "roleName": "Virtual Machine Operator",
    "roleType": "CustomRole",
    "type": "Microsoft.Authorization/roleDefinitions"
  }
]

A exemplo a seguir lista as ações da função Colaborador da Máquina Virtual:

az role definition list --name "Virtual Machine Operator" --output json --query '[].permissions[0].actions'
[
  [
    "Microsoft.Storage/*/read",
    "Microsoft.Network/*/read",
    "Microsoft.Compute/*/read",
    "Microsoft.Compute/virtualMachines/start/action",
    "Microsoft.Compute/virtualMachines/restart/action",
    "Microsoft.Authorization/*/read",
    "Microsoft.ResourceHealth/availabilityStatuses/read",
    "Microsoft.Resources/subscriptions/resourceGroups/read",
    "Microsoft.Insights/alertRules/*",
    "Microsoft.Insights/diagnosticSettings/*",
    "Microsoft.Support/*"
  ]
]

Criar uma função personalizada

Para criar um arquivo personalizado, use criar definição de função az. A definição de função pode ser uma descrição de JSON ou um caminho para um arquivo que contém uma descrição de JSON.

az role definition create --role-definition {roleDefinition}

O exemplo a seguir cria uma função personalizada denominada Operador de Máquina Virtual. Essa função personalizada atribui acesso a todas as operações de leitura dos provedores de recursos Microsoft.Compute, Microsoft.Storage e Microsoft.Network, além de atribuir acesso para iniciar, reiniciar e monitorar máquinas virtuais. Essa função personalizada pode ser usada em duas assinaturas. Este exemplo utiliza um arquivo JSON como entrada.

vmoperator.json

{
  "Name": "Virtual Machine Operator",
  "IsCustom": true,
  "Description": "Can monitor and restart virtual machines.",
  "Actions": [
    "Microsoft.Storage/*/read",
    "Microsoft.Network/*/read",
    "Microsoft.Compute/*/read",
    "Microsoft.Compute/virtualMachines/start/action",
    "Microsoft.Compute/virtualMachines/restart/action",
    "Microsoft.Authorization/*/read",
    "Microsoft.ResourceHealth/availabilityStatuses/read",
    "Microsoft.Resources/subscriptions/resourceGroups/read",
    "Microsoft.Insights/alertRules/*",
    "Microsoft.Support/*"
  ],
  "NotActions": [

  ],
  "AssignableScopes": [
    "/subscriptions/{subscriptionId1}",
    "/subscriptions/{subscriptionId2}"
  ]
}
az role definition create --role-definition ~/roles/vmoperator.json

Atualizar uma função personalizada

Para atualizar uma função personalizada, primeiro use lista de definições de função az para recuperar a definição de função. Depois, faça as alterações desejadas na definição da função. Por fim, use atualizar definição de função az para salvar a definição de função atualizada.

az role definition update --role-definition {roleDefinition}

O exemplo a seguir adiciona a operação Microsoft.Insights/diagnosticSettings/ a Actions e adiciona um grupo de gerenciamento a AssignableScopes na função personalizada de Operador de Máquina Virtual.

vmoperator.json

{
  "Name": "Virtual Machine Operator",
  "IsCustom": true,
  "Description": "Can monitor and restart virtual machines.",
  "Actions": [
    "Microsoft.Storage/*/read",
    "Microsoft.Network/*/read",
    "Microsoft.Compute/*/read",
    "Microsoft.Compute/virtualMachines/start/action",
    "Microsoft.Compute/virtualMachines/restart/action",
    "Microsoft.Authorization/*/read",
    "Microsoft.ResourceHealth/availabilityStatuses/read",
    "Microsoft.Resources/subscriptions/resourceGroups/read",
    "Microsoft.Insights/alertRules/*",
    "Microsoft.Insights/diagnosticSettings/*",
    "Microsoft.Support/*"
  ],
  "NotActions": [

  ],
  "AssignableScopes": [
    "/subscriptions/{subscriptionId1}",
    "/subscriptions/{subscriptionId2}",
    "/providers/Microsoft.Management/managementGroups/marketing-group"
  ]
}
az role definition update --role-definition ~/roles/vmoperator.json

Excluir uma função personalizada

  1. Remova as atribuições de função que usam a função personalizada. Para obter mais informações, confira Localizar atribuições de função para excluir uma função personalizada.

  2. Use az role definition delete para excluir a função personalizada. Para especificar a função a ser excluída, use o nome da função ou a ID de função. Para determinar a ID de função, use lista de definições de função az.

    az role definition delete --name {roleNameOrId}
    

    O exemplo a seguir exclui a função personalizada Operador de Máquina Virtual.

    az role definition delete --name "Virtual Machine Operator"
    

Próximas etapas