Distributioner av hanteringsgrupp med ARM-mallar
När din organisation mognar kan du distribuera en Azure Resource Manager mall (ARM-mall) för att skapa resurser på hanteringsgruppsnivå. Du kan till exempel behöva definiera och tilldela principer eller rollbaserad åtkomstkontroll i Azure (Azure RBAC) för en hanteringsgrupp. Med mallar på hanteringsgruppsnivå kan du deklarativt tillämpa principer och tilldela roller på hanteringsgruppsnivå.
Resurser som stöds
Alla resurstyper kan inte distribueras till hanteringsgruppsnivån. I det här avsnittet visas vilka resurstyper som stöds.
För Azure Blueprints använder du:
För Azure Policy använder du:
Använd följande för åtkomstkontroll:
- privateLinkAssociations
- roleAssignments
- roleAssignmentScheduleRequests
- roleDefinitions
- roleEligibilityScheduleRequests
- roleManagementPolicyAssignments
För kapslade mallar som distribueras till prenumerationer eller resursgrupper använder du:
Använd följande för att hantera dina resurser:
Hanteringsgrupper är resurser på klientorganisationsnivå. Du kan dock skapa hanteringsgrupper i en hanteringsgruppsdistribution genom att ange omfånget för den nya hanteringsgruppen till klienten. Se Hanteringsgrupp.
Schema
Schemat som du använder för distributioner av hanteringsgrupp skiljer sig från schemat för resursgruppsdistributioner.
För mallar använder du:
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
...
}
Schemat för en parameterfil är detsamma för alla distributionsomfång. För parameterfiler använder du:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
...
}
Distributionskommandon
Om du vill distribuera till en hanteringsgrupp använder du hanteringsgruppens distributionskommandon.
För Azure CLI använder du az deployment mg create:
az deployment mg create \
--name demoMGDeployment \
--location WestUS \
--management-group-id myMG \
--template-uri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/management-level-deployment/azuredeploy.json"
Mer detaljerad information om distributionskommandon och alternativ för att distribuera ARM-mallar finns i:
- Distribuera resurser med ARM-mallar och Azure Portal
- Distribuera resurser med ARM-mallar och Azure CLI
- Distribuera resurser med ARM-mallar och Azure PowerShell
- Distribuera resurser med ARM-mallar och Azure Resource Manager REST API
- Använd en distributionsknapp för att distribuera mallar från GitHub lagringsplats
- Distribuera ARM-mallar från Cloud Shell
Distributionsplats och namn
För distributioner på hanteringsgruppsnivå måste du ange en plats för distributionen. Platsen för distributionen är separat från platsen för de resurser som du distribuerar. Distributionsplatsen anger var distributionsdata ska lagras. Prenumerations- och klientdistributioner kräver också en plats. För distributioner av resursgrupper används platsen för resursgruppen för att lagra distributionsdata.
Du kan ange ett namn för distributionen eller använda standardnamnet för distributionen. Standardnamnet är namnet på mallfilen. Om du till exempel distribuerar en mall med namnet azuredeploy.json skapas standarddistributionsnamnet azuredeploy.
För varje distributionsnamn är platsen oföränderlig. Du kan inte skapa en distribution på en plats när det finns en befintlig distribution med samma namn på en annan plats. Om du till exempel skapar en hanteringsgruppsdistribution med namnet deployment1 i centralus kan du inte senare skapa en annan distribution med namnet deployment1 utan en plats för westus. Om du får felkoden InvalidDeploymentLocation använder du antingen ett annat namn eller samma plats som den tidigare distributionen för det namnet.
Distributionsomfång
När du distribuerar till en hanteringsgrupp kan du distribuera resurser till:
- målhanteringsgruppen från åtgärden
- en annan hanteringsgrupp i klientorganisationen
- prenumerationer i hanteringsgruppen
- resursgrupper i hanteringsgruppen
- klientorganisationen för resursgruppen
En tilläggsresurs kan vara begränsad till ett mål som skiljer sig från distributionsmålet.
Den användare som distribuerar mallen måste ha åtkomst till det angivna omfånget.
Det här avsnittet visar hur du anger olika omfång. Du kan kombinera dessa olika omfång i en enda mall.
Omfång till målhanteringsgrupp
Resurser som definierats i resursavsnittet i mallen tillämpas på hanteringsgruppen från distributionskommandot.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
management-group-resources-default
],
"outputs": {}
}
Omfång till en annan hanteringsgrupp
Om du vill rikta in dig på en annan hanteringsgrupp lägger du till en kapslad distribution och anger scope egenskapen . Ange egenskapen scope till ett värde i formatet Microsoft.Management/managementGroups/<mg-name> .
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"mgName": {
"type": "string"
}
},
"variables": {
"mgId": "[concat('Microsoft.Management/managementGroups/', parameters('mgName'))]"
},
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"scope": "[variables('mgId')]",
"location": "eastus",
"properties": {
"mode": "Incremental",
"template": {
management-group-resources-non-default
}
}
}
],
"outputs": {}
}
Omfång till prenumeration
Du kan också rikta prenumerationer inom en hanteringsgrupp. Den användare som distribuerar mallen måste ha åtkomst till det angivna omfånget.
Om du vill rikta in dig på en prenumeration i hanteringsgruppen använder du en kapslad distribution och subscriptionId egenskapen .
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedSub",
"location": "westus2",
"subscriptionId": "00000000-0000-0000-0000-000000000000",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
subscription-resources
}
]
}
}
}
]
}
Omfång till resursgrupp
Du kan också rikta in dig på resursgrupper i hanteringsgruppen. Den användare som distribuerar mallen måste ha åtkomst till det angivna omfånget.
Om du vill rikta in dig på en resursgrupp i hanteringsgruppen använder du en kapslad distribution. Ange egenskaperna subscriptionId resourceGroup och . Ange inte en plats för den kapslade distributionen eftersom den distribueras på platsen för resursgruppen.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedRGDeploy",
"subscriptionId": "00000000-0000-0000-0000-000000000000",
"resourceGroup": "demoResourceGroup",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
resource-group-resources
}
]
}
}
}
]
}
Om du vill använda en distribution av en hanteringsgrupp för att skapa en resursgrupp i en prenumeration och distribuera ett lagringskonto till den resursgruppen kan du läsa Distribuera till prenumeration och resursgrupp.
Omfång till klientorganisation
Om du vill skapa resurser i klientorganisationen anger du scope till / . Den användare som distribuerar mallen måste ha nödvändig åtkomst för att distribuera på klientorganisationen.
Om du vill använda en kapslad distribution anger du scope och location .
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"location": "centralus",
"scope": "/",
"properties": {
"mode": "Incremental",
"template": {
tenant-resources
}
}
}
],
"outputs": {}
}
Eller så kan du ange omfånget till / för vissa resurstyper, till exempel hanteringsgrupper. Skapa en ny hanteringsgrupp beskrivs i nästa avsnitt.
Hanteringsgrupp
Om du vill skapa en hanteringsgrupp i en distribution av en hanteringsgrupp måste du ange / omfånget till för hanteringsgruppen.
I följande exempel skapas en ny hanteringsgrupp i rothanteringsgruppen.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"mgName": {
"type": "string",
"defaultValue": "[concat('mg-', uniqueString(newGuid()))]"
}
},
"resources": [
{
"type": "Microsoft.Management/managementGroups",
"apiVersion": "2021-04-01",
"name": "[parameters('mgName')]",
"scope": "/",
"location": "eastus",
"properties": {}
}
],
"outputs": {
"output": {
"type": "string",
"value": "[parameters('mgName')]"
}
}
}
I nästa exempel skapas en ny hanteringsgrupp i hanteringsgruppen som angetts som överordnad. Observera att omfånget är inställt på / .
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"mgName": {
"type": "string",
"defaultValue": "[concat('mg-', uniqueString(newGuid()))]"
},
"parentMG": {
"type": "string"
}
},
"resources": [
{
"name": "[parameters('mgName')]",
"type": "Microsoft.Management/managementGroups",
"apiVersion": "2021-04-01",
"scope": "/",
"location": "eastus",
"properties": {
"details": {
"parent": {
"id": "[tenantResourceId('Microsoft.Management/managementGroups', parameters('parentMG'))]"
}
}
}
}
],
"outputs": {
"output": {
"type": "string",
"value": "[parameters('mgName')]"
}
}
}
Prenumerationer
Om du vill använda en ARM-mall för att skapa en ny Azure-prenumeration i en hanteringsgrupp kan du läsa:
- Skapa Azure företagsavtal prenumerationer programmatiskt
- Skapa Azure-prenumerationer programmässigt för en Microsoft-kundavtal
- Skapa Azure-prenumerationer programmässigt för en Microsoft-partneravtal
Information om hur du distribuerar en mall som flyttar en befintlig Azure-prenumeration till en ny hanteringsgrupp finns i Flytta prenumerationer i ARM-mall
Azure Policy
Anpassade principdefinitioner som distribueras till hanteringsgruppen är tillägg för hanteringsgruppen. Om du vill hämta ID:t för en anpassad principdefinition använder du funktionen extensionResourceId(). Inbyggda principdefinitioner är resurser på klientorganisationsnivå. Om du vill hämta ID:t för en inbyggd principdefinition använder du funktionen tenantResourceId().
I följande exempel visas hur du definierar en princip på hanteringsgruppsnivå och tilldelar den.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"targetMG": {
"type": "string",
"metadata": {
"description": "Target Management Group"
}
},
"allowedLocations": {
"type": "array",
"defaultValue": [
"australiaeast",
"australiasoutheast",
"australiacentral"
],
"metadata": {
"description": "An array of the allowed locations, all other locations will be denied by the created policy."
}
}
},
"variables": {
"mgScope": "[tenantResourceId('Microsoft.Management/managementGroups', parameters('targetMG'))]",
"policyDefinition": "LocationRestriction"
},
"resources": [
{
"type": "Microsoft.Authorization/policyDefinitions",
"name": "[variables('policyDefinition')]",
"apiVersion": "2020-09-01",
"properties": {
"policyType": "Custom",
"mode": "All",
"parameters": {
},
"policyRule": {
"if": {
"not": {
"field": "location",
"in": "[parameters('allowedLocations')]"
}
},
"then": {
"effect": "deny"
}
}
}
},
{
"type": "Microsoft.Authorization/policyAssignments",
"name": "location-lock",
"apiVersion": "2020-09-01",
"dependsOn": [
"[variables('policyDefinition')]"
],
"properties": {
"scope": "[variables('mgScope')]",
"policyDefinitionId": "[extensionResourceId(variables('mgScope'), 'Microsoft.Authorization/policyDefinitions', variables('policyDefinition'))]"
}
}
]
}
Distribuera till prenumeration och resursgrupp
Från en distribution på hanteringsgruppsnivå kan du rikta en prenumeration i hanteringsgruppen. I följande exempel skapas en resursgrupp i en prenumeration och ett lagringskonto distribueras till den resursgruppen.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"nestedsubId": {
"type": "string"
},
"nestedRG": {
"type": "string"
},
"storageAccountName": {
"type": "string"
},
"nestedLocation": {
"type": "string"
}
},
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedSub",
"location": "[parameters('nestedLocation')]",
"subscriptionId": "[parameters('nestedSubId')]",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
},
"variables": {
},
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"apiVersion": "2021-04-01",
"name": "[parameters('nestedRG')]",
"location": "[parameters('nestedLocation')]"
}
]
}
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedRG",
"subscriptionId": "[parameters('nestedSubId')]",
"resourceGroup": "[parameters('nestedRG')]",
"dependsOn": [
"nestedSub"
],
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[parameters('storageAccountName')]",
"location": "[parameters('nestedLocation')]",
"kind": "StorageV2",
"sku": {
"name": "Standard_LRS"
}
}
]
}
}
}
]
}
Nästa steg
- Mer information om hur du tilldelar roller finns i Tilldela Azure-roller med hjälp Azure Resource Manager mallar.
- Ett exempel på hur du distribuerar arbetsyteinställningar för Microsoft Defender for Cloud finns i deployASCwithWorkspaceSettings.json.
- Du kan också distribuera mallar på prenumerationsnivå och klientorganisationsnivå.