Penyebaran langganan dengan templat ARM
Untuk menyederhanakan pengelolaan sumber daya, Anda dapat menggunakan templat Azure Resource Manager (templat ARM) untuk menyebarkan sumber daya di tingkat langganan Azure Anda. Misalnya, Anda dapat menyebarkan kebijakan dan kontrol akses berbasis peran Azure (Azure RBAC) ke langganan Anda, yang menerapkannya di seluruh langganan. Anda juga dapat membuat grup sumber daya dalam langganan dan menyebarkan sumber daya ke grup sumber daya dalam langganan.
Catatan
Anda dapat menyebarkan ke 800 grup sumber daya yang berbeda dalam penyebaran tingkat langganan.
Untuk menyebarkan templat di tingkat langganan, gunakan Azure CLI, PowerShell, REST API, atau portal.
Tip
Kami merekomendasikan Bicep karena menawarkan kemampuan yang sama dengan templat ARM dan sintaksnya lebih mudah digunakan. Untuk mempelajari lebih lanjut, lihat penyebaran langganan.
Sumber daya yang didukung
Tidak semua jenis sumber daya dapat disebarkan ke tingkat langganan. Bagian ini mencantumkan jenis sumber daya mana yang didukung.
Untuk Azure Blueprints, gunakan:
Untuk Kebijakan Azure, gunakan:
Untuk kontrol akses, gunakan:
- accessReviewScheduleDefinitions
- accessReviewScheduleSettings
- roleAssignments
- roleAssignmentScheduleRequests
- roleDefinitions
- roleEligibilityScheduleRequests
- roleManagementPolicyAssignments
Untuk templat berlapis yang disebarkan ke grup sumber daya, gunakan:
Untuk membuat grup sumber daya baru, gunakan:
Untuk mengelola langganan Anda, gunakan:
Untuk pemantauan, gunakan:
Untuk keamanan, gunakan:
- advancedThreatProtectionSettings
- alertsSuppressionRules
- assessmentMetadata
- assessments
- autoProvisioningSettings
- connectors
- deviceSecurityGroups
- ingestionSettings
- pricings
- securityContacts
- pengaturan
- workspaceSettings
Jenis lain yang didukung meliputi:
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/2018-05-01/subscriptionDeploymentTemplate.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 langganan, gunakan perintah penyebaran tingkat langganan.
Untuk Azure CLI, gunakan pembuatan sub penyebaran az. Contoh berikut menyebarkan templat untuk membuat grup sumber daya:
az deployment sub create \
--name demoSubDeployment \
--location centralus \
--template-uri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/emptyrg.json" \
--parameters rgName=demoResourceGroup rgLocation=centralus
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 langganan, Anda harus menyediakan lokasi untuk penyebaran. Lokasi penyebaran terpisah dari lokasi sumber daya yang Anda sebarkan. Lokasi penyebaran menentukan tempat menyimpan data penyebaran. Penyebaran grup manajemen 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 langganan 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 langganan, Anda bisa menyebarkan sumber daya untuk:
- langganan target dari operasi
- langganan apa pun di penyewa
- grup sumber daya dalam langganan atau langganan lainnya
- penyewa untuk langganan
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 untuk menargetkan langganan
Untuk menyebarkan sumber daya ke langganan target, tambahkan sumber daya tersebut ke bagian sumber daya templat.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
subscription-level-resources
],
"outputs": {}
}
Untuk contoh penyebaran ke langganan, lihat Membuat grup sumber daya dan Menetapkan definisi kebijakan.
Cakupan ke langganan lain
Untuk menyebarkan sumber daya ke langganan yang berbeda dari langganan dari operasi, tambahkan penyebaran berlapis. Atur properti subscriptionId
ke ID langganan yang ingin Anda sebarkan. Atur properti location
untuk penyebaran berlapis.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"subscriptionId": "00000000-0000-0000-0000-000000000000",
"location": "westus",
"properties": {
"mode": "Incremental",
"template": {
subscription-resources
}
}
}
],
"outputs": {}
}
Cakupan ke grup sumber daya
Untuk menyebarkan sumber daya ke grup sumber daya dalam langganan, tambahkan penyebaran berlapis dan sertakan properti resourceGroup
. Dalam contoh berikut, penyebaran berlapis menargetkan grup sumber daya bernama demoResourceGroup
.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"resourceGroup": "demoResourceGroup",
"properties": {
"mode": "Incremental",
"template": {
resource-group-resources
}
}
}
],
"outputs": {}
}
Untuk contoh penyebaran ke grup sumber daya, lihat Membuat grup sumber daya 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/2018-05-01/subscriptionDeploymentTemplate.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": {}
}
Atau, Anda dapat mengatur cakupan ke /
untuk beberapa jenis sumber daya, seperti grup manajemen.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.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')]"
}
}
}
Untuk informasi selengkapnya, lihat Grup manajemen.
Kelompok Sumber Daya
Membuat grup sumber daya
Untuk membuat grup sumber daya dalam templat ARM, tentukan sumber daya Microsoft.Resources/resourceGroups dengan nama dan lokasi untuk grup sumber daya.
Templat berikut ini membuat grup sumber daya kosong.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"rgName": {
"type": "string"
},
"rgLocation": {
"type": "string"
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"apiVersion": "2022-09-01",
"name": "[parameters('rgName')]",
"location": "[parameters('rgLocation')]",
"properties": {}
}
],
"outputs": {}
}
Gunakan elemen salin dengan grup sumber daya untuk membuat lebih dari satu grup sumber daya.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"rgNamePrefix": {
"type": "string"
},
"rgLocation": {
"type": "string"
},
"instanceCount": {
"type": "int"
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"apiVersion": "2022-09-01",
"location": "[parameters('rgLocation')]",
"name": "[concat(parameters('rgNamePrefix'), copyIndex())]",
"copy": {
"name": "rgCopy",
"count": "[parameters('instanceCount')]"
},
"properties": {}
}
],
"outputs": {}
}
Untuk informasi tentang iterasi sumber daya, lihat Iterasi sumber daya dalam templat ARM, dan Tutorial: Membuat beberapa instans sumber daya dengan templat ARM.
Membuat grup sumber daya dan sumber daya
Untuk membuat grup sumber daya dan menyebarkan sumber daya ke dalamnya, gunakan templat berlapis. Templat berlapis menentukan sumber daya untuk disebarkan ke grup sumber daya. Atur templat berlapis sebagai tergantung pada grup sumber daya untuk memastikan grup sumber daya ada sebelum menyebarkan sumber daya. Anda dapat menyebarkan hingga 800 grup sumber daya.
Contoh berikut membuat grup sumber daya dan menyebarkan akun penyimpanan ke grup sumber daya.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"rgName": {
"type": "string"
},
"rgLocation": {
"type": "string"
},
"storagePrefix": {
"type": "string",
"maxLength": 11
}
},
"variables": {
"storageName": "[format('{0}{1}', parameters('storagePrefix'), uniqueString(subscription().id, parameters('rgName')))]"
},
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"apiVersion": "2022-09-01",
"name": "[parameters('rgName')]",
"location": "[parameters('rgLocation')]",
"properties": {}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-01",
"name": "storageDeployment",
"resourceGroup": "[parameters('rgName')]",
"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": "2022-09-01",
"name": "[variables('storageName')]",
"location": "[parameters('rgLocation')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2"
}
]
}
},
"dependsOn": [
"[resourceId('Microsoft.Resources/resourceGroups/', parameters('rgName'))]"
]
}
]
}
Kebijakan Azure
Menetapkan definisi kebijakan
Contoh berikut menetapkan definisi kebijakan yang sudah ada ke langganan. Jika definisi kebijakan mengambil parameter, maka berikan sebagai objek. Jika definisi kebijakan tidak mengambil parameter, gunakan objek kosong default.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"policyDefinitionID": {
"type": "string"
},
"policyName": {
"type": "string"
},
"policyParameters": {
"type": "object",
"defaultValue": {}
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.Authorization/policyAssignments",
"apiVersion": "2020-03-01",
"name": "[parameters('policyName')]",
"properties": {
"scope": "[subscription().id]",
"policyDefinitionId": "[parameters('policyDefinitionID')]",
"parameters": "[parameters('policyParameters')]"
}
}
]
}
Untuk menyebarkan templat ini dengan Azure CLI, gunakan:
# Built-in policy definition that accepts parameters
definition=$(az policy definition list --query "[?displayName=='Allowed locations'].id" --output tsv)
az deployment sub create \
--name demoDeployment \
--location centralus \
--template-uri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/policyassign.json" \
--parameters policyDefinitionID=$definition policyName=setLocation policyParameters="{'listOfAllowedLocations': {'value': ['westus']} }"
Untuk menyebarkan templat ini dengan PowerShell, gunakan:
$definition = Get-AzPolicyDefinition | Where-Object { $_.Properties.DisplayName -eq 'Allowed locations' }
$locations = @("westus", "westus2")
$policyParams =@{listOfAllowedLocations = @{ value = $locations}}
New-AzSubscriptionDeployment `
-Name policyassign `
-Location centralus `
-TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/policyassign.json" `
-policyDefinitionID $definition.PolicyDefinitionId `
-policyName setLocation `
-policyParameters $policyParams
Membuat dan menetapkan definisi kebijakan
Anda dapat menentukan dan menetapkan definisi kebijakan dalam templat yang sama.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
{
"type": "Microsoft.Authorization/policyDefinitions",
"apiVersion": "2020-03-01",
"name": "locationpolicy",
"properties": {
"policyType": "Custom",
"parameters": {},
"policyRule": {
"if": {
"field": "location",
"equals": "northeurope"
},
"then": {
"effect": "deny"
}
}
}
},
{
"type": "Microsoft.Authorization/policyAssignments",
"apiVersion": "2020-03-01",
"name": "location-lock",
"dependsOn": [
"locationpolicy"
],
"properties": {
"scope": "[subscription().id]",
"policyDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/policyDefinitions', 'locationpolicy')]"
}
}
]
}
Untuk membuat definisi kebijakan di langganan Anda dan menetapkannya ke langganan, gunakan perintah CLI berikut:
az deployment sub create \
--name demoDeployment \
--location centralus \
--template-uri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/policydefineandassign.json"
Untuk menyebarkan templat ini dengan PowerShell, gunakan:
New-AzSubscriptionDeployment `
-Name definePolicy `
-Location centralus `
-TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/policydefineandassign.json"
Azure Blueprints
Membuat definisi cetak biru
Anda dapat membuat definisi cetak biru dari templat.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"blueprintName": {
"defaultValue": "sample-blueprint",
"type": "String",
"metadata": {
"description": "The name of the blueprint definition."
}
}
},
"resources": [
{
"type": "Microsoft.Blueprint/blueprints",
"apiVersion": "2018-11-01-preview",
"name": "[parameters('blueprintName')]",
"properties": {
"targetScope": "subscription",
"description": "Blueprint with a policy assignment artifact.",
"resourceGroups": {
"sampleRg": {
"description": "Resource group to add the assignment to."
}
},
"parameters": {
"listOfResourceTypesNotAllowed": {
"type": "array",
"metadata": {
"displayName": "Resource types to pass to the policy assignment artifact."
},
"defaultValue": [
"Citrix.Cloud/accounts"
]
}
}
}
},
{
"type": "Microsoft.Blueprint/blueprints/artifacts",
"apiVersion": "2018-11-01-preview",
"name": "[concat(parameters('blueprintName'), '/policyArtifact')]",
"kind": "policyAssignment",
"dependsOn": [
"[parameters('blueprintName')]"
],
"properties": {
"displayName": "Blocked Resource Types policy definition",
"description": "Block certain resource types",
"policyDefinitionId": "[tenantResourceId('Microsoft.Authorization/policyDefinitions', '6c112d4e-5bc7-47ae-a041-ea2d9dccd749')]",
"resourceGroup": "sampleRg",
"parameters": {
"listOfResourceTypesNotAllowed": {
"value": "[[parameters('listOfResourceTypesNotAllowed')]"
}
}
}
}
]
}
Untuk membuat definisi cetak biru di langganan Anda, gunakan perintah CLI berikut:
az deployment sub create \
--name demoDeployment \
--location centralus \
--template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/subscription-deployments/blueprints-new-blueprint/azuredeploy.json"
Untuk menyebarkan templat ini dengan PowerShell, gunakan:
New-AzSubscriptionDeployment `
-Name demoDeployment `
-Location centralus `
-TemplateUri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/subscription-deployments/blueprints-new-blueprint/azuredeploy.json"
Kontrol akses
Untuk mempelajari cara menetapkan peran, lihat Menetapkan peran Azure menggunakan templat Azure Resource Manager.
Contoh berikut membuat grup sumber daya, menerapkan kunci ke grup sumber daya, dan menetapkan peran ke utama.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.5.6.12127",
"templateHash": "16815708176905569328"
}
},
"parameters": {
"rgName": {
"type": "string",
"metadata": {
"description": "Name of the resourceGroup to create"
}
},
"rgLocation": {
"type": "string",
"metadata": {
"description": "Location for the resourceGroup"
}
},
"principalId": {
"type": "string",
"metadata": {
"description": "principalId of the user that will be given contributor access to the resourceGroup"
}
},
"roleDefinitionId": {
"type": "string",
"defaultValue": "b24988ac-6180-42a0-ab88-20f7382dd24c",
"metadata": {
"description": "roleDefinition to apply to the resourceGroup - default is contributor"
}
},
"roleAssignmentName": {
"type": "string",
"defaultValue": "[guid(parameters('principalId'), parameters('roleDefinitionId'), parameters('rgName'))]",
"metadata": {
"description": "Unique name for the roleAssignment in the format of a guid"
}
}
},
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"apiVersion": "2019-10-01",
"name": "[parameters('rgName')]",
"location": "[parameters('rgLocation')]",
"tags": {
"Note": "subscription level deployment"
},
"properties": {}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2020-10-01",
"name": "applyLock",
"resourceGroup": "[parameters('rgName')]",
"properties": {
"expressionEvaluationOptions": {
"scope": "inner"
},
"mode": "Incremental",
"parameters": {
"principalId": {
"value": "[parameters('principalId')]"
},
"roleDefinitionId": {
"value": "[parameters('roleDefinitionId')]"
},
"roleAssignmentName": {
"value": "[parameters('roleAssignmentName')]"
}
},
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.5.6.12127",
"templateHash": "6034226420560042393"
}
},
"parameters": {
"principalId": {
"type": "string",
"metadata": {
"description": "principalId of the user that will be given contributor access to the resourceGroup"
}
},
"roleDefinitionId": {
"type": "string",
"metadata": {
"description": "roleDefinition to apply to the resourceGroup - default is contributor"
}
},
"roleAssignmentName": {
"type": "string",
"metadata": {
"description": "Unique name for the roleAssignment in the format of a guid"
}
}
},
"resources": [
{
"type": "Microsoft.Authorization/locks",
"apiVersion": "2016-09-01",
"name": "DontDelete",
"properties": {
"level": "CanNotDelete",
"notes": "Prevent deletion of the resourceGroup"
}
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2020-04-01-preview",
"name": "[guid(parameters('roleAssignmentName'))]",
"properties": {
"roleDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', parameters('roleDefinitionId'))]",
"principalId": "[parameters('principalId')]"
}
}
]
}
},
"dependsOn": [
"[subscriptionResourceId('Microsoft.Resources/resourceGroups', parameters('rgName'))]"
]
}
]
}
Langkah berikutnya
- Untuk contoh penyebaran setelan ruang kerja untuk Pertahanan Microsoft untuk Cloud, lihat deployASCwithWorkspaceSettings.json.
- Contoh templat dapat ditemukan di GitHub.
- Anda juga dapat menyebarkan templat di tingkat grup manajemen dan tingkat penyewa.