ARM şablonlarındaki uzantı kaynakları için kapsam ayarlama

Uzantı kaynağı, başka bir kaynağı değiştiren bir kaynaktır. Örneğin, bir kaynağa bir rol atayabilirsiniz. Rol ataması, bir uzantı kaynak türüdür.

Uzantı kaynak türlerinin tam listesi için bkz. diğer kaynakların özelliklerini genişleten kaynak türleri.

Bu makalede, bir Azure Resource Manager şablonuyla (ARM şablonu) dağıtıldığında bir uzantı kaynak türü kapsamının nasıl ayarlanacağı gösterilmektedir. Bir kaynağa uygulanırken uzantı kaynakları için kullanılabilir kapsam özelliğini açıklar.

Not

Scope özelliği yalnızca uzantı kaynak türlerinde kullanılabilir. Uzantı türü olmayan bir kaynak türü için farklı bir kapsam belirtmek üzere, iç içe veya bağlı bir dağıtım kullanın. Daha fazla bilgi için bkz. kaynak grubu dağıtımları, abonelik dağıtımları, Yönetim grubu dağıtımlarıve kiracı dağıtımları.

Dağıtım kapsamına Uygula

Hedef dağıtım kapsamında bir uzantı kaynak türü uygulamak için kaynağı, herhangi bir kaynak türünde olduğu gibi şablonunuza eklersiniz. Kullanılabilir kapsamlar kaynak grubu, abonelik, Yönetim grubuve kiracıyaait. Dağıtım kapsamı, kaynak türünü desteklemelidir.

Aşağıdaki şablon bir kilit dağıtır.

{
  "$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."
      }
    }
  ]
}

Bir kaynak grubuna dağıtıldığında, kaynak grubunu kilitler.

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"

Bir sonraki örnek bir rol atar.

{
  "$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",
      "defaultValue": "[newGuid()]",
      "metadata": {
        "description": "A new GUID used to identify the role assignment"
      }
    }
  },
  "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": {}
}

Bir aboneliğe dağıtıldığında, rolü aboneliğe atar.

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"

Kaynağa uygula

Bir kaynağa uzantı kaynağı uygulamak için scope özelliğini kullanın. Kapsam özelliğini, uzantısı eklemekte olduğunuz kaynağın adı olarak ayarlayın. Scope özelliği, uzantı kaynak türü için bir kök özelliktir.

Aşağıdaki örnek bir depolama hesabı oluşturur ve buna bir rol uygular.

{
  "$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')]"
      }
    }
  ]
}

Sonraki adımlar