Penyebaran grup manajemen dengan file Bicep
Artikel ini menjelaskan cara menetapkan cakupan dengan Bicep saat menyebarkan ke grup manajemen.
Ketika organisasi Anda telah matang, Anda dapat menggunakan file Bicep 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.
Sumber daya pelatihan
Jika Anda lebih suka mempelajari tentang cakupan penyebaran melalui panduan langkah demi langkah, lihat Menyebarkan sumber daya ke langganan, grup manajemen, dan penyewa dengan menggunakan Bicep.
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.
Menetapkan cakupan
Untuk menetapkan cakupan ke grup manajemen, gunakan:
targetScope = 'managementGroup'
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 Azure CLI
- Menyebarkan sumber daya dengan templat ARM dan Azure PowerShell
- 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 main.bicep akan membuat nama penyebaran default main.
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
Sumber daya ekstensi dapat dicakup ke target yang berbeda dari target penyebaran.
Pengguna yang menyebarkan templat harus memiliki akses ke cakupan yang ditentukan.
Cakupan ke grup manajemen
Untuk menyebarkan sumber daya ke grup manajemen target, tambahkan sumber daya tersebut dengan kata kunci resource
.
targetScope = 'managementGroup'
// policy definition created in the management group
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2023-04-01' = {
...
}
Untuk menargetkan grup manajemen lain, tambahkan modul. Gunakan fungsi managementGroup untuk menetapkan properti scope
. Berikan nama grup manajemen.
targetScope = 'managementGroup'
param otherManagementGroupName string
// module deployed at management group level but in a different management group
module exampleModule 'module.bicep' = {
name: 'deployToDifferentMG'
scope: managementGroup(otherManagementGroupName)
}
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 modul. Gunakan fungsi langganan untuk menetapkan properti scope
. Berikan ID langganan.
targetScope = 'managementGroup'
param subscriptionID string
// module deployed to subscription in the management group
module exampleModule 'module.bicep' = {
name: 'deployToSub'
scope: subscription(subscriptionID)
}
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 grup manajemen, tambahkan modul. Gunakan fungsi resourceGroup untuk menetapkan properti scope
. Berikan ID langganan dan nama grup sumber daya.
targetScope = 'managementGroup'
param subscriptionID string
param resourceGroupName string
// module deployed to resource group in the management group
module exampleModule 'module.bicep' = {
name: 'deployToRG'
scope: resourceGroup(subscriptionID, resourceGroupName)
}
Cakupan ke penyewa
Untuk membuat sumber daya di penyewa, tambahkan modul. Gunakan fungsi penyewa untuk mengatur properti scope
. Pengguna yang menyebarkan templat harus memiliki akses yang diperlukan untuk disebarkan di penyewa.
targetScope = 'managementGroup'
// module deployed at tenant level
module exampleModule 'module.bicep' = {
name: 'deployToTenant'
scope: tenant()
}
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 ke penyewa.
Contoh berikut membuat grup manajemen baru di grup manajemen root.
targetScope = 'managementGroup'
param mgName string = 'mg-${uniqueString(newGuid())}'
resource newMG 'Microsoft.Management/managementGroups@2023-04-01' = {
scope: tenant()
name: mgName
properties: {}
}
output newManagementGroup string = mgName
Contoh berikutnya membuat grup manajemen baru di grup manajemen yang ditargetkan untuk penyebaran. Ia menggunakan fungsi grup manajemen.
targetScope = 'managementGroup'
param mgName string = 'mg-${uniqueString(newGuid())}'
resource newMG 'Microsoft.Management/managementGroups@2023-04-01' = {
scope: tenant()
name: mgName
properties: {
details: {
parent: {
id: managementGroup().id
}
}
}
}
output newManagementGroup string = 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 cara menetapkannya.
targetScope = 'managementGroup'
@description('An array of the allowed locations, all other locations will be denied by the created policy.')
param allowedLocations array = [
'australiaeast'
'australiasoutheast'
'australiacentral'
]
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2023-04-01' = {
name: 'locationRestriction'
properties: {
policyType: 'Custom'
mode: 'All'
parameters: {}
policyRule: {
if: {
not: {
field: 'location'
in: allowedLocations
}
}
then: {
effect: 'deny'
}
}
}
}
resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
name: 'locationAssignment'
properties: {
policyDefinitionId: policyDefinition.id
}
}
Langkah berikutnya
Untuk mempelajari tentang cakupan lain, lihat: