Incorporación o edición de condiciones de asignación de roles de Azure mediante la API REST

Una condición de asignación de roles de Azure es una comprobación adicional que puede agregar opcionalmente a la asignación de roles para proporcionar un control de acceso más preciso. Por ejemplo, puede agregar una condición que requiera que un objeto tenga una etiqueta específica para leer el objeto. En este artículo se describe cómo agregar, editar, mostrar o eliminar condiciones para las asignaciones de roles mediante la API REST.

Requisitos previos

Debe usar las versiones siguientes:

  • 2020-03-01-preview o posterior
  • Si quiere utilizar la propiedad description para las asignaciones de roles, use 2020-04-01-preview o posterior.
  • 2022-04-01 es la primera versión estable

Para obtener más información sobre los requisitos previos para agregar o editar condiciones de asignación de roles, consulte Requisitos previos de las condiciones.

Agregar una condición

Para agregar una condición de asignación de roles, use la API REST Asignación de roles: creación. Asignación de roles: creación incluye los siguientes parámetros relacionados con las condiciones.

Parámetro Tipo Description
condition String Condición bajo la que se puede conceder permiso al usuario.
conditionVersion String Versión de la sintaxis de la condición. Si condition se especifica sin conditionVersion, la versión se establece en el valor predeterminado 2.0.

Use la solicitud y el cuerpo siguientes:

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}"
    }
}

En el siguiente ejemplo se muestra cómo asignar el rol Lector de datos de Storage Blob con una condición. La condición comprueba si el nombre del contenedor es 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"
    }
}

El siguiente texto muestra un ejemplo de la salida:

{
    "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}"
}

Edición de una condición

Para editar una condición de asignación de roles existente, use la misma API REST Asignaciones de roles: creación que usó para agregar la condición de la asignación de roles. A continuación se muestra un archivo JSON de ejemplo donde se actualizan condition y description. Solo se pueden editar las propiedades condition, conditionVersion y description. Debe especificar las demás propiedades para que coincidan con la asignación de roles 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"
    }
}

Visualización de una condición

Para mostrar una condición de asignación de roles, use la API REST (Get o List) de Asignaciones de roles. Para más información, consulte Enumeración de asignaciones de roles de Azure mediante la API REST.

Eliminar una condición

Para eliminar una condición de asignación de roles, edítela y establezca la condición y la versión de la condición en una cadena vacía o NULL.

Como alternativa, si desea eliminar la asignación de roles y la condición, puede usar la API Asignaciones de roles: eliminar. Para obtener más información, consulte Eliminación de asignaciones de roles.

Pasos siguientes