Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Un recurso de extensión es un recurso que modifica otro recurso. Por ejemplo, puede asignar un rol a un recurso. La asignación de roles es un tipo de recurso de extensión.
Para obtener una lista completa de los tipos de recursos de extensión, consulte Tipos de recursos que amplían las funcionalidades de otros recursos.
En este artículo se muestra cómo establecer el ámbito de un tipo de recurso de extensión cuando se implementa con una plantilla de Azure Resource Manager (plantilla de ARM). Describe la propiedad de ámbito que está disponible para los recursos de extensión al aplicar a un recurso.
Nota:
La propiedad scope solo está disponible para los tipos de recursos de extensión. Para especificar un ámbito diferente para un tipo de recurso que no sea un tipo de extensión, use una implementación anidada o vinculada. Para obtener más información, consulte implementaciones de grupos de recursos, implementaciones de suscripciones, implementaciones de grupos de administración e implementaciones de inquilinos.
Aplicación en el ámbito de implementación
Para aplicar un tipo de recurso de extensión en el ámbito de implementación de destino, basta con agregar el recurso a la plantilla, tal como con cualquier tipo de recurso. Los ámbitos disponibles son el grupo de recursos, la suscripción, el grupo de administración y el inquilino. El alcance de implementación debe soportar el tipo de recurso.
La plantilla siguiente implementa un bloqueo.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
},
"resources": [
{
"type": "Microsoft.Authorization/locks",
"apiVersion": "2016-09-01",
"name": "rgLock",
"properties": {
"level": "CanNotDelete",
"notes": "Resource Group should not be deleted."
}
}
]
}
Cuando se implementa en un grupo de recursos, bloquea el grupo de recursos.
az deployment group create \
--resource-group ExampleGroup \
--template-uri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/scope/locktargetscope.json"
En el ejemplo siguiente se asigna un rol.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.1",
"parameters": {
"principalId": {
"type": "string",
"metadata": {
"description": "The principal to assign the role to"
}
},
"builtInRoleType": {
"type": "string",
"allowedValues": [
"Owner",
"Contributor",
"Reader"
],
"metadata": {
"description": "Built-in role to assign"
}
},
"roleNameGuid": {
"type": "string",
"metadata": {
"description": "The role assignment name"
}
}
},
"variables": {
"Owner": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', '8e3af657-a8ff-443c-a75c-2fe8c4bcb635')]",
"Contributor": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",
"Reader": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')]"
},
"resources": [
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2020-10-01-preview",
"name": "[parameters('roleNameGuid')]",
"properties": {
"roleDefinitionId": "[variables(parameters('builtInRoleType'))]",
"principalId": "[parameters('principalId')]"
}
}
],
"outputs": {}
}
Cuando se implementa en una suscripción, asigna el rol a la suscripción.
az deployment sub create \
--name demoSubDeployment \
--location centralus \
--template-uri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/scope/roletargetscope.json"
Aplicación al recurso
Para aplicar un recurso de extensión a un recurso, use la scope propiedad . Establezca la propiedad scope en el nombre del recurso al que va a agregar la extensión. La propiedad scope es una propiedad raíz para el tipo de recurso de extensión.
En el ejemplo siguiente se crea una cuenta de almacenamiento y se aplica un rol a ella.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"principalId": {
"type": "string",
"metadata": {
"description": "The principal to assign the role to"
}
},
"builtInRoleType": {
"type": "string",
"allowedValues": [
"Owner",
"Contributor",
"Reader"
],
"metadata": {
"description": "Built-in role to assign"
}
},
"roleNameGuid": {
"type": "string",
"defaultValue": "[newGuid()]",
"metadata": {
"description": "A new GUID used to identify the role assignment"
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"Owner": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', '8e3af657-a8ff-443c-a75c-2fe8c4bcb635')]",
"Contributor": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",
"Reader": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')]",
"storageName": "[concat('storage', uniqueString(resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[variables('storageName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {}
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2020-10-01-preview",
"name": "[parameters('roleNameGuid')]",
"scope": "[concat('Microsoft.Storage/storageAccounts', '/', variables('storageName'))]",
"dependsOn": [
"[variables('storageName')]"
],
"properties": {
"roleDefinitionId": "[variables(parameters('builtInRoleType'))]",
"principalId": "[parameters('principalId')]"
}
}
]
}
Las propiedades resourceGroup y subscription solo se permiten en implementaciones anidadas o vinculadas. Estas propiedades no se permiten en recursos individuales. Use implementaciones anidadas o vinculadas si desea implementar un recurso de extensión con el ámbito establecido en un recurso de otro grupo de recursos.
Pasos siguientes
- Para entender cómo definir parámetros en la plantilla, consulte Nociones sobre la estructura y la sintaxis de las plantillas de Azure Resource Manager.
- Para obtener sugerencias para resolver los errores de implementación más comunes, consulte Solución de errores comunes de implementación de Azure con Azure Resource Manager.
- Para más información sobre la implementación de una plantilla que requiere un token de SAS, vea Implementación de una plantilla de Resource Manager privada con el token de SAS.