Udostępnij przez


Jak określić zakres zasobów rozszerzeń w szablonach ARM

Dowiedz się, jak korzystać z właściwości scope z typami zasobów rozszerzeń w szablonach Azure Resource Manager (ARM). Zasoby rozszerzenia umożliwiają modyfikowanie lub dodawanie funkcji do innych zasobów, takich jak przypisywanie roli lub stosowanie blokady.

Zasoby rozszerzenia to zaawansowany sposób zarządzania uprawnieniami, zasadami i innymi ustawieniami zasobów platformy Azure. Aby uzyskać pełną listę, zobacz Typy zasobów, które rozszerzają możliwości innych zasobów.

Właściwość scope jest dostępna tylko dla typów zasobów rozszerzeń. Aby określić inny zakres dla typu zasobu, który nie jest typem rozszerzenia, użyj zagnieżdżonego lub połączonego wdrożenia. Aby uzyskać więcej informacji, zobacz:

Zastosowanie w zakresie wdrożenia

Aby zastosować typ zasobu rozszerzenia w docelowym zakresie wdrażania, należy dodać zasób do szablonu, tak jak w przypadku dowolnego typu zasobu. Dostępne zakresy to:

  • Grupa zasobów
  • Subskrypcja
  • Grupa zarządzania
  • Najemca

Poniższy szablon wdraża blokadę.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Authorization/locks",
      "apiVersion": "2020-05-01",
      "name": "rgLock",
      "properties": {
        "level": "CanNotDelete",
        "notes": "Resource Group should not be deleted."
      }
    }
  ]
}

Po wdrożeniu w grupie zasobów blokuje ona grupę zasobów.

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"

W następnym przykładzie przypisano rolę.

{
  "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.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",
      "metadata": {
        "description": "The role assignment name"
      }
    }
  },
  "variables": {
    "roleDefinitionIds": {
      "Owner": "[format('/subscriptions/{0}/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635', subscription().subscriptionId)]",
      "Contributor": "[format('/subscriptions/{0}/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c', subscription().subscriptionId)]",
      "Reader": "[format('/subscriptions/{0}/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7', subscription().subscriptionId)]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Authorization/roleAssignments",
      "apiVersion": "2022-04-01",
      "name": "[parameters('roleNameGuid')]",
      "properties": {
        "roleDefinitionId": "[variables('roleDefinitionIds')[parameters('builtInRoleType')]]",
        "principalId": "[parameters('principalId')]"
      }
    }
  ]
}

Po wdrożeniu w subskrypcji przypisuje jej rolę.

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"

Zastosuj do zasobu

Aby zastosować rozszerzenie do zasobu, użyj właściwości scope. Ustaw właściwość zakresu na nazwę zasobu, do którego dodajesz rozszerzenie. Właściwość zakresu jest właściwością główną dla typu zasobu rozszerzenia.

Poniższy przykład tworzy konto przechowywania i przypisuje do niego rolę.

{
  "$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]",
      "metadata": {
        "description": "The location for the resources"
      }
    }
  },
  "variables": {
    "roleDefinitionIds": {
      "Owner": "[format('/subscriptions/{0}/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635', subscription().subscriptionId)]",
      "Contributor": "[format('/subscriptions/{0}/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c', subscription().subscriptionId)]",
      "Reader": "[format('/subscriptions/{0}/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7', subscription().subscriptionId)]"
    },
    "storageName": "[format('storage{0}', uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2025-06-01",
      "name": "[variables('storageName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {}
    },
    {
      "type": "Microsoft.Authorization/roleAssignments",
      "apiVersion": "2022-04-01",
      "scope": "[format('Microsoft.Storage/storageAccounts/{0}', variables('storageName'))]",
      "name": "[parameters('roleNameGuid')]",
      "properties": {
        "roleDefinitionId": "[variables('roleDefinitionIds')[parameters('builtInRoleType')]]",
        "principalId": "[parameters('principalId')]"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageName'))]"
      ]
    }
  ]
}

Właściwości resourceGroup i subscription są dozwolone tylko w przypadku wdrożeń zagnieżdżonych lub połączonych. Te właściwości nie są dozwolone dla poszczególnych zasobów. Użyj wdrożeń zagnieżdżonych lub połączonych, jeśli chcesz wdrożyć rozszerzony zasób z zakresem ustawionym na zasób w innej grupie zasobów.

Dalsze kroki