Condividi tramite


Vedi Impostazione dell'ambito per le risorse di estensione nei modelli di ARM.

Una risorsa di estensione è una risorsa che modifica un'altra risorsa. Ad esempio, puoi assegnare un ruolo a una risorsa. L'assegnazione di ruolo è un tipo di risorsa di estensione.

Per un elenco completo dei tipi di risorse di estensione, vedi Tipi di risorse che estendono le funzionalità di altre risorse.

Questo articolo spiega come impostare l'ambito per un tipo di risorsa di estensione quando viene distribuita con un modello di Azure Resource Manager (modello di ARM). Descrive la proprietà Scope disponibile per le risorse di estensione quando si applicano a una risorsa.

Nota

La proprietà scope è disponibile solo per i tipi di risorse di estensione. Per specificare un ambito diverso per un tipo di risorsa che non è un tipo di estensione, usa una distribuzione annidata o collegata. Per altre informazioni, vedi distribuzioni di gruppi di risorse,distribuzioni di sottoscrizioni, distribuzioni di gruppi di gestione e distribuzioni di tenant.

Applicare all'ambito di distribuzione

Per applicare un tipo di risorsa di estensione all'ambito della distribuzione di destinazione, aggiungere la risorsa al modello come si farebbe con qualsiasi altro tipo di risorsa. Gli ambiti disponibili sono gruppo di risorse, sottoscrizione, gruppo di gestione e tenant. L'ambito di distribuzione deve supportare il tipo di risorsa.

Il modello seguente distribuisce un blocco.

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

Quando viene distribuito in un gruppo di risorse, blocca il gruppo di risorse.

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"

Nell'esempio seguente viene assegnato un ruolo.

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

Quando viene distribuita in una sottoscrizione, assegna il ruolo alla sottoscrizione.

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"

Applicare alla risorsa

Per applicare una risorsa di estensione a una risorsa, usa la proprietà scope . Imposta la proprietà scope sul nome della risorsa a cui si aggiunge l'estensione. La proprietà scope è una proprietà radice per il tipo di risorsa di estensione.

Nell'esempio seguente viene creato un account di archiviazione e gli si applica un ruolo.

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

Le proprietà resourceGroup e subscription sono consentite solo nelle distribuzioni annidate o collegate. Queste proprietà non sono consentite per le singole risorse. Usa i moduli annidati o collegati se vuoi distribuire una risorsa di estensione con l'ambito impostato su una risorsa in un gruppo di risorse diverso.

Passaggi successivi