Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
若要简化资源管理,可在 Azure 订阅级别部署资源。 例如,可以将策略和 Azure 基于角色的访问控制 (Azure RBAC) 部署到你的订阅中,从而将它们应用于整个订阅。
本文介绍如何在 Bicep 文件中将部署范围设置为订阅。 有关详细信息,请参阅了解范围。
Nota
可在订阅级别部署中部署到 800 个不同的资源组。
并非所有资源类型都可以部署到订阅级别。 本部分列出了支持的资源类型。
对于 Azure 蓝图,请使用:
- 文物
- 蓝图
- blueprintAssignments
- 版本
对于 Azure 策略,请使用:
- 策略分配
- 策略定义
- 策略集定义
- 整改措施
对于访问控制,请使用:
- accessReviewScheduleDefinitions
- 访问审核计划设置
- 角色分配
- 角色定义
- 角色资格计划请求
- 角色管理策略分配
对于部署到资源组的嵌套模板,请使用:
- 部署
若要创建新的资源组,请使用:
- resourceGroups
若要管理订阅,请使用:
- 预算
- 配置 - 咨询顾问
- lineOfCredit
- 锁
- 个人资料 - 更改分析
- supportPlanTypes
- 标签
对于监视,请使用:
- 诊断设置
- logprofiles
对于安全性,请使用:
- 高级威胁防护设置
- 警报抑制规则
- assessmentMetadata
- 评估
- 自动配置设置
- 连接器
- 设备安全组
- ingestionSettings
- 定价
- 工作区设置
其他支持的类型包括:
- scopeAssignments
- 事件订阅
- peerAsns
若要将范围设置为订阅,请使用以下命令:
targetScope = 'subscription'
若要部署到订阅,请使用订阅级别部署命名。
对于 Azure CLI,请使用 az deployment sub create。 以下示例会部署一个模板来创建资源组:
az deployment sub create \
--name demoSubDeployment \
--location chinaeast \
--template-file main.bicep \
--parameters rgName=demoResourceGroup rgLocation=chinaeast
有关部署命令和部署 ARM 模板的选项的更多详细信息,请参阅:
对于订阅级别部署,必须为部署提供位置。 部署位置独立于部署的资源的位置。 部署位置指定何处存储部署数据。 管理组和租户部署也需要位置。 对于资源组部署,资源组的位置用于存储部署数据。
可以为部署提供一个名称,也可以使用默认部署名称。 默认名称是模板文件的名称。 例如,部署名为“main.json”的模板会创建默认部署名称 main。
每个部署名称的位置不可变。 当某个位置中已有某个部署时,无法在另一位置创建同名的部署。 例如,如果在 chinaeast 中创建名为 deployment1 的订阅部署,则以后无法创建名为 deployment1 但 chinanorth 位置的另一个部署。 如果出现错误代码 InvalidDeploymentLocation
,请使用其他名称或使用与该名称的以前部署相同的位置。
在 Bicep 文件中,所有用 resource
关键字声明的资源都必须在与部署相同级别的范围内进行部署。 对于订阅部署,这意味着 Bicep 文件中的所有 resource
声明都必须部署到同一订阅,或部署为部署所在同一订阅中资源的子资源或扩展资源。
但此限制不适用于 existing
资源。 可以在与部署不同的范围内引用现有资源。
若要在单个部署中的多个范围内部署资源,可使用模块。 部署模块会触发“嵌套部署”,从而支持你面向不同的范围。 部署父 Bicep 文件的用户必须具有在这些范围内启动部署所需的权限。
可以在以下范围部署订阅范围 Bicep 文件中的资源:
若要将资源部署到目标订阅,请使用关键字 resource
添加这些资源。
targetScope = 'subscription'
// resource group created in target subscription
resource exampleResource 'Microsoft.Resources/resourceGroups@2024-03-01' = {
...
}
有关部署到订阅的示例,请参阅使用 Bicep 创建资源组和分配策略定义。
若要将资源部署到与操作中的订阅不同的订阅,请添加一个模块。 使用 subscription 函数设置 scope
属性。 将 subscriptionId
属性设置为要部署到的订阅的 ID。
targetScope = 'subscription'
param otherSubscriptionID string
// module deployed at subscription level but in a different subscription
module exampleModule 'module.bicep' = {
name: 'deployToDifferentSub'
scope: subscription(otherSubscriptionID)
}
若要将资源部署到订阅中的资源组,请添加一个模块并设置其 scope
属性。 如果资源组已存在,请使用 resourceGroup 函数设置范围值。 提供资源组名称。
targetScope = 'subscription'
param resourceGroupName string
module exampleModule 'module.bicep' = {
name: 'exampleModule'
scope: resourceGroup(resourceGroupName)
}
如果资源组是在同一 Bicep 文件中创建的,请使用资源组的符号名称设置范围值。 有关将范围设置为符号名称的示例,请参阅使用 Bicep 创建资源组。
要在租户中创建资源,请添加一个模块。 使用 tenant 函数设置其 scope
属性。
部署模板的用户必须具有在租户中进行部署所需的访问权限。
下面的示例包括一个部署到租户的模块。
targetScope = 'subscription'
// module deployed at tenant level
module exampleModule 'module.bicep' = {
name: 'deployToTenant'
scope: tenant()
}
与其使用模块,不如将范围设置为某些资源类型的 tenant()
。 下面的示例在租户中部署管理组。
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
有关详细信息,请参阅管理组。
有关创建资源组的信息,请参阅使用 Bicep 创建资源组。
以下示例将现有的策略定义分配到订阅。 如果策略定义使用参数,请将参数作为对象提供。 如果策略定义不使用参数,请使用默认的空对象。
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
}
}
可以在同一 Bicep 文件中定义和分配策略定义。
targetScope = 'subscription'
resource locationPolicy 'Microsoft.Authorization/policyDefinitions@2023-04-01' = {
name: 'locationpolicy'
properties: {
policyType: 'Custom'
parameters: {}
policyRule: {
if: {
field: 'location'
equals: 'chinaeast2'
}
then: {
effect: 'deny'
}
}
}
}
resource locationRestrict 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
name: 'allowedLocation'
properties: {
policyDefinitionId: locationPolicy.id
}
}
若要了解如何分配角色,请参阅使用 Azure 资源管理器模板添加 Azure 角色分配。
以下示例创建一个资源组,对其应用锁定,并为主体分配一个角色。
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
}
}
以下示例显示了要应用锁的模块:
resource createRgLock 'Microsoft.Authorization/locks@2020-05-01' = {
name: 'rgLock'
properties: {
level: 'CanNotDelete'
notes: 'Resource group should not be deleted.'
}
}
以下示例显示了要分配角色的模块:
@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
}
}
若要了解其他范围,请参阅: