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

Kuruluş olgunlaştıkça, yönetim grubu düzeyinde Azure Resource Manager oluşturmak için bir Azure Resource Manager şablonu (ARM şablonu) dağıtabilirsiniz. Örneğin, bir yönetim grubu için ilke tanımlamanız ve atamanız veya Azure rol tabanlı erişim denetimi (Azure RBAC) gerekir. Yönetim grubu düzeyi şablonlarıyla, ilkeleri bildirimli olarak uygulayabilir ve yönetim grubu düzeyinde roller atabilirsiniz.

Desteklenen kaynaklar

Tüm kaynak türleri yönetim grubu düzeyinde dağıtılabilir değildir. Bu bölümde, hangi kaynak türlerinin desteklen olduğu listedir.

Daha Azure Blueprints için şunları kullanın:

Daha Azure İlkesi için şunları kullanın:

Erişim denetimi için şunları 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, azuredeploy.json adlı bir şablonun dağıtımı 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 grubunda abonelikler
  • yönetim grubunda kaynak grupları
  • kaynak grubunun kiracısı

Uzantı kaynağının kapsamı, dağıtım hedefinden farklı bir hedef olarak kapsamlandı.

Şablonu dağıtan kullanıcının belirtilen kapsama erişimi olması gerekir.

Bu bölümde, farklı kapsamların nasıl belirt İşlenli olduğu gösterir. Bu farklı kapsamları tek bir şablonda birleştirebilirsiniz.

Kapsamdan hedef yönetim grubuna

Ş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 olarak başka bir yönetim grubu

Başka bir yönetim grubunu hedeflemek için iç içe geçmiş bir dağıtım ekleyin ve özelliğini scope belirtin. özelliğini scope biçiminde bir değer olarak Microsoft.Management/managementGroups/<mg-name> ayarlayın.

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

Kapsamdan aboneliğe

Bir yönetim grubu içindeki abonelikleri de hedef alabilirsiniz. Şablonu dağıtan kullanıcının belirtilen kapsama erişimi olması gerekir.

Yönetim grubu içindeki bir aboneliği hedeflemek için iç içe dağıtım ve özelliğini subscriptionId 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
            }
          ]
        }
      }
    }
  ]
}

Kapsamdan kaynak grubuna

Kaynak gruplarını yönetim grubu içinde de hedefleyebilirsiniz. Şablonu dağıtan kullanıcının belirtilen kapsama erişimi olması gerekir.

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 bulunduğu konuma dağıtılır.

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

Abonelikler

Arm şablonunu kullanarak bir yönetim grubunda yeni bir Azure aboneliği oluşturmak 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üzeyinde kaynaklardır. Yerleşik ilke tanımının kimliğini almak için tenantResourceId() işlevini kullanın.

Aşağıdaki örnekte, bir ilkenin yönetim grubu düzeyinde nasıl tanımladığınız ve ilkeyi nasıl atadığınız gösterir.

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

Aboneliğe ve kaynak grubuna dağıtma

Yönetim grubu düzeyinde dağıtımdan, yönetim grubu içindeki 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": "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"
              }
            }
          ]
        }
      }
    }
  ]
}

Sonraki adımlar