如何使用Terraform在Azure中创建以单个资源为作用域的策略豁免
结论
你对该模块的语法理解不存在偏差,你当前使用的globalbao/policy-exemptions/azurerm 0.2.1版本模块仅支持资源组级别的策略豁免作用域,原生不支持指定单个资源作为豁免作用域。
原因说明
该模块的底层实现默认将策略豁免资源部署在入参指定的资源组层级,入参强制要求填写resourceGroupName,没有提供自定义作用域的配置入口,因此无法直接通过该模块实现单资源级别的豁免配置。
可行解决方案
- 方案1:直接使用AzureRM官方提供的
azurerm_policy_exemption资源创建豁免,该资源支持自定义任意层级的作用域,只需将scope参数指定为目标单个资源的资源ID即可,示例配置如下:
resource "azurerm_policy_exemption" "single_resource_exemption" { name = "exemption1" display_name = "exemption1 for target single resource" description = "exemption1 waives compliance on the specified single resource" scope = "/subscriptions/{订阅ID}/resourceGroups/{资源组名}/providers/Microsoft.{资源提供者}/{资源类型}/{资源名}" # 替换为实际目标资源的完整ID policy_assignment_id = "/providers/Microsoft.Management/managementGroups/production/providers/Microsoft.Authorization/policyAssignments/2f97de7d41f348529e23d8ae" policy_definition_reference_ids = [] exemption_category = "Waiver" expires_on = "2025-12-29" metadata = {} }
- 方案2:如果需要复用该模块的封装逻辑,可以自行修改模块源码,将原本固定绑定资源组的作用域逻辑调整为支持传入自定义作用域参数,即可适配单资源豁免的需求。
内容的提问来源于stack exchange,提问作者Noa Hochman
相关产品推荐
相关产品推荐

