ARM şablonlarıyla yönetim grubu dağıtımları

Kuruluşunuz geliştikçe, yönetim grubu düzeyinde kaynak oluşturmak için bir Azure Resource Manager şablonu (ARM şablonu) dağıtabilirsiniz. Örneğin, bir yönetim grubu için ilkeler veya Azure rol tabanlı erişim denetımı (Azure RBAC) tanımlamanız ve atamanız gerekebilir. Yönetim grubu düzeyi şablonları ile, ilkeleri yönetim grubu düzeyinde bildirimli olarak uygulayabilir ve roller atayabilirsiniz.

Desteklenen kaynaklar

Tüm kaynak türleri yönetim grubu düzeyine dağıtılamaz. Bu bölümde hangi kaynak türlerinin desteklendiği listelenmektedir.

Azure şemaları için şunu kullanın:

Azure Ilkesi için şunu kullanın:

Azure rol tabanlı erişim denetimi (Azure RBAC) için şunu kullanın:

Aboneliklere veya kaynak gruplarına dağıtan iç içe şablonlar için şunları kullanın:

Kaynaklarınızı yönetmek için şunları kullanın:

Yönetim grupları, kiracı düzeyindeki kaynaklardır. Ancak, yeni yönetim grubunun kapsamını kiracı olarak ayarerek bir yönetim grubu dağıtımında yönetim grupları oluşturabilirsiniz. Bkz. Yönetim grubu.

Şema

Yönetim grubu dağıtımları için kullanabileceğiniz şema, kaynak grubu dağıtımları için şemadan farklıdır.

Şablonlar için şunları kullanın:

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

Bir parametre dosyasının şeması tüm dağıtım kapsamları için aynıdır. Parametre dosyaları için şunları kullanın:

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

Dağıtım komutları

Bir yönetim grubuna dağıtmak için yönetim grubu dağıtım komutlarını kullanın.

Azure CLI için az deployment mg create kullanın:

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"

ARM şablonlarını dağıtmaya ilişkin dağıtım komutları ve seçenekleri hakkında daha ayrıntılı bilgi için bkz:

Dağıtım konumu ve adı

Yönetim grubu düzeyinde dağıtımlar için dağıtım için bir konum sağlamalısınız. Dağıtımın konumu, dağıtan kaynakların konumdan ayrıdır. Dağıtım konumu, dağıtım verisi depolamanın nerede olduğunu belirtir. Abonelik ve kiracı dağıtımları için de bir konum gerekir. Kaynak grubu dağıtımları için, dağıtım verilerini depolamak için kaynak grubunun konumu kullanılır.

Dağıtım için bir ad veya varsayılan dağıtım adını kullanabilirsiniz. Varsayılan ad, şablon dosyasının adıdır. Örneğin, üzerindeazuredeploy.jsadlı bir şablon dağıtarak azuredeploy varsayılan dağıtım adını oluşturur.

Her dağıtım adı için konum sabittir. Farklı bir konumda aynı adla mevcut bir dağıtım olduğunda bir konumda dağıtım oluşturamalısınız. Örneğin, centralus'ta deployment1 adıyla bir yönetim grubu dağıtımı oluşturmanız, daha sonra deployment1 adıyla ancak westus konumunu kullanarak başka bir dağıtım oluşturamalısınız. Hata kodunu alırsanız, bu ad için farklı bir ad veya InvalidDeploymentLocation önceki dağıtımla aynı konumu kullanın.

Dağıtım kapsamları

Bir yönetim grubuna dağıtım yapmak için kaynakları şu kaynaklara dağıtın:

  • işlemden hedef yönetim grubu
  • kiracıda başka bir yönetim grubu
  • Yönetim grubundaki abonelikler
  • Yönetim grubundaki kaynak grupları
  • kaynak grubu için kiracı

Uzantı kaynağı , dağıtım hedefinden farklı bir hedef kapsamına eklenebilir.

Şablonu dağıtan kullanıcının belirtilen kapsama erişimi olmalıdır.

Bu bölümde, farklı kapsamların nasıl ayarlanacağı gösterilmektedir. Bu farklı kapsamları tek bir şablonda birleştirebilirsiniz.

Hedef yönetim grubuna kapsam

Şablonun kaynaklar bölümünde tanımlanan kaynaklar, dağıtım komutundan yönetim grubuna uygulanır.

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

Kapsamı başka bir yönetim grubuna

Başka bir yönetim grubunu hedeflemek için, iç içe geçmiş bir dağıtım ekleyin ve scope özelliğini belirtin. scopeÖzelliğini, biçiminde bir değer olarak ayarlayın 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": {}
}

Abonelik kapsamı

Ayrıca, abonelikleri bir yönetim grubu içinde de hedefleyebilirsiniz. Şablonu dağıtan kullanıcının belirtilen kapsama erişimi olmalıdır.

Yönetim grubu içinde bir aboneliği hedeflemek için, iç içe geçmiş bir dağıtım ve subscriptionId özelliğini kullanın.

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

Kapsam-kaynak grubu

Ayrıca, yönetim grubu içindeki kaynak gruplarını da hedefleyebilirsiniz. Şablonu dağıtan kullanıcının belirtilen kapsama erişimi olmalıdır.

Yönetim grubu içindeki bir kaynak grubunu hedeflemek için, iç içe geçmiş bir dağıtım kullanın. ve subscriptionId özelliklerini resourceGroup ayarlayın. İç içe dağıtım için bir konum ayarlamayın çünkü kaynak grubunun konumunu dağıtıldı.

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

Bir abonelik içinde kaynak grubu oluşturmak ve bu kaynak grubuna bir depolama hesabı dağıtmak için bir yönetim grubu dağıtımı kullanmak için bkz. Aboneliğe vekaynak grubuna dağıtma.

Kiracı kapsamı

Kiracıda kaynak oluşturmak için olarak scope / ayarlayın. Şablonu dağıtan kullanıcının kiracıda dağıtmak için gerekli erişimine sahip olması gerekir.

İç içe dağıtım kullanmak için ve scope location ayarlayın.

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

Ya da kapsamı yönetim grupları gibi / bazı kaynak türleri için olarak da ayarlayın. Yeni bir yönetim grubu oluşturma sonraki bölümde açıklanmıştır.

Yönetim grubu

Bir yönetim grubu dağıtımında bir yönetim grubu oluşturmak için, yönetim grubunun / kapsamını olarak ayarlamalısınız.

Aşağıdaki örnek, kök yönetim grubunda yeni bir yönetim grubu oluşturur.

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

Sonraki örnek, üst olarak belirtilen yönetim grubunda yeni bir yönetim grubu oluşturur. Kapsamın olarak ayarlanmış olduğunu fark / etmek.

{
    "$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": "2020-05-01",
            "scope": "/",
            "location": "eastus",
            "properties": {
                "details": {
                    "parent": {
                        "id": "[tenantResourceId('Microsoft.Management/managementGroups', parameters('parentMG'))]"
                    }
                }
            }
        }
    ],
    "outputs": {
        "output": {
            "type": "string",
            "value": "[parameters('mgName')]"
        }
    }
}

Abonelikler

Bir yönetim grubunda yeni bir Azure aboneliği oluşturmak üzere ARM şablonu kullanmak için bkz:

Mevcut Azure aboneliğini yeni bir yönetim grubuna taşımaya yarayan bir şablon dağıtmak için bkz. ARM şablonunda abonelikleri taşıma

Azure İlkesi

Yönetim grubuna dağıtılan özel ilke tanımları, yönetim grubunun uzantılarıdır. Özel ilke tanımının kimliğini almak için extensionResourceId() işlevini kullanın. Yerleşik ilke tanımları, kiracı düzeyi kaynaklarıdır. Yerleşik bir ilke tanımının KIMLIĞINI almak için, Tenantresourceıd () işlevini kullanın.

Aşağıdaki örnek, yönetim grubu düzeyinde bir ilkenin nasıl tanımlanacağını gösterir ve bunu atar.

{
    "$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": "2019-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": "2019-09-01",
            "dependsOn": [
                "[variables('policyDefinition')]"
            ],
            "properties": {
                "scope": "[variables('mgScope')]",
                "policyDefinitionId": "[extensionResourceId(variables('mgScope'), 'Microsoft.Authorization/policyDefinitions', variables('policyDefinition'))]"
            }
        }
    ]
}

Aboneliğe ve kaynak grubuna dağıtın

Yönetim grubu düzeyi dağıtımından, yönetim grubu içinde bir aboneliği hedefleyebilirsiniz. Aşağıdaki örnek, bir abonelik içinde bir kaynak grubu oluşturur ve bu kaynak grubuna bir depolama hesabı dağıtır.

{
    "$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": "2020-10-01",
            "name": "nestedSub",
            "location": "[parameters('nestedLocation')]",
            "subscriptionId": "[parameters('nestedSubId')]",
            "properties": {
                "mode": "Incremental",
                "template": {
                    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
                    "contentVersion": "1.0.0.0",
                    "parameters": {
                    },
                    "variables": {
                    },
                    "resources": [
                        {
                            "type": "Microsoft.Resources/resourceGroups",
                            "apiVersion": "2020-10-01",
                            "name": "[parameters('nestedRG')]",
                            "location": "[parameters('nestedLocation')]"
                        }
                    ]
                }
            }
        },
        {
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2020-10-01",
            "name": "nestedRG",
            "subscriptionId": "[parameters('nestedSubId')]",
            "resourceGroup": "[parameters('nestedRG')]",
            "dependsOn": [
                "nestedSub"
            ],
            "properties": {
                "mode": "Incremental",
                "template": {
                    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
                    "contentVersion": "1.0.0.0",
                    "resources": [
                        {
                            "type": "Microsoft.Storage/storageAccounts",
                            "apiVersion": "2019-04-01",
                            "name": "[parameters('storageAccountName')]",
                            "location": "[parameters('nestedLocation')]",
                            "kind": "StorageV2",
                            "sku": {
                                "name": "Standard_LRS"
                            }
                        }
                    ]
                }
            }
        }
    ]
}

Sonraki adımlar