Atribuir funções do Azure usando a API REST

O RBAC (controle de acesso baseado em função) do Azure é o sistema de autorização usado para gerenciar o acesso aos recursos no Azure. Para conceder acesso, você atribui funções a usuários, grupos, entidades de serviço ou identidades gerenciadas em um determinado escopo. Este artigo descreve como atribuir funções usando a API REST.

Pré-requisitos

Para atribuir funções do Azure, você precisa ter:

Você deve usar as versões a seguir:

  • 2015-07-01 ou posterior para atribuir uma função do Azure
  • 2018-09-01-preview ou posterior para atribuir uma função do Azure a uma nova entidade de serviço

Para obter mais informações, consulte as Versões da API das APIs REST do RBAC do Azure.

Atribuir uma função do Azure

Para criar uma atribuição de função, use a Atribuições de Função - Criar da a API REST e especifique a entidade de segurança, definição de função e escopo. Para chamar essa API, você deve ter acesso à ação, como Administrador de Microsoft.Authorization/roleAssignments/write Controle de Acesso Baseado em Função.

  1. Use a API REST Definições de Função - Listar ou veja as Funções internas para obter o identificador da definição de função que você deseja atribuir.

  2. Use uma ferramenta GUID para gerar um identificador exclusivo que será usado para atribuição de função personalizada. O identificador tem o formato: 00000000-0000-0000-0000-000000000000

  3. Comece com a solicitação e corpo a seguir:

    PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}?api-version=2022-04-01
    
    {
      "properties": {
        "roleDefinitionId": "/{scope}/providers/Microsoft.Authorization/roleDefinitions/{roleDefinitionId}",
        "principalId": "{principalId}"
      }
    }
    
  4. Dentro do URI, substitua {scope} pelo escopo da atribuição de função.

    Escopo Tipo
    providers/Microsoft.Management/managementGroups/{groupId1} Grupo de gerenciamento
    subscriptions/{subscriptionId1} Subscription
    subscriptions/{subscriptionId1}/resourceGroups/myresourcegroup1 Resource group
    subscriptions/{subscriptionId1}/resourceGroups/myresourcegroup1/providers/microsoft.web/sites/mysite1 Recurso

    No exemplo anterior, microsoft.web é um provedor de recursos que se refere a uma instância do Serviço de Aplicativo. Da mesma forma, você pode usar qualquer outro provedor de recursos e especificar o escopo. Para obter mais informações, consulte provedores de recursos e tipos do Azure e operações do provedor de recursos do Azurecom suporte.

  5. Substitua {roleAssignmentId} pelo identificador GUID da atribuição de função.

  6. No corpo da solicitação, substitua {scope} pelo mesmo escopo que no URI.

  7. Substitua {roleDefinitionId} pelo identificador de definição da função.

  8. Substitua {principalId} com o identificador de objeto do usuário, grupo ou entidade de serviço que receberá a função.

A solicitação e o corpo a seguir atribui a função de leitor de backup a um usuário no escopo da assinatura:

PUT https://management.azure.com/subscriptions/{subscriptionId1}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId1}?api-version=2022-04-01
{
  "properties": {
    "roleDefinitionId": "/subscriptions/{subscriptionId1}/providers/Microsoft.Authorization/roleDefinitions/a795c7a0-d4a2-40c1-ae25-d81f01202912",
    "principalId": "{objectId1}"
  }
}

O texto a seguir mostra um exemplo da saída:

{
    "properties": {
        "roleDefinitionId": "/subscriptions/{subscriptionId1}/providers/Microsoft.Authorization/roleDefinitions/a795c7a0-d4a2-40c1-ae25-d81f01202912",
        "principalId": "{objectId1}",
        "principalType": "User",
        "scope": "/subscriptions/{subscriptionId1}",
        "condition": null,
        "conditionVersion": null,
        "createdOn": "2022-05-06T23:55:23.7679147Z",
        "updatedOn": "2022-05-06T23:55:23.7679147Z",
        "createdBy": null,
        "updatedBy": "{updatedByObjectId1}",
        "delegatedManagedIdentityResourceId": null,
        "description": null
    },
    "id": "/subscriptions/{subscriptionId1}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId1}",
    "type": "Microsoft.Authorization/roleAssignments",
    "name": "{roleAssignmentId1}"
}

Nova entidade de serviço

Se você criar uma entidade de serviço e tentar atribuir uma função imediatamente a essa entidade de serviço, essa atribuição de função poderá falhar em alguns casos. Por exemplo, se você criar uma identidade gerenciada e tentar atribuir uma função a ela, a atribuição de função poderá falhar. Provavelmente, o motivo dessa falha é um atraso de replicação. A entidade de serviço é criada em uma região; no entanto, a atribuição de função pode ocorrer em uma região diferente que ainda não tenha replicado a entidade de serviço.

Para resolver esse cenário, use a API REST de Atribuições de função – Criar e defina a propriedade principalType como ServicePrincipal. Além disso, defina a apiVersion como 2018-09-01-preview ou posterior. 2022-04-01 é a primeira versão estável.

PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}?api-version=2022-04-01
{
  "properties": {
    "roleDefinitionId": "/{scope}/providers/Microsoft.Authorization/roleDefinitions/{roleDefinitionId}",
    "principalId": "{principalId}",
    "principalType": "ServicePrincipal"
  }
}

Próximas etapas