Bereik instellen voor extensiebronnen in ARM-sjablonen
Een extensieresource is een resource die een andere resource wijzigt. U kunt bijvoorbeeld een rol toewijzen aan een resource. De roltoewijzing is een extensieresourcetype.
Zie Resourcetypen voor een volledige lijst met extensieresourcetypen waarmee de mogelijkheden van andere resources worden uitgebreid.
In dit artikel wordt beschreven hoe u het bereik voor een extensieresourcetype instelt wanneer deze wordt geïmplementeerd met een Azure Resource Manager-sjabloon (ARM-sjabloon). Hierin wordt de bereikeigenschap beschreven die beschikbaar is voor extensieresources bij het toepassen op een resource.
Notitie
De bereikeigenschap is alleen beschikbaar voor extensieresourcetypen. Als u een ander bereik wilt opgeven voor een resourcetype dat geen extensietype is, gebruikt u een geneste of gekoppelde implementatie. Zie implementaties van resourcegroepen, abonnementsimplementaties, implementaties van beheergroepen en tenantimplementaties voor meer informatie.
Toepassen op implementatiebereik
Als u een extensieresourcetype wilt toepassen op het doelimplementatiebereik, voegt u de resource toe aan uw sjabloon, net als bij elk resourcetype. De beschikbare bereiken zijn resourcegroep, abonnement, beheergroep en tenant. Het implementatiebereik moet het resourcetype ondersteunen.
Met de volgende sjabloon wordt een vergrendeling geïmplementeerd.
{
"$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."
}
}
]
}
Wanneer deze wordt geïmplementeerd in een resourcegroep, wordt de resourcegroep vergrendeld.
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"
In het volgende voorbeeld wordt een rol toegewezen.
{
"$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": {}
}
Wanneer deze wordt geïmplementeerd in een abonnement, wordt de rol toegewezen aan het abonnement.
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"
Toepassen op resource
Als u een extensieresource wilt toepassen op een resource, gebruikt u de scope
eigenschap. Stel de bereikeigenschap in op de naam van de resource waaraan u de extensie toevoegt. De bereikeigenschap is een hoofdeigenschap voor het resourcetype extensie.
In het volgende voorbeeld wordt een opslagaccount gemaakt en wordt er een rol op toegepast.
{
"$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')]"
}
}
]
}
De resourceGroup- en abonnementseigenschappen zijn alleen toegestaan voor geneste of gekoppelde implementaties. Deze eigenschappen zijn niet toegestaan voor afzonderlijke resources. Gebruik geneste of gekoppelde implementaties als u een extensieresource wilt implementeren met het bereik dat is ingesteld op een resource in een andere resourcegroep.
Volgende stappen
- Zie Inzicht in de structuur en syntaxis van ARM-sjablonen voor meer informatie over het definiëren van parameters in uw sjabloon.
- Zie Veelvoorkomende Implementatiefouten in Azure Oplossen met Azure Resource Manager voor tips over het oplossen van veelvoorkomende implementatiefouten.
- Zie Privé-ARM-sjabloon implementeren met EEN SAS-token voor meer informatie over het implementeren van een sjabloon waarvoor een SAS-token is vereist.