Implementaties van beheergroepen met ARM-sjablonen
Naarmate uw organisatie verder wordt ontwikkeld, kunt u een Arm-sjabloon (Azure Resource Manager) implementeren om resources te maken op het niveau van de beheergroep. U moet bijvoorbeeld beleidsregels of op rollen gebaseerd toegangsbeheer (Azure RBAC) voor een beheergroep definiëren en toewijzen. Met sjablonen op beheergroepsniveau kunt u beleid declaratief toepassen en rollen toewijzen op beheergroepsniveau.
Tip
We raden Bicep aan omdat het dezelfde mogelijkheden biedt als ARM-sjablonen en de syntaxis gemakkelijker te gebruiken is. Zie implementaties van beheergroepen voor meer informatie.
Ondersteunde resources
Niet alle resourcetypen kunnen worden geïmplementeerd op het niveau van de beheergroep. In deze sectie wordt vermeld welke resourcetypen worden ondersteund.
Gebruik voor Azure Blueprints:
Gebruik voor Azure Policy:
Gebruik voor toegangsbeheer:
- privateLinkAssociations
- roleAssignments
- roleAssignmentScheduleRequests
- roleDefinitions
- roleEligibilityScheduleRequests
- roleManagementPolicyAssignments
Gebruik voor geneste sjablonen die worden geïmplementeerd in abonnementen of resourcegroepen:
Gebruik voor het beheren van uw resources het volgende:
Beheergroepen zijn resources op tenantniveau. U kunt echter beheergroepen maken in een implementatie van een beheergroep door het bereik van de nieuwe beheergroep in te stellen op de tenant. Zie beheergroep.
Schema
Het schema dat u gebruikt voor implementaties van beheergroepen verschilt van het schema voor resourcegroepimplementaties.
Gebruik voor sjablonen:
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
...
}
Het schema voor een parameterbestand is hetzelfde voor alle implementatiebereiken. Gebruik voor parameterbestanden:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
...
}
Implementatieopdrachten
Als u wilt implementeren in een beheergroep, gebruikt u de implementatieopdrachten van de beheergroep.
Gebruik az deployment mg create voor Azure CLI:
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"
Zie voor meer gedetailleerde informatie over implementatieopdrachten en opties voor het implementeren van ARM-sjablonen:
- Resources implementeren met ARM-sjablonen en Azure Portal
- Resources implementeren met ARM-sjablonen en Azure CLI
- Resources implementeren met ARM-sjablonen en Azure PowerShell
- Resources implementeren met ARM-sjablonen en Azure Resource Manager REST API
- Een implementatieknop gebruiken om sjablonen te implementeren vanuit GitHub-opslagplaats
- ARM-sjablonen implementeren vanuit Cloud Shell
Implementatielocatie en -naam
Voor implementaties op beheergroepniveau moet u een locatie voor de implementatie opgeven. De locatie van de implementatie is gescheiden van de locatie van de resources die u implementeert. De implementatielocatie geeft aan waar implementatiegegevens moeten worden opgeslagen. Voor abonnements - en tenantimplementaties is ook een locatie vereist. Voor resourcegroepimplementaties wordt de locatie van de resourcegroep gebruikt om de implementatiegegevens op te slaan.
U kunt een naam opgeven voor de implementatie of de standaardimplementatienaam gebruiken. De standaardnaam is de naam van het sjabloonbestand. Als u bijvoorbeeld een sjabloon met de naam azuredeploy.json implementeert, wordt een standaardimplementatienaam van azuredeploy gemaakt.
Voor elke implementatienaam kan de locatie onveranderbaar zijn. U kunt geen implementatie op één locatie maken wanneer er een bestaande implementatie met dezelfde naam op een andere locatie is. Als u bijvoorbeeld een implementatie van een beheergroep maakt met de naamimplementatie1 in centralus, kunt u later geen andere implementatie maken met de naam deployment1, maar een locatie van westus. Als u de foutcode InvalidDeploymentLocation
krijgt, gebruikt u een andere naam of dezelfde locatie als de vorige implementatie voor die naam.
Implementatiebereiken
Wanneer u implementeert in een beheergroep, kunt u resources implementeren op:
- de doelbeheergroep van de bewerking
- een andere beheergroep in de tenant
- abonnementen in de beheergroep
- resourcegroepen in de beheergroep
- de tenant voor de resourcegroep
De enige verboden bereikovergangen vinden plaats van resourcegroep naar beheergroep of van abonnement naar beheergroep.
Een extensieresource kan worden afgestemd op een doel dat verschilt van het implementatiedoel.
De gebruiker die de sjabloon implementeert, moet toegang hebben tot het opgegeven bereik.
In deze sectie ziet u hoe u verschillende bereiken kunt opgeven. U kunt deze verschillende bereiken combineren in één sjabloon.
Bereik voor doelbeheergroep
Resources die zijn gedefinieerd in de sectie Resources van de sjabloon, worden vanuit de implementatieopdracht toegepast op de beheergroep.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
management-group-resources-default
],
"outputs": {}
}
Bereik naar een andere beheergroep
Als u een andere beheergroep wilt gebruiken, voegt u een geneste implementatie toe en geeft u de eigenschap op scope
. Stel de scope
eigenschap in op een waarde in de notatie 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": "[format('Microsoft.Management/managementGroups/{0}', parameters('mgName'))]"
},
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-01",
"name": "nestedDeployment",
"scope": "[variables('mgId')]",
"location": "eastus",
"properties": {
"mode": "Incremental",
"template": {
management-group-resources-non-default
}
}
}
],
"outputs": {}
}
Bereik voor abonnement
U kunt zich ook richten op abonnementen binnen een beheergroep. De gebruiker die de sjabloon implementeert, moet toegang hebben tot het opgegeven bereik.
Als u een abonnement in de beheergroep wilt toepassen, gebruikt u een geneste implementatie en de subscriptionId
eigenschap.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-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
}
]
}
}
}
]
}
Bereik tot resourcegroep
U kunt zich ook richten op resourcegroepen binnen de beheergroep. De gebruiker die de sjabloon implementeert, moet toegang hebben tot het opgegeven bereik.
Als u een resourcegroep in de beheergroep wilt richten, gebruikt u een geneste implementatie. Stel de subscriptionId
en resourceGroup
eigenschappen in. Stel geen locatie in voor de geneste implementatie omdat deze is geïmplementeerd op de locatie van de resourcegroep.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-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
}
]
}
}
}
]
}
Als u een implementatie van een beheergroep wilt gebruiken voor het maken van een resourcegroep binnen een abonnement en het implementeren van een opslagaccount voor die resourcegroep, raadpleegt u Implementeren in abonnement en resourcegroep.
Bereik naar tenant
Als u resources wilt maken in de tenant, stelt u het in scope
op /
. De gebruiker die de sjabloon implementeert, moet over de vereiste toegang beschikken om te implementeren in de tenant.
Als u een geneste implementatie wilt gebruiken, stelt u in scope
en location
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-01",
"name": "nestedDeployment",
"location": "centralus",
"scope": "/",
"properties": {
"mode": "Incremental",
"template": {
tenant-resources
}
}
}
],
"outputs": {}
}
U kunt ook het bereik /
voor sommige resourcetypen instellen, zoals beheergroepen. Het maken van een nieuwe beheergroep wordt beschreven in de volgende sectie.
Beheergroep
Als u een beheergroep wilt maken in een beheergroepimplementatie, moet u het bereik /
voor de beheergroep instellen.
In het volgende voorbeeld wordt een nieuwe beheergroep gemaakt in de hoofdbeheergroep.
{
"$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')]"
}
}
}
In het volgende voorbeeld wordt een nieuwe beheergroep gemaakt in de beheergroep die is opgegeven als het bovenliggende item. U ziet dat het bereik is ingesteld op /
.
{
"$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')]"
}
}
}
Abonnementen
Als u een ARM-sjabloon wilt gebruiken om een nieuw Azure-abonnement in een beheergroep te maken, raadpleegt u:
- Programmatisch Azure Enterprise Overeenkomst-abonnementen maken
- Programmatisch Azure-abonnementen maken voor een Microsoft-klantovereenkomst
- Programmatisch Azure-abonnementen maken voor een Microsoft Partner-overeenkomst
Als u een sjabloon wilt implementeren waarmee een bestaand Azure-abonnement naar een nieuwe beheergroep wordt verplaatst, raadpleegt u Abonnementen verplaatsen in arm-sjabloon
Azure Policy
Aangepaste beleidsdefinities die in de beheergroep worden geïmplementeerd, zijn extensies van de beheergroep. Gebruik de functie extensionResourceId() om de id van een aangepaste beleidsdefinitie op te halen. Ingebouwde beleidsdefinities zijn resources op tenantniveau. Gebruik de functie tenantResourceId() om de id van een ingebouwde beleidsdefinitie op te halen.
In het volgende voorbeeld ziet u hoe u een beleid op beheergroepsniveau definieert en toewijst.
{
"$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'))]"
}
}
]
}
Implementeren in abonnement en resourcegroep
Vanuit een implementatie op beheergroepsniveau kunt u zich richten op een abonnement binnen de beheergroep. In het volgende voorbeeld wordt een resourcegroep binnen een abonnement gemaakt en wordt een opslagaccount geïmplementeerd in die resourcegroep.
{
"$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"
}
}
]
}
}
}
]
}
Volgende stappen
- Zie Azure-rollen toewijzen met behulp van Azure Resource Manager-sjablonen voor meer informatie over het toewijzen van rollen.
- Zie deployASCwithWorkspaceSettings.json voor een voorbeeld van het implementeren van werkruimte-instellingen voor Microsoft Defender voor Cloud.
- U kunt sjablonen ook implementeren op abonnementsniveau en tenantniveau.