Nastavení oboru pro rozšiřující prostředky v šablonách ARM

Prostředek rozšíření je prostředek, který mění jiný prostředek. K prostředku můžete například přiřadit roli. Přiřazení role je typ prostředku rozšíření.

Úplný seznam typů rozšiřujících prostředků najdete v tématu Typy prostředků, které rozšiřují možnosti dalších prostředků.

Tento článek ukazuje, jak nastavit rozsah pro typ prostředku rozšíření při nasazení pomocí šablony Azure Resource Manager (šablona ARM). Popisuje vlastnost oboru, která je k dispozici pro prostředky rozšíření při použití prostředku.

Poznámka

Vlastnost scope je k dispozici pouze pro typy prostředků rozšíření. Pokud chcete zadat jiný obor pro typ prostředku, který není typem rozšíření, použijte vnořené nebo propojené nasazení. Další informace najdete v tématu Nasazení skupin prostředků, nasazení předplatného, nasazení skupin pro správu a nasazení tenanta.

Použít v oboru nasazení

Pokud chcete použít typ prostředku rozšíření v cílovém oboru nasazení, přidejte prostředek do šablony stejně jako u jakéhokoli typu prostředku. Dostupné obory jsou skupina prostředků, předplatné, skupina pro správu a tenant. Obor nasazení musí podporovat typ prostředku.

Následující šablona nasadí zámek.

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

Při nasazení do skupiny prostředků se skupina prostředků uzamkne.

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"

Další příklad přiřadí roli.

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

Při nasazení do předplatného přiřadí roli předplatnému.

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"

Použít u prostředku

Pokud chcete na prostředek použít prostředek rozšíření, použijte scope vlastnost . Vlastnost scope nastavte na název prostředku, do který přidáváte rozšíření. Vlastnost scope je kořenová vlastnost pro typ prostředku rozšíření.

Následující příklad vytvoří účet úložiště a použije na něj roli.

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

Vlastnosti resourceGroup a předplatného jsou povoleny pouze ve vnořených nebo propojených nasazeních. Tyto vlastnosti nejsou u jednotlivých prostředků povolené. Vnořená nebo propojená nasazení použijte, pokud chcete nasadit prostředek rozšíření s oborem nastaveným na prostředek v jiné skupině prostředků.

Další kroky