在 Bicep 中设置扩展资源的范围
扩展资源是用于修改其他资源的资源。 例如,可以为资源分配角色。 角色分配是扩展资源类型。
有关扩展资源类型的完整列表,请参阅用于扩展其他资源的功能的资源类型。
本文介绍如何在使用 Bicep 文件进行部署时设置扩展资源类型的范围。 它介绍了在应用到资源时可用于扩展资源的 scope 属性。
注意
scope 属性仅适用于扩展资源类型。 若要为非扩展类型的资源类型指定不同的范围,请使用模块。
在部署范围内应用
若要在目标部署范围内应用扩展资源类型,请将该资源添加到模板中,就像应用任何其他资源类型一样。 可用的范围是资源组、订阅、管理组和租户。 部署范围必须支持该资源类型。
部署到资源组时,以下模板会向该资源组添加锁定。
resource createRgLock 'Microsoft.Authorization/locks@2016-09-01' = {
name: 'rgLock'
properties: {
level: 'CanNotDelete'
notes: 'Resource group should not be deleted.'
}
}
下一个示例为部署该资源组的订阅分配角色。
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
}
}
应用于资源
若要将扩展资源应用于资源,请使用 scope
属性。 在 scope 属性中,引用你要将扩展添加到其中的资源。 可以通过提供资源的符号名称来引用资源。 scope 属性是扩展资源类型的根属性。
下面的示例创建一个存储帐户并对其应用角色。
@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
}
可以将扩展资源应用于现有资源。 以下示例向现有存储帐户添加锁定。
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.'
}
}
当面向与部署的目标范围不同的范围时,与其他资源相同的要求适用于扩展资源。 若要了解如何部署到多个范围,请参阅:
仅允许在模块上使用 resourceGroup 和订阅属性。 在单个资源上不允许使用这些属性。 如果要部署其范围设置为其他资源组中资源的扩展资源,请使用模块。
以下示例演示如何对位于其他资源组中的存储帐户应用锁。
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.' } }
后续步骤
有关扩展资源类型的完整列表,请参阅用于扩展其他资源的功能的资源类型。