ARM şablonlarıyla yönetim grubu dağıtımları
Kuruluşunuz büyüdükç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 denetimi (Azure RBAC) tanımlamanız ve atamanız gerekebilir. Yönetim grubu düzeyi şablonlarıyla ilkeleri bildirimli olarak uygulayabilir ve yönetim grubu düzeyinde roller atayabilirsiniz.
İpucu
ARM şablonlarıyla aynı özellikleri sunduğundan ve söz diziminin kullanımı daha kolay olduğundan Bicep'i öneririz. Daha fazla bilgi edinmek için bkz . yönetim grubu dağıtımları.
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 listelenir.
Azure Blueprints için şunu kullanın:
Azure İlkesi için şunu kullanın:
Erişim denetimi için şunu kullanın:
- privateLinkAssociations
- roleAssignments
- roleAssignmentScheduleRequests
- roleDefinitions
- roleEligibilityScheduleRequests
- roleManagementPolicyAssignments
Aboneliklere veya kaynak gruplarına dağıtılan iç içe şablonlar için şunu kullanın:
Kaynaklarınızı yönetmek için şunları kullanın:
Yönetim grupları kiracı düzeyinde kaynaklardır. Ancak, yeni yönetim grubunun kapsamını kiracı olarak ayarlayarak 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 kullandığınız şema, kaynak grubu dağıtımlarının şemasından farklıdır.
Şablonlar için şunu kullanın:
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
...
}
Parametre dosyasının şeması tüm dağıtım kapsamları için aynıdır. Parametre dosyaları için şunu 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 komutunu 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 yönelik dağıtım komutları ve seçenekleri hakkında daha ayrıntılı bilgi için bkz:
- ARM şablonları ve Azure portalı ile kaynakları dağıtma
- ARM şablonları ve Azure CLI ile kaynak dağıtma
- ARM şablonları ve Azure PowerShell ile kaynak dağıtma
- ARM şablonları ve Azure Resource Manager REST API'siyle kaynakları dağıtma
- GitHub deposundan şablonları dağıtmak için dağıtım düğmesi kullanma
- Cloud Shell'den ARM şablonları dağıtma
Dağıtım konumu ve adı
Yönetim grubu düzeyinde dağıtımlar için dağıtım için bir konum sağlamanız gerekir. Dağıtımın konumu, dağıttığınız kaynakların konumundan ayrıdır. Dağıtım konumu, dağıtım verilerinin depolandığı yeri belirtir. Abonelik ve kiracı dağıtımları da bir konum gerektirir. 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 sağlayabilir 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 şablon dağıtılırken azuredeploy varsayılan dağıtım adı oluşturulur.
Her dağıtım adı için konum sabittir. Farklı bir konumda aynı ada sahip mevcut bir dağıtım olduğunda tek bir konumda dağıtım oluşturamazsınız. Örneğin, centralus'ta deployment1 adlı bir yönetim grubu dağıtımı oluşturursanız, daha sonra deployment1 adlı başka bir dağıtım oluşturamazsınız, ancak westus konumuna sahip olursunuz. hata kodunu InvalidDeploymentLocation
alırsanız, bu ad için farklı bir ad veya önceki dağıtımla aynı konumu kullanın.
Dağıtım kapsamları
Bir yönetim grubuna dağıtım yaparken, kaynakları şunlara dağıtabilirsiniz:
- işlemden hedef yönetim grubu
- kiracıdaki başka bir yönetim grubu
- yönetim grubundaki abonelikler
- yönetim grubundaki kaynak grupları
- kaynak grubunun kiracısı
Yasaklanan tek kapsam geçişleri Kaynak Grubundan Yönetim Grubuna veya Abonelikten Yönetim Grubuna gerçekleşir.
Uzantı kaynağının kapsamı, dağıtım hedefinden farklı bir hedef olarak ayarlanabilir.
Şablonu dağıtan kullanıcının belirtilen kapsama erişimi olmalıdır.
Bu bölümde farklı kapsamların nasıl belirtileceğini 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 dağıtım ekleyin ve özelliğini belirtin scope
. scope
özelliğini biçiminde Microsoft.Management/managementGroups/<mg-name>
bir değere 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": "[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": {}
}
Kapsam-abonelik
Ayrıca bir yönetim grubu içindeki abonelikleri de hedefleyebilirsiniz. Şablonu dağıtan kullanıcının belirtilen kapsama erişimi olmalıdır.
Yönetim grubu içindeki bir aboneliği hedeflemek için iç içe 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": "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
}
]
}
}
}
]
}
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 dağıtım kullanın. subscriptionId
ve resourceGroup
özelliklerini ayarlayın. kaynak grubunun konumunda dağıtıldığından iç içe dağıtım için bir konum ayarlamayın.
{
"$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
}
]
}
}
}
]
}
Bir abonelik içinde kaynak grubu oluşturmak ve bu kaynak grubuna depolama hesabı dağıtmak için bir yönetim grubu dağıtımı kullanmak için bkz . Aboneliğe ve kaynak grubuna dağıtma.
Kapsamı kiracıya
Kiracıda kaynak oluşturmak için değerini olarak /
ayarlayınscope
. Şablonu dağıtan kullanıcının kiracıda dağıtmak için gerekli erişime sahip olması gerekir.
İç içe dağıtım kullanmak için ve location
ayarlayınscope
.
{
"$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": {}
}
İsterseniz, yönetim grupları gibi bazı kaynak türleri için kapsamı /
olarak da ayarlayabilirsiniz. Yeni bir yönetim grubu oluşturma işlemi sonraki bölümde açıklanmıştır.
Yönetim grubu
Yönetim grubu dağıtımında bir yönetim grubu oluşturmak için, yönetim grubunun kapsamını /
olarak ayarlamanız gerekir.
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 grup olarak belirtilen yönetim grubunda yeni bir yönetim grubu oluşturur. Kapsamın olarak ayarlandığına /
dikkat edin.
{
"$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
Yönetim grubunda yeni bir Azure aboneliği oluşturmak üzere ARM şablonu kullanmak için bkz:
- Program aracılığıyla Azure Kurumsal Anlaşma abonelikleri oluşturma
- Program aracılığıyla Microsoft Müşteri Sözleşmesi için Azure abonelikleri oluşturma
- Microsoft İş Ortağı Sözleşmesi için program aracılığıyla Azure abonelikleri oluşturma
Mevcut Azure aboneliğini yeni bir yönetim grubuna taşıyan 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ımlanacağı ve nasıl atanacakları gösterilmektedir.
{
"$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
Bir yönetim grubu düzeyinde dağıtımdan, yönetim grubu içindeki bir aboneliği hedefleyebilirsiniz. Aşağıdaki örnek, 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
- Rol atama hakkında bilgi edinmek için bkz . Azure Resource Manager şablonlarını kullanarak Azure rolleri atama.
- Bulut için Microsoft Defender için çalışma alanı ayarlarını dağıtma örneği için bkz. deployASCwithWorkspaceSettings.json.
- Şablonları abonelik düzeyinde ve kiracı düzeyinde de dağıtabilirsiniz.