Mengatur lingkup untuk sumber daya ekstensi dalam templat ARM

Sumber daya ekstensi adalah sumber daya yang memodifikasi sumber daya lain. Misalnya, Anda dapat menetapkan peran ke sumber daya. Penetapan peran adalah jenis sumber daya ekstensi.

Untuk daftar lengkap jenis sumber daya ekstensi, lihat Jenis sumber daya yang memperluas kapabilitas sumber daya lainnya.

Artikel ini memperlihatkan cara mengatur lingkup untuk jenis sumber daya ekstensi saat digunakan dengan templat Azure Resource Manager (templat ARM). Artikel ini menjelaskan properti lingkup yang tersedia untuk sumber daya ekstensi saat diterapkan ke sumber daya.

Catatan

Properti lingkup hanya tersedia untuk jenis sumber daya ekstensi. Untuk menentukan lingkup berbeda untuk jenis sumber daya yang bukan jenis ekstensi, gunakan penyebaran yang berlapis atau terhubung. Untuk informasi selengkapnya, lihat penyebaran grup sumber daya, penyebaran langganan, penyebaran manajemen grup, dan penyebaran penyewa.

Terapkan pada lingkup penyebaran

Untuk menerapkan jenis sumber daya ekstensi pada lingkup penyebaran target, Anda menambahkan sumber daya ke templat Anda, seperti halnya dengan jenis sumber daya apa pun. Lingkup yang tersedia adalah grup sumber daya, langganan, grup manajemen, dan penyewa. Lingkup penyebaran harus mendukung jenis sumber daya.

Templat berikut ini menyebarkan kunci.

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

Saat disebarkan ke grup sumber daya, grup sumber daya akan mengunci grup sumber daya.

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"

Contoh berikutnya menetapkan peran.

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

Saat disebarkan ke langganan, ia memberikan peran ke langganan.

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"

Menerapkan ke sumber daya

Untuk menerapkan sumber daya ekstensi ke sumber daya, gunakan properti scope. Atur properti lingkup ke nama sumber daya tempat Anda menambahkan ekstensi. Properti lingkup adalah properti akar untuk jenis sumber daya ekstensi.

Contoh berikut membuat akun penyimpanan dan menerapkan peran pada penyimpanan.

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

Properti resourceGroup dan langganan hanya diizinkan pada penyebaran berlapis atau tertaut. Properti ini tidak diizinkan pada sumber daya individual. Gunakan penyebaran berlapis atau tertaut jika Anda ingin menyebarkan sumber daya ekstensi dengan cakupan yang diatur ke sumber daya dalam grup sumber daya yang berbeda.

Langkah berikutnya