Sdílet prostřednictvím


Nastavení rozsahu pro prostředky rozšíření v šablonách ARM

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

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

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

Poznámka:

Vlastnost oboru 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ých, nasazení skupin pro správu a nasazení tenantů.

Použití v oboru nasazení

Pokud chcete použít typ prostředku rozšíření v oboru cílového 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."
      }
    }
  ]
}

Když je nasazená do skupiny prostředků, zamkne ji.

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 k 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 u prostředku použít prostředek rozšíření, použijte scope tuto vlastnost. Nastavte vlastnost oboru na název prostředku, do který přidáváte rozšíření. Vlastnost oboru je kořenovou 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 u vnořených nebo propojených nasazení. Tyto vlastnosti nejsou povoleny pro jednotlivé prostředky. Pokud chcete nasadit prostředek rozšíření s oborem nastaveným na prostředek v jiné skupině prostředků, použijte vnořená nebo propojená nasazení.

Další kroky