Compartilhar via


Adicionar ou editar as condições de atribuição de função do Azure usando a API REST

Uma condição de atribuição de função do Azure é uma verificação adicional que você pode adicionar opcionalmente à atribuição de função para fornecer um controle de acesso mais refinado. Por exemplo, você pode adicionar uma condição que exige que um objeto tenha uma marca específica para ler o objeto. Este artigo descreve como adicionar, editar, listar ou excluir condições das atribuições de função usando a API REST.

Pré-requisitos

Você deve usar as versões a seguir:

  • 2020-03-01-preview ou posterior
  • 2020-04-01-preview ou posterior se você quer utilizar a propriedade description para as atribuições de função
  • 2022-04-01 é a primeira versão estável

Para obter mais informações sobre os pré-requisitos para adicionar ou editar condições de atribuição de função, confira Pré-requisitos das condições.

Adicionar uma condição

Para adicionar uma condição de atribuição de função, use a API REST Atribuições de Função – Criar. Atribuições de Função – Criar inclui os parâmetros a seguir relacionados às condições.

Parâmetro Tipo Descrição
condition Cadeia de caracteres Condição sob a qual o usuário pode receber permissão.
conditionVersion String Versão da sintaxe da condição. Se condition for especificado sem conditionVersion, a versão será definida como o valor padrão 2.0.

Use a solicitação e o corpo seguintes:

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}",
        "condition": "{condition}",
        "conditionVersion": "2.0",
        "description": "{description}"
    }
}

O exemplo a seguir mostra como atribuir a função de Leitor de Dados do Blob do Armazenamento com uma condição. A condição verifica se o nome do contêiner é igual a 'blobs-example-container'.

PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}?api-version=2022-04-01
{
    "properties": {
        "roleDefinitionId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
        "principalId": "{principalId}",
        "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'))",
        "conditionVersion": "2.0",
        "description": "Read access if container name equals blobs-example-container"
    }
}

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

{
    "properties": {
        "roleDefinitionId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
        "principalId": "{principalId}",
        "principalType": "User",
        "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}",
        "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'))",
        "conditionVersion": "2.0",
        "createdOn": "2022-07-20T06:20:44.0205560Z",
        "updatedOn": "2022-07-20T06:20:44.2955371Z",
        "createdBy": null,
        "updatedBy": "{updatedById}",
        "delegatedManagedIdentityResourceId": null,
        "description": "Read access if container name equals blobs-example-container"
    },
    "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
    "type": "Microsoft.Authorization/roleAssignments",
    "name": "{roleAssignmentId}"
}

Editar uma condição

Para editar uma condição de atribuição de função existente, use a mesma API REST Atribuições de Função – Criar que foi usada para adicionar a condição de atribuição de função. Veja a seguir um exemplo de JSON em que condition e description são atualizados. Somente as propriedades condition, conditionVersion e description podem ser editadas. Você precisa especificar as outras propriedades para corresponder à atribuição de função existente.

PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}?api-version=2022-04-01
{
    "properties": {
        "roleDefinitionId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
        "principalId": "{principalId}",
        "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container' OR @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container2'))",
        "conditionVersion": "2.0",
        "description": "Read access if container name equals blobs-example-container or blobs-example-container2"
    }
}

Listar uma condição

Para listar uma condição de atribuição de função, use a API REST Obter ou Listar das Atribuições de Função. Para obter mais informações, confira Listar as atribuições de função do Azure usando a API REST.

Excluir uma condição

Para excluir uma condição de atribuição de função, edite-a e defina a condição e a versão da condição como uma cadeia de caracteres vazia ou nula.

Como alternativa, se você quiser excluir a atribuição de função e a condição, use a API Atribuições de Função – Excluir. Para saber mais, confira Remover atribuições de função do Azure.

Próximas etapas