Nasazení skupin pro správu pomocí šablon ARM

S tím, jak vaše organizace dospívá, můžete nasadit šablonu Azure Resource Manager (šablonu ARM) a vytvářet prostředky na úrovni skupiny pro správu. Může být například potřeba definovat a přiřadit zásady nebo řízení přístupu na základě role v Azure (Azure RBAC) pro skupinu pro správu. Pomocí šablon na úrovni skupiny pro správu můžete deklarativně používat zásady a přiřazovat role na úrovni skupiny pro správu.

Tip

Doporučujeme Bicep , protože nabízí stejné funkce jako šablony ARM a syntaxe se snadněji používá. Další informace najdete v tématu Nasazení skupin pro správu.

Podporované prostředky

Na úrovni skupiny pro správu se nedají nasadit všechny typy prostředků. Tato část obsahuje seznam podporovaných typů prostředků.

Pro Azure Blueprints použijte:

Pro Azure Policy použijte:

Pro řízení přístupu použijte:

Pro vnořené šablony, které se nasazují do předplatných nebo skupin prostředků, použijte:

Ke správě prostředků použijte:

Skupiny pro správu jsou prostředky na úrovni tenanta. Skupiny pro správu ale můžete vytvořit v nasazení skupiny pro správu nastavením oboru nové skupiny pro správu na tenanta. Viz Skupina pro správu.

Schéma

Schéma, které používáte pro nasazení skupin pro správu, se liší od schématu pro nasazení skupin prostředků.

Pro šablony použijte:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
  ...
}

Schéma souboru parametrů je stejné pro všechny obory nasazení. Pro soubory parametrů použijte:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  ...
}

Příkazy nasazení

K nasazení do skupiny pro správu použijte příkazy pro nasazení skupiny pro správu.

Pro Azure CLI použijte 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"

Podrobnější informace o příkazech nasazení a možnostech nasazení šablon ARM najdete tady:

Umístění a název nasazení

Pro nasazení na úrovni skupiny pro správu musíte zadat umístění pro nasazení. Umístění nasazení je oddělené od umístění prostředků, které nasazujete. Umístění nasazení určuje, kam se mají ukládat data nasazení. Nasazení předplatného a tenanta také vyžadují umístění. U nasazení skupin prostředků se umístění skupiny prostředků používá k ukládání dat nasazení.

Můžete zadat název nasazení nebo použít výchozí název nasazení. Výchozí název je název souboru šablony. Například nasazení šablony s názvem azuredeploy.json vytvoří výchozí název nasazení azuredeploy.

Pro každý název nasazení je umístění neměnné. Nasazení nemůžete vytvořit v jednom umístění, pokud existuje existující nasazení se stejným názvem v jiném umístění. Pokud například vytvoříte nasazení skupiny pro správu s názvem deployment1 v centralus, nebudete později moct vytvořit další nasazení s názvem deployment1 , ale umístěním westus. Pokud se zobrazí kód InvalidDeploymentLocationchyby , použijte pro tento název jiný název nebo stejné umístění jako v předchozím nasazení.

Obory nasazení

Při nasazování do skupiny pro správu můžete prostředky nasadit do:

  • cílová skupina pro správu z operace
  • jiná skupina pro správu v tenantovi
  • předplatná ve skupině pro správu
  • skupiny prostředků ve skupině pro správu
  • tenant pro skupinu prostředků

Prostředek rozšíření je možné omezit na cíl, který se liší od cíle nasazení.

Uživatel, který šablonu nasazuje, musí mít přístup k zadanému oboru.

V této části se dozvíte, jak zadat různé obory. Tyto různé obory můžete zkombinovat do jedné šablony.

Rozsah na cílovou skupinu pro správu

Prostředky definované v části resources šablony se použijí na skupinu pro správu z příkazu nasazení.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    management-group-resources-default
  ],
  "outputs": {}
}

Obor na jinou skupinu pro správu

Pokud chcete cílit na jinou skupinu pro správu, přidejte vnořené nasazení a zadejte scope vlastnost. scope Nastavte vlastnost na hodnotu ve formátu 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": {}
}

Rozsah předplatného

Můžete také cílit na předplatná v rámci skupiny pro správu. Uživatel, který šablonu nasazuje, musí mít přístup k zadanému oboru.

Pokud chcete cílit na předplatné v rámci skupiny pro správu, použijte vnořené nasazení a subscriptionId vlastnost .

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

Obor na skupinu prostředků

Můžete také cílit na skupiny prostředků v rámci skupiny pro správu. Uživatel, který šablonu nasazuje, musí mít přístup k zadanému oboru.

Pokud chcete cílit na skupinu prostředků v rámci skupiny pro správu, použijte vnořené nasazení. subscriptionId Nastavte vlastnosti aresourceGroup. Nenastavujte umístění vnořeného nasazení, protože je nasazené v umístění skupiny prostředků.

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

Pokud chcete použít nasazení skupiny pro správu k vytvoření skupiny prostředků v rámci předplatného a nasazení účtu úložiště do této skupiny prostředků, přečtěte si téma Nasazení do předplatného a skupiny prostředků.

Rozsah na tenanta

Pokud chcete v tenantovi vytvářet prostředky, nastavte na scope/. Uživatel, který šablonu nasazuje, musí mít požadovaný přístup k nasazení v tenantovi.

Pokud chcete použít vnořené nasazení, nastavte scope a 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": {}
}

Nebo můžete nastavit rozsah / na pro některé typy prostředků, jako jsou skupiny pro správu. Vytvoření nové skupiny pro správu je popsáno v další části.

Skupina pro správu

Pokud chcete vytvořit skupinu pro správu v nasazení skupiny pro správu, musíte pro skupinu pro správu nastavit obor / na .

Následující příklad vytvoří novou skupinu pro správu v kořenové skupině pro správu.

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

Další příklad vytvoří novou skupinu pro správu ve skupině pro správu určené jako nadřazená. Všimněte si, že obor je nastavený na /.

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

Předplatná

Pokud chcete použít šablonu ARM k vytvoření nového předplatného Azure ve skupině pro správu, přečtěte si téma:

Pokud chcete nasadit šablonu, která přesune stávající předplatné Azure do nové skupiny pro správu, přečtěte si téma Přesun předplatných v šabloně ARM.

Azure Policy

Vlastní definice zásad nasazené do skupiny pro správu jsou rozšíření skupiny pro správu. K získání ID definice vlastní zásady použijte funkci extensionResourceId(). Předdefinované definice zásad jsou prostředky na úrovni tenanta. Pokud chcete získat ID předdefinované definice zásad, použijte funkci tenantResourceId().

Následující příklad ukazuje, jak definovat zásadu na úrovni skupiny pro správu a přiřadit ji.

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

Nasazení do předplatného a skupiny prostředků

Z nasazení na úrovni skupiny pro správu můžete cílit na předplatné v rámci skupiny pro správu. Následující příklad vytvoří skupinu prostředků v rámci předplatného a nasadí do této skupiny prostředků účet úložiště.

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

Další kroky