Penyebaran langganan dengan file Bicep
Untuk menyederhanakan pengelolaan sumber daya, Anda dapat 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.
Artikel ini menjelaskan cara mengatur cakupan penyebaran ke langganan dalam file Bicep.
Catatan
Anda dapat menyebarkan ke 800 grup sumber daya yang berbeda dalam penyebaran tingkat langganan.
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 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:
Menetapkan cakupan
Untuk mengatur cakupan ke langganan, gunakan:
targetScope = 'subscription'
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-file main.bicep \
--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 Azure CLI
- Menyebarkan sumber daya dengan templat ARM dan Azure PowerShell
- 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 main.json akan membuat nama penyebaran main 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
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 langganan
Untuk menyebarkan sumber daya ke langganan target, tambahkan sumber daya tersebut dengan kata kunci resource
.
targetScope = 'subscription'
// resource group created in target subscription
resource exampleResource 'Microsoft.Resources/resourceGroups@2024-03-01' = {
...
}
Untuk contoh penyebaran ke langganan, lihat Membuat grup sumber daya dengan Bicep dan Menetapkan definisi kebijakan.
Untuk menyebarkan sumber daya ke langganan yang berbeda dari langganan dari operasi, tambahkan modul. Gunakan fungsi langganan untuk menetapkan properti scope
. Berikan properti subscriptionId
ke ID langganan yang ingin Anda sebarkan.
targetScope = 'subscription'
param otherSubscriptionID string
// module deployed at subscription level but in a different subscription
module exampleModule 'module.bicep' = {
name: 'deployToDifferentSub'
scope: subscription(otherSubscriptionID)
}
Cakupan ke grup sumber daya
Untuk menyebarkan sumber daya ke grup sumber daya dalam langganan, tambahkan modul dan atur properti scope
. Jika grup sumber daya sudah ada, gunakan fungsi resourceGroup untuk mengatur nilai cakupan. Berikan nama grup sumber daya.
targetScope = 'subscription'
param resourceGroupName string
module exampleModule 'module.bicep' = {
name: 'exampleModule'
scope: resourceGroup(resourceGroupName)
}
Jika grup sumber daya dibuat dalam file Bicep yang sama, gunakan nama simbolik grup sumber daya untuk mengatur nilai cakupan. Untuk contoh pengaturan cakupan ke nama simbolis, lihat Membuat grup sumber daya dengan Bicep.
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.
Contoh berikut mencakup modul yang disebarkan ke penyewa.
targetScope = 'subscription'
// module deployed at tenant level
module exampleModule 'module.bicep' = {
name: 'deployToTenant'
scope: tenant()
}
Alih-alih menggunakan modul, Anda dapat mengatur cakupan ke tenant()
untuk beberapa jenis sumber daya. Contoh berikut menyebarkan grup manajemen di penyewa.
targetScope = 'subscription'
param mgName string = 'mg-${uniqueString(newGuid())}'
// management group created at tenant
resource managementGroup 'Microsoft.Management/managementGroups@2023-04-01' = {
scope: tenant()
name: mgName
properties: {}
}
output output string = mgName
Untuk informasi selengkapnya, lihat Grup manajemen.
Kelompok Sumber Daya
Untuk informasi tentang membuat grup sumber daya, lihat Membuat grup sumber daya dengan Bicep.
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.
targetScope = 'subscription'
param policyDefinitionID string
param policyName string
param policyParameters object = {}
resource policyAssign 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
name: policyName
properties: {
policyDefinitionId: policyDefinitionID
parameters: policyParameters
}
}
Membuat dan menetapkan definisi kebijakan
Anda dapat menentukan dan menetapkan definisi kebijakan dalam file Bicep yang sama.
targetScope = 'subscription'
resource locationPolicy 'Microsoft.Authorization/policyDefinitions@2023-04-01' = {
name: 'locationpolicy'
properties: {
policyType: 'Custom'
parameters: {}
policyRule: {
if: {
field: 'location'
equals: 'northeurope'
}
then: {
effect: 'deny'
}
}
}
}
resource locationRestrict 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
name: 'allowedLocation'
properties: {
policyDefinitionId: locationPolicy.id
}
}
Kontrol akses
Untuk mempelajari cara menetapkan peran, lihat Menambahkan penetapan peran Azure menggunakan templat Azure Resource Manager.
Contoh berikut membuat grup sumber daya, menerapkan kunci ke grup sumber daya, dan menetapkan peran ke utama.
targetScope = 'subscription'
@description('Name of the resourceGroup to create')
param resourceGroupName string
@description('Location for the resourceGroup')
param resourceGroupLocation string
@description('principalId of the user that will be given contributor access to the resourceGroup')
param principalId string
@description('roleDefinition to apply to the resourceGroup - default is contributor')
param roleDefinitionId string = 'b24988ac-6180-42a0-ab88-20f7382dd24c'
@description('Unique name for the roleAssignment in the format of a guid')
param roleAssignmentName string = guid(principalId, roleDefinitionId, resourceGroupName)
var roleID = '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/${roleDefinitionId}'
resource newResourceGroup 'Microsoft.Resources/resourceGroups@2024-03-01' = {
name: resourceGroupName
location: resourceGroupLocation
properties: {}
}
module applyLock 'lock.bicep' = {
name: 'applyLock'
scope: newResourceGroup
}
module assignRole 'role.bicep' = {
name: 'assignRBACRole'
scope: newResourceGroup
params: {
principalId: principalId
roleNameGuid: roleAssignmentName
roleDefinitionId: roleID
}
}
Contoh berikut menunjukkan modul untuk menerapkan penguncian:
resource createRgLock 'Microsoft.Authorization/locks@2020-05-01' = {
name: 'rgLock'
properties: {
level: 'CanNotDelete'
notes: 'Resource group should not be deleted.'
}
}
Contoh berikutnya menunjukkan modul untuk menetapkan peran:
@description('The principal to assign the role to')
param principalId string
@description('A GUID used to identify the role assignment')
param roleNameGuid string = newGuid()
param roleDefinitionId string
resource roleNameGuid_resource 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: roleNameGuid
properties: {
roleDefinitionId: roleDefinitionId
principalId: principalId
}
}
Langkah berikutnya
Untuk mempelajari tentang cakupan lain, lihat: