Udostępnij za pośrednictwem


Wdrożenia grup zarządzania przy użyciu szablonów usługi ARM

W miarę dojrzewania organizacji można wdrożyć szablon usługi Azure Resource Manager (szablon usługi ARM) w celu utworzenia zasobów na poziomie grupy zarządzania. Na przykład może być konieczne zdefiniowanie i przypisanie zasad lub kontroli dostępu opartej na rolach (RBAC) platformy Azure dla grupy zarządzania. Szablony na poziomie grupy zarządzania umożliwiają deklaratywne stosowanie zasad i przypisywanie ról na poziomie grupy zarządzania.

Napiwek

Zalecamy Bicep , ponieważ oferuje te same możliwości co szablony usługi ARM, a składnia jest łatwiejsza w użyciu. Aby dowiedzieć się więcej, zobacz Wdrożenia grup zarządzania.

Obsługiwane zasoby

Nie wszystkie typy zasobów można wdrożyć na poziomie grupy zarządzania. Ta sekcja zawiera listę obsługiwanych typów zasobów.

W przypadku usługi Azure Blueprints użyj:

W przypadku usługi Azure Policy użyj:

W przypadku kontroli dostępu użyj:

W przypadku szablonów zagnieżdżonych wdrażanych w subskrypcjach lub grupach zasobów użyj:

Do zarządzania zasobami użyj:

Grupy zarządzania to zasoby na poziomie dzierżawy. Można jednak utworzyć grupy zarządzania we wdrożeniu grupy zarządzania, ustawiając zakres nowej grupy zarządzania na dzierżawę. Zobacz Grupa zarządzania.

Schemat

Schemat używany do wdrożeń grup zarządzania różni się od schematu wdrożeń grup zasobów.

W przypadku szablonów użyj:

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

Schemat pliku parametrów jest taki sam dla wszystkich zakresów wdrożenia. W przypadku plików parametrów użyj:

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

Polecenia wdrażania

Aby wdrożyć w grupie zarządzania, użyj poleceń wdrażania grupy zarządzania.

W przypadku interfejsu wiersza polecenia platformy Azure użyj polecenia 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"

Aby uzyskać bardziej szczegółowe informacje o poleceniach wdrażania i opcjach wdrażania szablonów usługi ARM, zobacz:

Lokalizacja i nazwa wdrożenia

W przypadku wdrożeń na poziomie grupy zarządzania należy podać lokalizację wdrożenia. Lokalizacja wdrożenia jest oddzielona od lokalizacji wdrażanych zasobów. Lokalizacja wdrożenia określa miejsce przechowywania danych wdrożenia. Wdrożenia subskrypcji i dzierżawy również wymagają lokalizacji. W przypadku wdrożeń grup zasobów lokalizacja grupy zasobów jest używana do przechowywania danych wdrożenia.

Możesz podać nazwę wdrożenia lub użyć domyślnej nazwy wdrożenia. Domyślna nazwa to nazwa pliku szablonu. Na przykład wdrożenie szablonu o nazwie azuredeploy.json powoduje utworzenie domyślnej nazwy wdrożenia azuredeploy.

Dla każdej nazwy wdrożenia lokalizacja jest niezmienna. Nie można utworzyć wdrożenia w jednej lokalizacji, gdy istnieje wdrożenie o tej samej nazwie w innej lokalizacji. Jeśli na przykład utworzysz wdrożenie grupy zarządzania o nazwie deployment1 w centralus, nie będzie można później utworzyć innego wdrożenia z nazwą deployment1, ale lokalizacją westus. Jeśli zostanie wyświetlony kod InvalidDeploymentLocationbłędu , użyj innej nazwy lub tej samej lokalizacji co poprzednie wdrożenie dla tej nazwy.

Zakresy wdrażania

Podczas wdrażania w grupie zarządzania można wdrożyć zasoby w:

  • docelowa grupa zarządzania z operacji
  • innej grupy zarządzania w dzierżawie
  • subskrypcje w grupie zarządzania
  • grupy zasobów w grupie zarządzania
  • dzierżawa dla grupy zasobów

Jedyne zabronione przejścia zakresu mają miejsce z grupy zasobów do grupy zarządzania lub z subskrypcji do grupy zarządzania.

Zasób rozszerzenia może być o określonym zakresie dla miejsca docelowego, który różni się od docelowego wdrożenia.

Użytkownik wdrażający szablon musi mieć dostęp do określonego zakresu.

W tej sekcji przedstawiono sposób określania różnych zakresów. Te różne zakresy można połączyć w jednym szablonie.

Zakres do docelowej grupy zarządzania

Zasoby zdefiniowane w sekcji zasobów szablonu są stosowane do grupy zarządzania z polecenia wdrożenia.

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

Zakres do innej grupy zarządzania

Aby wskazać inną grupę zarządzania, dodaj zagnieżdżone wdrożenie i określ scope właściwość . scope Ustaw właściwość na wartość w formacie 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": {}
}

Zakres subskrypcji

Możesz również kierować subskrypcje w grupie zarządzania. Użytkownik wdrażający szablon musi mieć dostęp do określonego zakresu.

Aby zastosować subskrypcję w grupie zarządzania, użyj zagnieżdżonego wdrożenia i subscriptionId właściwości .

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

Zakres do grupy zasobów

Grupy zasobów można również określić w grupie zarządzania. Użytkownik wdrażający szablon musi mieć dostęp do określonego zakresu.

Aby zastosować grupę zasobów w grupie zarządzania, użyj zagnieżdżonego wdrożenia. subscriptionId Ustaw właściwości iresourceGroup. Nie ustawiaj lokalizacji dla zagnieżdżonego wdrożenia, ponieważ jest wdrożona w lokalizacji grupy zasobów.

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

Aby użyć wdrożenia grupy zarządzania do tworzenia grupy zasobów w ramach subskrypcji i wdrażania konta magazynu w tej grupie zasobów, zobacz Wdrażanie w subskrypcji i grupie zasobów.

Zakres do dzierżawy

Aby utworzyć zasoby w dzierżawie, ustaw wartość scope/. Użytkownik wdrażający szablon musi mieć wymagany dostęp do wdrożenia w dzierżawie.

Aby użyć zagnieżdżonego wdrożenia, ustaw i scopelocation.

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

Można też ustawić zakres na / dla niektórych typów zasobów, takich jak grupy zarządzania. Tworzenie nowej grupy zarządzania jest opisane w następnej sekcji.

Grupa zarządzania

Aby utworzyć grupę zarządzania we wdrożeniu grupy zarządzania, należy ustawić zakres dla / grupy zarządzania.

Poniższy przykład tworzy nową grupę zarządzania w głównej grupie zarządzania.

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

W następnym przykładzie zostanie utworzona nowa grupa zarządzania w grupie zarządzania określonej jako nadrzędna. Zwróć uwagę, że zakres jest ustawiony na /wartość .

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

Subskrypcje

Aby użyć szablonu usługi ARM do utworzenia nowej subskrypcji platformy Azure w grupie zarządzania, zobacz:

Aby wdrożyć szablon, który przenosi istniejącą subskrypcję platformy Azure do nowej grupy zarządzania, zobacz Przenoszenie subskrypcji w szablonie usługi ARM

Azure Policy

Niestandardowe definicje zasad wdrożone w grupie zarządzania to rozszerzenia grupy zarządzania. Aby uzyskać identyfikator niestandardowej definicji zasad, użyj funkcji extensionResourceId(). Wbudowane definicje zasad to zasoby na poziomie dzierżawy. Aby uzyskać identyfikator wbudowanej definicji zasad, użyj funkcji tenantResourceId().

W poniższym przykładzie pokazano, jak zdefiniować zasady na poziomie grupy zarządzania i przypisać je.

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

Wdrażanie w subskrypcji i grupie zasobów

W ramach wdrożenia na poziomie grupy zarządzania można wybrać subskrypcję w grupie zarządzania. Poniższy przykład tworzy grupę zasobów w ramach subskrypcji i wdraża konto magazynu w tej grupie zasobów.

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

Następne kroki