Adición de condiciones de asignación de roles de Azure mediante plantillas de Azure Resource Manager (versión preliminar)

Importante

Las condiciones de asignación de roles de Azure y Azure ABAC se encuentran actualmente en versión preliminar. Esta versión preliminar se ofrece sin Acuerdo de Nivel de Servicio y no se recomienda para cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que tengan sus funcionalidades limitadas. Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.

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

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

Adición de 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": "2020-04-01-preview", // 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