Bicep'te uzantı kaynaklarının kapsamını ayarlama

Uzantı kaynağı, başka bir kaynağı değiştiren bir kaynaktır. Örneğin, bir kaynağa rol atayabilirsiniz. Rol ataması bir uzantı kaynak türüdür.

Uzantı kaynak türlerinin tam listesi için bkz. Diğer kaynakların özelliklerini genişleten kaynak türleri.

Bu makalede, Bicep dosyasıyla dağıtıldığında uzantı kaynak türünün kapsamının nasıl ayarlanacağı gösterilmektedir. Bir kaynağa uygulanırken uzantı kaynakları için kullanılabilen kapsam özelliğini açıklar.

Not

Kapsam özelliği yalnızca uzantı kaynak türleri için kullanılabilir. Uzantı türü olmayan bir kaynak türü için farklı bir kapsam belirtmek için bir modül kullanın.

Eğitim kaynakları

Adım adım yönergeler aracılığıyla uzantı kaynakları hakkında bilgi edinmek isterseniz bkz. Bicep kullanarak alt ve uzantı kaynaklarını dağıtma.

Dağıtım kapsamında uygula

Hedef dağıtım kapsamında bir uzantı kaynak türü uygulamak için, diğer kaynak türlerinde yaptığınız gibi kaynağı şablonunuza ekleyin. Kullanılabilir kapsamlar kaynak grubu, abonelik, yönetim grubu ve kiracıdır. Dağıtım kapsamı kaynak türünü desteklemelidir.

Bir kaynak grubuna dağıtıldığında, aşağıdaki şablon bu kaynak grubuna bir kilit ekler.

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

Sonraki örnek, dağıtılacağı aboneliğe bir rol atar.

targetScope = 'subscription'

@description('The principal to assign the role to')
param principalId string

@allowed([
  'Owner'
  'Contributor'
  'Reader'
])
@description('Built-in role to assign')
param builtInRoleType string

var role = {
  Owner: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635'
  Contributor: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c'
  Reader: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7'
}

resource roleAssignSub 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = {
  name: guid(subscription().id, principalId, role[builtInRoleType])
  properties: {
    roleDefinitionId: role[builtInRoleType]
    principalId: principalId
  }
}

Kaynağa uygula

Bir kaynağa uzantı kaynağı uygulamak için özelliğini kullanın scope . kapsam özelliğinde uzantıyı eklediğiniz kaynağa başvurun. Kaynağın sembolik adını sağlayarak kaynağa başvurabilirsiniz. Kapsam özelliği, uzantı kaynak türü için bir kök özelliktir.

Aşağıdaki örnek bir depolama hesabı oluşturur ve buna bir rol uygular.

@description('The principal to assign the role to')
param principalId string

@allowed([
  'Owner'
  'Contributor'
  'Reader'
])
@description('Built-in role to assign')
param builtInRoleType string

param location string = resourceGroup().location

var role = {
  Owner: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635'
  Contributor: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c'
  Reader: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7'
}
var uniqueStorageName = 'storage${uniqueString(resourceGroup().id)}'

resource demoStorageAcct 'Microsoft.Storage/storageAccounts@2019-04-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'Storage'
  properties: {}
}

resource roleAssignStorage 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = {
  name: guid(demoStorageAcct.id, principalId, role[builtInRoleType])
  properties: {
    roleDefinitionId: role[builtInRoleType]
    principalId: principalId
  }
  scope: demoStorageAcct
}

Var olan bir kaynağa uzantı kaynağı uygulayabilirsiniz. Aşağıdaki örnek, mevcut depolama hesabına kilit ekler.

resource demoStorageAcct 'Microsoft.Storage/storageAccounts@2021-04-01' existing = {
  name: 'examplestore'
}

resource createStorageLock 'Microsoft.Authorization/locks@2016-09-01' = {
  name: 'storeLock'
  scope: demoStorageAcct
  properties: {
    level: 'CanNotDelete'
    notes: 'Storage account should not be deleted.'
  }
}

Dağıtımın hedef kapsamından farklı bir kapsamı hedeflerken diğer kaynakla aynı gereksinimler uzantı kaynakları için de geçerlidir. Birden fazla kapsama dağıtma hakkında bilgi edinmek için bkz:

resourceGroup ve abonelik özelliklerine yalnızca modüllerde izin verilir. Bu özelliklere tek tek kaynaklarda izin verilmez. Kapsamı farklı bir kaynak grubundaki bir kaynağa ayarlanmış bir uzantı kaynağı dağıtmak istiyorsanız modülleri kullanın.

Aşağıdaki örnekte, farklı bir kaynak grubunda bulunan bir depolama hesabına nasıl kilit uygulanacağı gösterilmektedir.

  • main.bicep:

    param resourceGroup2Name string
    param storageAccountName string
    
    module applyStoreLock './storageLock.bicep' = {
      name: 'addStorageLock'
      scope: resourceGroup(resourceGroup2Name)
      params: {
        storageAccountName: storageAccountName
      }
    }
    
  • storageLock.bicep:

    param storageAccountName string
    
    resource storage 'Microsoft.Storage/storageAccounts@2021-09-01' existing = {
      name: storageAccountName
    }
    
    resource storeLock 'Microsoft.Authorization/locks@2017-04-01' = {
      scope: storage
      name: 'storeLock'
      properties: {
        level: 'CanNotDelete'
        notes: 'Storage account should not be deleted.'
      }
    }
    

Sonraki adımlar

Uzantı kaynak türlerinin tam listesi için bkz. Diğer kaynakların özelliklerini genişleten kaynak türleri.