Penyebaran grup sumber daya dengan templat ARM
Saat organisasi Anda matang, Anda dapat menyebarkan templat Azure Resource Manager (templat ARM) untuk membuat sumber daya di tingkat grup manajemen. Misalnya, Anda mungkin perlu menentukan dan menetapkan kebijakan atau kontrol akses berbasis peran Azure (Azure RBAC) untuk grup manajemen. Dengan templat tingkat grup manajemen, Anda dapat menerapkan kebijakan secara deklaratif dan menetapkan peran di tingkat grup manajemen.
Tip
Kami merekomendasikan Bicep karena menawarkan kemampuan yang sama dengan templat ARM dan sintaksnya lebih mudah digunakan. Untuk mempelajari lebih lanjut, lihat penyebaran grup manajemen.
Sumber daya yang didukung
Tidak semua jenis sumber daya dapat disebarkan ke tingkat grup manajemen. Bagian ini mencantumkan jenis sumber daya mana yang didukung.
Untuk Azure Blueprints, gunakan:
Untuk Azure Policy, gunakan:
Untuk kontrol akses, gunakan:
- privateLinkAssociations
- roleAssignments
- roleAssignmentScheduleRequests
- roleDefinitions
- roleEligibilityScheduleRequests
- roleManagementPolicyAssignments
Untuk templat bersarang yang disebarkan ke langganan, langganan, atau grup sumber daya, gunakan:
Untuk mengelola sumber daya Anda, gunakan:
Grup manajemen adalah sumber daya tingkat penyewa. Namun, Anda dapat membuat grup manajemen dalam penyebaran grup manajemen dengan menetapkan lingkup grup manajemen baru ke penyewa. Lihat Grup manajemen.
Skema
Skema yang Anda gunakan untuk penyebaran tingkat langganan berbeda dengan skema untuk penyebaran grup sumber daya.
Untuk templat, gunakan:
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
...
}
Skema untuk file parameter sama untuk semua cakupan penyebaran. Untuk file parameter, gunakan:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
...
}
Perintah penyebaran
Untuk menyebarkan ke grup manajemen, gunakan perintah penyebaran grup manajemen.
Untuk Azure CLI, gunakan 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"
Untuk informasi selengkapnya terkait perintah penyebaran dan opsi untuk menyebarkan templat ARM, lihat:
- Menyebarkan sumber daya dengan templat ARM dan portal Microsoft Azure
- Menyebarkan sumber daya dengan templat ARM dan Azure CLI
- Menyebarkan sumber daya dengan templat ARM dan Azure PowerShell
- Menyebarkan sumber daya dengan templat ARM dan REST API Azure Resource Manager
- Menggunakan tombol penyebaran untuk menyebarkan templat dari repositori GitHub
- Menyebarkan templat ARM dari Cloud Shell
Lokasi dan nama penyebaran
Untuk penyebaran tingkat penyewa, Anda harus menyediakan lokasi untuk penyebaran. Lokasi penyebaran terpisah dari lokasi sumber daya yang Anda sebarkan. Lokasi penyebaran menentukan tempat menyimpan data penyebaran. Penyebaran langganan dan penyewa juga memerlukan lokasi. Untuk penyebaran grup sumber daya, lokasi grup sumber daya digunakan untuk menyimpan data penyebaran.
Anda dapat memberikan nama untuk penyebaran atau menggunakan nama penyebaran default. Nama default adalah nama file templat. Misalnya, menyebarkan templat bernama azuredeploy.json akan membuat nama penyebaran azuredeploy secara default.
Untuk setiap nama penyebaran, lokasi tidak dapat diubah. Anda tidak dapat membuat penyebaran di satu lokasi saat ada penyebaran yang ada dengan nama yang sama di lokasi lain. Misalnya, jika Anda membuat penyebaran penyewa dengan nama deployment1 di centralus, Anda nantinya tidak dapat membuat penyebaran lain dengan nama deployment1 tetapi lokasinya di westus. Jika Anda mendapatkan kode kesalahan InvalidDeploymentLocation
, gunakan nama yang berbeda atau lokasi yang sama dengan penyebaran sebelumnya untuk nama tersebut.
Cakupan penyebaran
Saat menyebarkan ke grup manajemen, Anda bisa menggunakan menyebarkan sumber daya untuk:
- grup manajemen target dari operasi
- grup manajemen lain dalam penyewa
- langganan dalam grup manajemen
- grup sumber daya dalam grup manajemen
- penyewa untuk grup sumber daya
Satu-satunya transisi cakupan yang dilarang terjadi dari Grup Sumber Daya ke Grup Manajemen, atau dari Langganan ke Grup Manajemen.
Sumber daya ekstensi dapat dicakup ke target yang berbeda dari target penyebaran.
Pengguna yang menyebarkan templat harus memiliki akses ke cakupan yang ditentukan.
Bagian ini memperlihatkan cara menentukan cakupan yang berbeda. Anda dapat menggabungkan cakupan yang berbeda ini dalam templat tunggal.
Cakupan ke grup manajemen target
Sumber daya yang ditentukan dalam bagian sumber daya templat diterapkan ke grup manajemen dari perintah penyebaran.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
management-group-resources-default
],
"outputs": {}
}
Cakupan ke grup manajemen lainnya
Untuk menargetkan grup manajemen lain, tambahkan penyebaran bersarang dan tentukan properti scope
. Atur properti scope
ke nilai dalam format 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": {}
}
Cakupan ke langganan
Anda juga dapat menargetkan langganan dalam grup manajemen. Pengguna yang menyebarkan templat harus memiliki akses ke cakupan yang ditentukan.
Untuk menargetkan langganan dalam grup manajemen, tambahkan penyebaran bersarang dan properti subscriptionId
.
{
"$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
}
]
}
}
}
]
}
Cakupan ke grup sumber daya
Anda juga dapat menargetkan grup sumber daya dalam penyewa. Pengguna yang menyebarkan templat harus memiliki akses ke cakupan yang ditentukan.
Untuk menargetkan grup sumber daya dalam penyewa, gunakan penyebaran bersarang. Atur properti subscriptionId
dan resourceGroup
. Jangan atur lokasi untuk penyebaran bersarang karena penyebaran dilakukan di lokasi grup sumber daya.
{
"$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
}
]
}
}
}
]
}
Untuk menggunakan penyebaran grup manajemen untuk membuat grup sumber daya dalam langganan dan menggunakan akun penyimpanan ke grup sumber daya tersebut, lihat Menyebarkan ke grup langganan dan sumber daya.
Cakupan ke penyewa
Untuk membuat sumber daya di penyewa, atur scope
ke /
. Pengguna yang menyebarkan templat harus memiliki akses yang diperlukan untuk disebarkan di penyewa.
Untuk menggunakan penyebaran bersarang, atur scope
dan 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": {}
}
Atau, Anda dapat mengatur cakupan ke /
untuk beberapa jenis sumber daya, seperti grup manajemen. Membuat grup manajemen baru dijelaskan di bagian berikutnya.
Grup manajemen
Untuk membuat grup manajemen dalam penyebaran grup manajemen, Anda harus mengatur cakupan /
untuk grup manajemen.
Contoh berikut membuat grup manajemen baru di grup manajemen root.
{
"$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')]"
}
}
}
Contoh berikutnya membuat grup manajemen baru di grup manajemen yang ditentukan sebagai induk. Perhatikan bahwa ruang lingkup diatur ke /
.
{
"$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')]"
}
}
}
Langganan
Untuk menggunakan templat ARM untuk membuat langganan Azure baru di grup manajemen, lihat:
- Secara terprogram membuat langganan Perjanjian Enterprise Azure
- Secara terprogram membuat langganan Azure untuk Perjanjian Pelanggan Microsoft
- Secara terprogram membuat langganan Azure untuk Perjanjian Mitra Microsoft
Untuk menyebarkan templat yang memindahkan langganan Azure yang sudah ada ke grup manajemen baru, lihat Memindahkan langganan di templat ARM
Kebijakan Azure
Definisi kebijakan kustom yang disebarkan ke grup manajemen adalah ekstensi dari grup manajemen. Untuk mendapatkan ID definisi kebijakan kustom, gunakan fungsi extensionResourceId(). Definisi kebijakan bawaan adalah sumber daya tingkat penyewa. Untuk mendapatkan ID definisi kebijakan kustom, gunakan fungsi tenantResourceId().
Contoh berikut menunjukkan cara menentukan kebijakan di tingkat grup manajemen, dan menetapkannya.
{
"$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'))]"
}
}
]
}
Menyebarkan ke langganan dan grup sumber daya
Dari penyebaran tingkat grup manajemen, Anda dapat menargetkan langganan dalam grup manajemen. Contoh berikut membuat grup sumber daya ke dalam langganan dan menyebarkan akun penyimpanan ke grup sumber daya.
{
"$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"
}
}
]
}
}
}
]
}
Langkah berikutnya
- Untuk mempelajari cara menetapkan peran, lihat Menetapkan peran Azure menggunakan templat Azure Resource Manager.
- Untuk contoh penyebaran setelan ruang kerja untuk Pertahanan Microsoft untuk Cloud, lihat deployASCwithWorkspaceSettings.json.
- Anda juga dapat menggunakan templat di tingkat langganan dan tingkat penyewa.