Funções personalizadas Azure

Importante

A adição de um grupo de gestão AssignableScopes está atualmente em pré-visualização. Esta versão de pré-visualização é disponibiliza sem um contrato de nível de serviço e não é recomendada para cargas de trabalho de produção. Algumas funcionalidades poderão não ser suportadas ou poderão ter capacidades limitadas. Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.

Se os papéis incorporados do Azure não corresponderem às necessidades específicas da sua organização, pode criar os seus próprios papéis personalizados. Tal como as funções incorporadas, pode atribuir funções personalizadas aos utilizadores, grupos e diretores de serviços no grupo de gestão (apenas em pré-visualização), na subscrição e nos âmbitos do grupo de recursos.

As funções personalizadas podem ser partilhadas entre subscrições que confiam no mesmo diretório AD Azure. Há um limite de 5.000 funções personalizadas por diretório. (Para a Azure Alemanha e Azure China 21Vianet, o limite é de 2.000 papéis personalizados.) As funções personalizadas podem ser criadas utilizando o portal Azure, Azure PowerShell, Azure CLI ou a API REST.

Passos para criar um papel personalizado

Aqui estão os passos básicos para criar um papel personalizado.

  1. Determine as permissões que precisa.

    Quando cria um papel personalizado, precisa de saber as ações que estão disponíveis para definir as suas permissões. Normalmente, começa-se com um papel incorporado existente e depois modifica-se para as suas necessidades. Irá adicionar as ações à Actions ou NotActions propriedades da definição de função. Se tiver ações de dados, irá adicioná-las às DataActions NotDataActions propriedades ou propriedades.

    Para mais informações, consulte a secção seguinte Como determinar as permissões necessárias.

  2. Decida como quer criar o papel personalizado.

    Pode criar funções personalizadas utilizando o portal Azure, Azure PowerShell, Azure CLIou a API REST.

  3. Crie o papel personalizado.

    A maneira mais fácil é usar o portal Azure. Para obter etapas sobre como criar um papel personalizado utilizando o portal Azure, consulte criar ou atualizar funções personalizadas Azure utilizando o portal Azure.

  4. Teste o papel personalizado.

    Uma vez que tenha o seu papel personalizado, você tem que testá-lo para verificar se funciona como você espera. Se precisar de fazer ajustes mais tarde, pode atualizar a função personalizada.

Como determinar as permissões de que precisa

O Azure tem milhares de permissões que pode potencialmente incluir no seu papel personalizado. Aqui estão alguns métodos que podem ajudá-lo a determinar as permissões que pretende adicionar à sua função personalizada:

Exemplo de função personalizada

O seguinte mostra como é um papel personalizado como exibido usando Azure PowerShell no formato JSON. Esta função personalizada pode ser usada para monitorizar e reiniciar máquinas virtuais.

{
  "Name": "Virtual Machine Operator",
  "Id": "88888888-8888-8888-8888-888888888888",
  "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": [],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": [
    "/subscriptions/{subscriptionId1}",
    "/subscriptions/{subscriptionId2}",
    "/providers/Microsoft.Management/managementGroups/{groupId1}"
  ]
}

O seguinte mostra o mesmo papel personalizado que o Azure CLI.

[
  {
    "assignableScopes": [
      "/subscriptions/{subscriptionId1}",
      "/subscriptions/{subscriptionId2}",
      "/providers/Microsoft.Management/managementGroups/{groupId1}"
    ],
    "description": "Can monitor and restart virtual machines.",
    "id": "/subscriptions/{subscriptionId1}/providers/Microsoft.Authorization/roleDefinitions/88888888-8888-8888-8888-888888888888",
    "name": "88888888-8888-8888-8888-888888888888",
    "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"
  }
]

Propriedades de função personalizadas

A tabela seguinte descreve o que as propriedades de função personalizada significam.

Propriedade Necessário Tipo Descrição
Name
roleName
Sim String O nome de exibição do papel personalizado. Embora uma definição de papel seja um grupo de gestão ou recurso de nível de subscrição, uma definição de papel pode ser usada em várias subscrições que partilham o mesmo diretório AD Azure. Este nome de exibição deve ser único no âmbito do diretório AZure AD. Pode incluir letras, números, espaços e caracteres especiais. O número máximo de caracteres é de 128.
Id
name
Sim String A identificação única do papel personalizado. Para Azure PowerShell e Azure CLI, este ID é gerado automaticamente quando cria um novo papel.
IsCustom
roleType
Sim String Indica se este é um papel personalizado. Definir para true ou CustomRole para papéis personalizados. Definir para false ou BuiltInRole para papéis embutidos.
Description
description
Sim String A descrição do papel personalizado. Pode incluir letras, números, espaços e caracteres especiais. O número máximo de caracteres é de 1024.
Actions
actions
Yes Corda[] Uma série de cordas que especifica as ações do plano de controlo que o papel permite ser executado. Para mais informações, consulte Ações.
NotActions
notActions
No Corda[] Uma série de cordas que especifica as ações do plano de controlo que são excluídas do permitido Actions . Para mais informações, consulte NotActions.
DataActions
dataActions
No Corda[] Uma série de cadeias que especifica as ações do plano de dados que o papel permite ser realizado aos seus dados dentro desse objeto. Se criar uma função personalizada DataActions com, essa função não pode ser atribuída no âmbito do grupo de gestão. Para obter mais informações, consulte DataActions.
NotDataActions
notDataActions
No Corda[] Uma série de cordas que especifica as ações do plano de dados que são excluídas do permitido DataActions . Para obter mais informações, consulte NotDataActions.
AssignableScopes
assignableScopes
Yes Corda[] Uma variedade de cordas que especifica os âmbitos que o papel personalizado está disponível para atribuição. Só pode definir um grupo de gestão num AssignableScopes papel personalizado. A adição de um grupo de gestão AssignableScopes está atualmente em pré-visualização. Para mais informações, consulte Os "AtribuableScopes".

As cordas da permissão são insensíveis. Ao criar as suas funções personalizadas, a convenção corresponde ao caso que vê para permissões nas operações do fornecedor de recursos Azure.

Permissões wildcard

Actions, NotActions e DataActions suporte NotDataActions wildcards para definir * permissões. Um wildcard * () estende uma permissão a tudo o que corresponde à cadeia de ação que fornece. Por exemplo, suponha que queria adicionar todas as permissões relacionadas com a Azure Cost Management e exportações. Pode adicionar todas estas cordas de ação:

Microsoft.CostManagement/exports/action
Microsoft.CostManagement/exports/read
Microsoft.CostManagement/exports/write
Microsoft.CostManagement/exports/delete
Microsoft.CostManagement/exports/run/action

Em vez de adicionar todas estas cordas, pode adicionar uma corda wildcard. Por exemplo, a seguinte corda wildcard é equivalente às cinco cordas anteriores. Isto incluiria também eventuais futuras autorizações de exportação que possam ser adicionadas.

Microsoft.CostManagement/exports/*

Quem pode criar, eliminar, atualizar ou ver uma função personalizada

Tal como as funções AssignableScopes incorporadas, a propriedade especifica os âmbitos que o papel está disponível para atribuição. A AssignableScopes propriedade para um papel personalizado também controla quem pode criar, eliminar, atualizar ou ver o papel personalizado.

Tarefa Ação Descrição
Criar/eliminar uma função personalizada Microsoft.Authorization/ roleDefinitions/write Os utilizadores que recebem esta ação em todo AssignableScopes o papel personalizado podem criar (ou eliminar) funções personalizadas para utilização nesses âmbitos. Por exemplo, Proprietários e Administradores de Acesso ao Utilizador de grupos de gestão, subscrições e grupos de recursos.
Atualizar uma função personalizada Microsoft.Authorization/ roleDefinitions/write Os utilizadores que recebem esta ação em toda AssignableScopes a função personalizada podem atualizar funções personalizadas nesses âmbitos. Por exemplo, Proprietários e Administradores de Acesso ao Utilizador de grupos de gestão, subscrições e grupos de recursos.
Ver um papel personalizado Microsoft.Authorization/ roleDefinitions/read Os utilizadores que recebem esta ação num âmbito podem visualizar as funções personalizadas que estão disponíveis para atribuição nesse âmbito. Todas as funções incorporadas permitem que as funções personalizadas estejam disponíveis para atribuição.

Limites de função personalizados

A lista que se segue descreve os limites para funções personalizadas.

  • Cada diretório pode ter até 5000 funções personalizadas.
  • AZure Germany e Azure China 21Vianet podem ter até 2000 funções personalizadas para cada diretório.
  • Não é possível definir AssignableScopes o âmbito da raiz "/" ().
  • Não é possível utilizar wildcards * em AssignableScopes . Esta restrição wildcard ajuda a garantir que um utilizador não pode potencialmente obter acesso a um âmbito atualizando a definição de função.
  • Só pode definir um grupo de gestão num AssignableScopes papel personalizado. A adição de um grupo de gestão AssignableScopes está atualmente em pré-visualização.
  • Só pode ter um wildcard numa corda de ação.
  • As funções DataActions personalizadas com as quais não podem ser atribuídas no âmbito do grupo de gestão.
  • O Gestor de Recursos Azure não valida a existência do grupo de gestão no âmbito atribuível da definição de função.

Para obter mais informações sobre funções personalizadas e grupos de gestão, veja o que são os grupos de gestão Azure?

Formatos de entrada e saída

Para criar uma função personalizada utilizando a linha de comando, normalmente utiliza o JSON para especificar as propriedades que pretende para o papel personalizado. Dependendo das ferramentas que utiliza, os formatos de entrada e saída serão ligeiramente diferentes. Esta secção lista os formatos de entrada e saída dependendo da ferramenta.

Azure PowerShell

Para criar uma função personalizada utilizando Azure PowerShell, deve fornecer a seguinte entrada.

{
  "Name": "",
  "Description": "",
  "Actions": [],
  "NotActions": [],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": []
}

Para atualizar uma função personalizada utilizando Azure PowerShell, deve fornecer a seguinte entrada. Note que a Id propriedade foi adicionada.

{
  "Name": "",
  "Id": "",
  "Description": "",
  "Actions": [],
  "NotActions": [],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": []
}

O seguinte mostra um exemplo da saída quando lista uma função personalizada utilizando Azure PowerShell e o comando ConvertTo-Json.

{
  "Name": "",
  "Id": "",
  "IsCustom": true,
  "Description": "",
  "Actions": [],
  "NotActions": [],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": []
}

CLI do Azure

Para criar ou atualizar uma função personalizada utilizando o Azure CLI, tem de fornecer a seguinte entrada. Este formato é o mesmo quando cria uma função personalizada utilizando Azure PowerShell.

{
  "Name": "",
  "Description": "",
  "Actions": [],
  "NotActions": [],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": []
}

O seguinte mostra um exemplo da saída quando lista uma função personalizada utilizando o Azure CLI.

[
  {
    "assignableScopes": [],
    "description": "",
    "id": "",
    "name": "",
    "permissions": [
      {
        "actions": [],
        "dataActions": [],
        "notActions": [],
        "notDataActions": []
      }
    ],
    "roleName": "",
    "roleType": "CustomRole",
    "type": "Microsoft.Authorization/roleDefinitions"
  }
]

API REST

Para criar ou atualizar uma função personalizada utilizando a API REST, tem de fornecer a seguinte entrada. Este formato é o mesmo formato que é gerado quando cria uma função personalizada utilizando o portal Azure.

{
  "properties": {
    "roleName": "",
    "description": "",
    "assignableScopes": [],
    "permissions": [
      {
        "actions": [],
        "notActions": [],
        "dataActions": [],
        "notDataActions": []
      }
    ]
  }
}

O seguinte mostra um exemplo da saída quando lista uma função personalizada utilizando a API REST.

{
    "properties": {
        "roleName": "",
        "type": "CustomRole",
        "description": "",
        "assignableScopes": [],
        "permissions": [
            {
                "actions": [],
                "notActions": [],
                "dataActions": [],
                "notDataActions": []
            }
        ],
        "createdOn": "",
        "updatedOn": "",
        "createdBy": "",
        "updatedBy": ""
    },
    "id": "",
    "type": "Microsoft.Authorization/roleDefinitions",
    "name": ""
}

Passos seguintes