Bicep dosyalarıyla yönetim grubu dağıtımları
Bu makalede, bir yönetim grubuna dağıtım yapmak için Bicep ile kapsamı ayarlama açıklanmıştır.
Kuruluş olgunlaştıkça, yönetim grubu düzeyinde kaynak oluşturmak için bir Bicep dosyası dağıtabilirsiniz. Örneğin, bir yönetim grubu için ilke tanımlamanız ve atamanız veya Azure rol tabanlı erişim denetimi (Azure RBAC) gerekir. Yönetim grubu düzeyi şablonlarıyla, ilkeleri bildirimli olarak uygulayabilir ve yönetim grubu düzeyinde roller atabilirsiniz.
Microsoft Learn
Dağıtım kapsamları hakkında daha fazla bilgi edinmek ve uygulamalı rehberlik için bkz. Microsoft Learn üzerinde Bicep kullanarak kaynakları aboneliklere, yönetim gruplarına ve kiracılara dağıtma.
Desteklenen kaynaklar
Tüm kaynak türleri yönetim grubu düzeyinde dağıtılabilir değildir. Bu bölümde, hangi kaynak türlerinin desteklen olduğu listedir.
Daha Azure Blueprints için şunları kullanın:
Daha Azure İlkesi için şunları kullanın:
Erişim denetimi için şunları kullanın:
- privateLinkAssociations
- roleAssignments
- roleAssignmentScheduleRequests
- roleDefinitions
- roleEligibilityScheduleRequests
- roleManagementPolicyAssignments
Aboneliklere veya kaynak gruplarına dağıtan iç içe şablonlar için şunları kullanın:
Kaynaklarınızı yönetmek için şunları kullanın:
Yönetim grupları, kiracı düzeyindeki kaynaklardır. Ancak, yeni yönetim grubunun kapsamını kiracı olarak ayarerek bir yönetim grubu dağıtımında yönetim grupları oluşturabilirsiniz. Bkz. Yönetim grubu.
Kapsamı ayarlama
Kapsamı yönetim grubu olarak ayarlamak için şunları kullanın:
targetScope = 'managementGroup'
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 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 ilişkin dağıtım komutları ve seçenekleri hakkında daha ayrıntılı bilgi için bkz:
- ARM şablonları ve Azure CLI ile kaynakları dağıtma
- ARM şablonları ve dağıtım şablonlarıyla kaynakları Azure PowerShell
- Arm şablonlarını Cloud Shell
Dağıtım konumu ve adı
Yönetim grubu düzeyinde dağıtımlar için dağıtım için bir konum sağlamalısınız. Dağıtımın konumu, dağıtan kaynakların konumdan ayrıdır. Dağıtım konumu, dağıtım verisi depolamanın nerede olduğunu belirtir. Abonelik ve kiracı dağıtımları için de bir konum gerekir. 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 veya varsayılan dağıtım adını kullanabilirsiniz. Varsayılan ad, şablon dosyasının adıdır. Örneğin, main.bicep adlı bir şablon dağıtarak main adlı varsayılan bir dağıtım adı oluşturur.
Her dağıtım adı için konum sabittir. Farklı bir konumda aynı adla mevcut bir dağıtım olduğunda bir konumda dağıtım oluşturamalısınız. Örneğin, centralus'ta deployment1 adıyla bir yönetim grubu dağıtımı oluşturmanız, daha sonra deployment1 adıyla ancak westus konumunu kullanarak başka bir dağıtım oluşturamalısınız. Hata kodunu alırsanız, bu ad için farklı bir ad veya InvalidDeploymentLocation önceki dağıtımla aynı konumu kullanın.
Dağıtım kapsamları
Bir yönetim grubuna dağıtım yapmak için kaynakları şu kaynaklara dağıtın:
- işlemden hedef yönetim grubu
- kiracıda başka bir yönetim grubu
- yönetim grubunda abonelikler
- yönetim grubunda kaynak grupları
- kaynak grubunun kiracısı
Uzantı kaynağının kapsamı, dağıtım hedefinden farklı bir hedef olarak kapsamlandı.
Şablonu dağıtan kullanıcının belirtilen kapsama erişimi olması gerekir.
Kapsamdan yönetim grubuna
Kaynakları hedef yönetim grubuna dağıtmak için bu kaynakları anahtar sözcüğüyle resource ekleyin.
targetScope = 'managementGroup'
// policy definition created in the management group
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2019-09-01' = {
...
}
Başka bir yönetim grubunu hedeflemek için bir modül ekleyin. özelliğini ayarlamak için managementGroup işlevini scope kullanın. Yönetim grubu adını girin.
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)
}
Kapsamdan aboneliğe
Bir yönetim grubu içindeki abonelikleri de hedef alabilirsiniz. Şablonu dağıtan kullanıcının belirtilen kapsama erişimi olması gerekir.
Yönetim grubu içindeki bir aboneliği hedeflemek için bir modül ekleyin. özelliğini ayarlamak için subscription işlevini scope kullanın. Abonelik kimliğini girin.
targetScope = 'managementGroup'
param subscriptionID string
// module deployed to subscription in the management group
module exampleModule 'module.bicep' = {
name: 'deployToSub'
scope: subscription(subscriptionID)
}
Kapsamdan kaynak grubuna
Kaynak gruplarını yönetim grubu içinde de hedefleyebilirsiniz. Şablonu dağıtan kullanıcının belirtilen kapsama erişimi olması gerekir.
Yönetim grubu içindeki bir kaynak grubunu hedeflemek için bir modül ekleyin. özelliğini ayarlamak için resourceGroup işlevini scope kullanın. Abonelik kimliğini ve kaynak grubu adını girin.
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)
}
Kiracı kapsamı
Kiracıda kaynak oluşturmak için bir modül ekleyin. Özelliğini ayarlamak için tenant işlevini scope kullanın. Şablonu dağıtan kullanıcının kiracıda dağıtmak için gerekli erişimine sahip olması gerekir.
targetScope = 'managementGroup'
// module deployed at tenant level
module exampleModule 'module.bicep' = {
name: 'deployToTenant'
scope: tenant()
}
Ya da kapsamı yönetim grupları gibi / bazı kaynak türleri için olarak da ayarlayın. Yeni bir yönetim grubu oluşturma 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 kapsamı kiracı olarak ayarlamalısınız.
Aşağıdaki örnek, kök yönetim grubunda yeni bir yönetim grubu oluşturur.
targetScope = 'managementGroup'
param mgName string = 'mg-${uniqueString(newGuid())}'
resource newMG 'Microsoft.Management/managementGroups@2020-05-01' = {
scope: tenant()
name: mgName
properties: {}
}
output newManagementGroup string = mgName
Sonraki örnek, dağıtım için hedeflenen yönetim grubunda yeni bir yönetim grubu oluşturur. yönetim grubu işlevini kullanır.
targetScope = 'managementGroup'
param mgName string = 'mg-${uniqueString(newGuid())}'
resource newMG 'Microsoft.Management/managementGroups@2020-05-01' = {
scope: tenant()
name: mgName
properties: {
details: {
parent: {
id: managementGroup().id
}
}
}
}
output newManagementGroup string = mgName
Abonelikler
Arm şablonunu kullanarak bir yönetim grubunda yeni bir Azure aboneliği oluşturmak için bkz.
- Program aracılığıyla Azure Kurumsal Anlaşma oluşturma
- Program aracılığıyla bir abonelik için Azure abonelikleri Microsoft Müşteri Sözleşmesi
- Bir abonelik için program aracılığıyla Azure abonelikleri Microsoft İş Ortağı Sözleşmesi
Mevcut Azure aboneliğini yeni bir yönetim grubuna taşımaya yarayan 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ımladığınız ve ilkeyi nasıl atadığınız gösterir.
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@2020-09-01' = {
name: 'locationRestriction'
properties: {
policyType: 'Custom'
mode: 'All'
parameters: {}
policyRule: {
if: {
not: {
field: 'location'
in: allowedLocations
}
}
then: {
effect: 'deny'
}
}
}
}
resource policyAssignment 'Microsoft.Authorization/policyAssignments@2020-09-01' = {
name: 'locationAssignment'
properties: {
policyDefinitionId: policyDefinition.id
}
}
Sonraki adımlar
Diğer kapsamlar hakkında bilgi edinmek için bkz: