如何修正Bicep部署Azure Policy Assignment的scope与参数报错
修正后的完整Bicep代码
resource policy_assignment 'Microsoft.Authorization/policyAssignments@2021-06-01' = { name: 'my_policy' location: 'westus' // 修正scope错误:直接传入范围对象而非字符串类型的资源ID scope: resourceGroup() identity: { type: 'UserAssigned' userAssignedIdentities: { '/subscriptions/xxxxxxx-xxxxxx-xxxx-xxx/resourceGroups/my-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/mymi': {} } } properties: { parameters: { // 修正参数错误:参数值需要嵌套在value字段内 MyParamKey: { value: '/subscriptions/xxxxx-xxx-xxxx-xxx-xxx/resourcegroups/my-rg2/providers/microsoft.network/virtualnetworks/vnetmy/subnets/default' } } // 额外优化:删除原定义中多余的斜杠,避免运行时识别异常 policyDefinitionId: '/subscriptions/xxxxx-xxx-xxxx-xxx-xxx/providers/Microsoft.Authorization/policyDefinitions/my-policy-def' } }
错误修正说明
- scope属性报错修正
Bicep中scope字段要求传入范围对象而非字符串格式的资源ID,subscriptionResourceId函数返回值为字符串类型,因此触发类型不匹配错误。如果需要将策略分配到当前部署的资源组,直接使用内置的resourceGroup()对象即可;如果需要分配到其他范围,可对应使用managementGroup('管理组名称')、subscription('订阅ID')等范围函数。 - 参数定义报错修正
Policy Assignment的参数值要求符合ParameterValuesValue类型结构,所有参数值必须嵌套在value字段下,不能直接将参数值赋值给参数名。
内容的提问来源于stack exchange,提问作者MoonHorse
相关产品推荐
相关产品推荐

