Adición de condiciones de asignación de roles de Azure mediante plantillas de Azure Resource Manager

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 condiciones para las asignaciones de roles mediante plantillas de Azure Resource Manager.

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 condiciones de asignación de roles, consulte Requisitos previos de las condiciones.

Agregar una condición

En la siguiente plantilla, 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".

Para usar la plantilla, debe especificar las siguientes entradas:

  • El identificador de un usuario, de un grupo, de una identidad administrada o de una aplicación al que se asignará el rol.
  • Tipo de entidad de seguridad, como User, Group o ServicePrincipal. Para más información, consulte Nueva entidad de servicio.
{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "principalId": {
            "type": "string",
            "metadata": {
                "description": "Principal ID to assign the role to"
            }
        },
        "principalType": {
            "type": "string",
            "metadata": {
                "description": "Type of principal"
            }
        },
        "roleAssignmentGuid": {
            "type": "string",
            "defaultValue": "[newGuid()]",
            "metadata": {
                "description": "New GUID used to identify the role assignment"
            }
        }
    },
    "variables": {
        "StorageBlobDataReader": "[concat(subscription().Id, '/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1')]" // ID for Storage Blob Data Reader role, but can be any valid role ID
    },
    "resources": [
        {
            "name": "[parameters('roleAssignmentGuid')]",
            "type": "Microsoft.Authorization/roleAssignments",
            "apiVersion": "2022-04-01", // API version to call the role assignment PUT.
            "properties": {
                "roleDefinitionId": "[variables('StorageBlobDataReader')]",
                "principalId": "[parameters('principalId')]",
                "principalType": "[parameters('principalType')]",
                "description": "Role assignment condition created with an ARM template",
                "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'))", // Role assignment condition
                "conditionVersion": "2.0"
            }
        }
    ]
}

El ámbito de la asignación de roles se determina a partir del nivel de la implementación. Los comandos New-AzResourceGroupDeployment y az deployment group create son ejemplos de cómo iniciar la implementación en el ámbito de un grupo de recursos.

New-AzResourceGroupDeployment -ResourceGroupName example-group -TemplateFile rbac-test.json -principalId $principalId -principalType "User"
az deployment group create --resource-group example-group --template-file rbac-test.json --parameters principalId=$principalId principalType="User"

Pasos siguientes