Bicep dosyalarıyla abonelik dağıtımları

Kaynakların yönetimini basitleştirmek için kaynakları Azure aboneliğiniz düzeyinde dağıtabilirsiniz. Örneğin, ilkeleri ve Azure rol tabanlı erişim denetimini (Azure RBAC) aboneliğinize dağıtabilirsiniz ve bu da bunları aboneliğiniz genelinde uygular.

Bu makalede, dağıtım kapsamının Bicep dosyasındaki bir aboneliğe nasıl ayarlanacağı açıklanmaktadır.

Not

Abonelik düzeyinde dağıtımda 800 farklı kaynak grubuna dağıtabilirsiniz.

Eğitim kaynakları

Adım adım yönergeler aracılığıyla dağıtım kapsamları hakkında bilgi edinmek isterseniz bkz. Bicep kullanarak aboneliklere, yönetim gruplarına ve kiracılara kaynak dağıtma.

Desteklenen kaynaklar

Tüm kaynak türleri abonelik düzeyine dağıtılamaz. Bu bölümde hangi kaynak türlerinin desteklendiği listelenir.

Azure Blueprints için şunu kullanın:

Azure İlkeleri için şunları kullanın:

Erişim denetimi için şunu kullanın:

Kaynak gruplarına dağıtılan iç içe şablonlar için şunu kullanın:

Yeni kaynak grupları oluşturmak için şunu kullanın:

Aboneliğinizi yönetmek için şunları kullanın:

İzleme için şunu kullanın:

Güvenlik için şunu kullanın:

Desteklenen diğer türler şunlardır:

Kapsamı ayarla

Kapsamı abonelik olarak ayarlamak için şunu kullanın:

targetScope = 'subscription'

Dağıtım komutları

Aboneliğe dağıtmak için abonelik düzeyi dağıtım komutlarını kullanın.

Azure CLI için az deployment sub create komutunu kullanın. Aşağıdaki örnek, kaynak grubu oluşturmak için bir şablon dağıtır:

az deployment sub create \
  --name demoSubDeployment \
  --location centralus \
  --template-file main.bicep \
  --parameters rgName=demoResourceGroup rgLocation=centralus

ARM şablonlarını dağıtmaya yönelik dağıtım komutları ve seçenekleri hakkında daha ayrıntılı bilgi için bkz:

Dağıtım konumu ve adı

Abonelik düzeyi dağıtımlar için dağıtım için bir konum sağlamanız gerekir. Dağıtımın konumu, dağıttığınız kaynakların konumundan ayrıdır. Dağıtım konumu, dağıtım verilerinin depolandığı yeri belirtir. Yönetim grubu ve kiracı dağıtımları da bir konum gerektirir. Kaynak grubu dağıtımlarında, dağıtım verilerini depolamak için kaynak grubunun konumu kullanılır.

Dağıtım için bir ad sağlayabilir veya varsayılan dağıtım adını kullanabilirsiniz. Varsayılan ad, şablon dosyasının adıdır. Örneğin main.json adlı bir şablon dağıtılırken main varsayılan dağıtım adı oluşturulur.

Her dağıtım adı için konum sabittir. Farklı bir konumda aynı ada sahip bir dağıtım olduğunda tek bir konumda dağıtım oluşturamazsınız. Örneğin, centralus içinde deployment1 adlı bir abonelik dağıtımı oluşturursanız, daha sonra deployment1 adıyla ancak westus konumuyla başka bir dağıtım oluşturamazsınız. hata kodunu InvalidDeploymentLocationalırsanız, bu ad için farklı bir ad veya önceki dağıtımla aynı konumu kullanın.

Dağıtım kapsamları

Bir aboneliğe dağıtım yaparken kaynakları şu kaynaklara dağıtabilirsiniz:

  • işlemden hedef abonelik
  • kiracıdaki herhangi bir abonelik
  • abonelik veya diğer abonelikler içindeki kaynak grupları
  • aboneliğin kiracısı

Uzantı kaynağının kapsamı, dağıtım hedefinden farklı bir hedef olarak ayarlanabilir.

Şablonu dağıtan kullanıcının belirtilen kapsama erişimi olmalıdır.

Kapsam-abonelik

Kaynakları hedef aboneliğe dağıtmak için söz konusu kaynakları anahtar sözcüğüyle resource ekleyin.

targetScope = 'subscription'

// resource group created in target subscription
resource exampleResource 'Microsoft.Resources/resourceGroups@2022-09-01' = {
  ...
}

Aboneliğe dağıtma örnekleri için bkz. Bicep ile kaynak grupları oluşturma ve İlke tanımı atama.

İşlemden farklı bir aboneliğe kaynak dağıtmak için bir modül ekleyin. özelliğini ayarlamak scope için abonelik işlevini kullanın. subscriptionId Özelliğini dağıtmak istediğiniz aboneliğin kimliğine sağlayın.

targetScope = 'subscription'

param otherSubscriptionID string

// module deployed at subscription level but in a different subscription
module exampleModule 'module.bicep' = {
  name: 'deployToDifferentSub'
  scope: subscription(otherSubscriptionID)
}

Kaynak grubu kapsamı

Abonelik içindeki bir kaynak grubuna kaynak dağıtmak için bir modül ekleyin ve özelliğini scope ayarlayın. Kaynak grubu zaten varsa kapsam değerini ayarlamak için resourceGroup işlevini kullanın. Kaynak grubu adını belirtin.

targetScope = 'subscription'

param resourceGroupName string

module exampleModule 'module.bicep' = {
  name: 'exampleModule'
  scope: resourceGroup(resourceGroupName)
}

Kaynak grubu aynı Bicep dosyasında oluşturulduysa, kapsam değerini ayarlamak için kaynak grubunun sembolik adını kullanın. Kapsamı sembolik ada ayarlama örneği için bkz. Bicep ile kaynak grubu oluşturma.

Kapsamı kiracıya

Kiracıda kaynak oluşturmak için bir modül ekleyin. Özelliğini ayarlamak scope için kiracı işlevini kullanın.

Şablonu dağıtan kullanıcının kiracıda dağıtmak için gerekli erişime sahip olması gerekir.

Aşağıdaki örnek, kiracıya dağıtılan bir modülü içerir.

targetScope = 'subscription'

// module deployed at tenant level
module exampleModule 'module.bicep' = {
  name: 'deployToTenant'
  scope: tenant()
}

Modül kullanmak yerine, bazı kaynak türleri için kapsamı olarak tenant() ayarlayabilirsiniz. Aşağıdaki örnek kiracıda bir yönetim grubu dağıtır.

targetScope = 'subscription'

param mgName string = 'mg-${uniqueString(newGuid())}'

// management group created at tenant
resource managementGroup 'Microsoft.Management/managementGroups@2021-04-01' = {
  scope: tenant()
  name: mgName
  properties: {}
}

output output string = mgName

Daha fazla bilgi için bkz . Yönetim grubu.

Kaynak grupları

Kaynak grupları oluşturma hakkında bilgi için bkz. Bicep ile kaynak grubu oluşturma.

Azure İlkesi

İlke tanımı atama

Aşağıdaki örnekte aboneliğe mevcut bir ilke tanımı atanır. İlke tanımı parametreleri alıyorsa, bunları bir nesne olarak sağlayın. İlke tanımı parametreleri almazsa, varsayılan boş nesneyi kullanın.

targetScope = 'subscription'

param policyDefinitionID string
param policyName string
param policyParameters object = {}

resource policyAssign 'Microsoft.Authorization/policyAssignments@2022-06-01' = {
  name: policyName
  properties: {
    policyDefinitionId: policyDefinitionID
    parameters: policyParameters
  }
}

İlke tanımları oluşturma ve atama

Aynı Bicep dosyasında bir ilke tanımı tanımlayabilir ve atayabilirsiniz.

targetScope = 'subscription'

resource locationPolicy 'Microsoft.Authorization/policyDefinitions@2021-06-01' = {
  name: 'locationpolicy'
  properties: {
    policyType: 'Custom'
    parameters: {}
    policyRule: {
      if: {
        field: 'location'
        equals: 'northeurope'
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

resource locationRestrict 'Microsoft.Authorization/policyAssignments@2022-06-01' = {
  name: 'allowedLocation'
  properties: {
    policyDefinitionId: locationPolicy.id
  }
}

Erişim denetimi

Rol atama hakkında bilgi edinmek için bkz. Azure Resource Manager şablonlarını kullanarak Azure rol atamaları ekleme.

Aşağıdaki örnek bir kaynak grubu oluşturur, buna bir kilit uygular ve sorumluya bir rol atar.

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@2022-09-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
  }
}

Aşağıdaki örnekte kilidi uygulama modülü gösterilmektedir:

resource createRgLock 'Microsoft.Authorization/locks@2020-05-01' = {
  name: 'rgLock'
  properties: {
    level: 'CanNotDelete'
    notes: 'Resource group should not be deleted.'
  }
}

Sonraki örnekte rolün atanma modülü gösterilmektedir:

@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
  }
}

Sonraki adımlar

Diğer kapsamlar hakkında bilgi edinmek için bkz: