如何使用azurerm_subscription_policy_remediation?scope_id配置报错求助
Azure Policy Assignment的scope_id正确格式及问题修复
scope_id的正确格式要求
scope_id必须是策略分配实际所在层级的完整资源路径,不同层级的格式如下:
- 订阅层级:
/subscriptions/<纯订阅ID> - 资源组层级:
/subscriptions/<纯订阅ID>/resourceGroups/<资源组名称> - 管理组层级:
/providers/Microsoft.Management/managementGroups/<管理组名称>
你的三个报错原因及修复
用azurerm_resource_group.id找不到策略分配
说明该策略分配并非创建在你指定的资源组层级,而是在订阅或管理组层级。先在Azure门户确认策略分配的实际范围,再对应使用正确层级的scope_id。带/subscriptions/前缀的订阅ID提示格式错误
检查var.subscription_id是否本身已经包含/subscriptions/前缀。如果是,拼接后会变成/subscriptions//subscriptions/xxx这种无效格式。确保var.subscription_id仅为纯字符串形式的订阅ID即可。用完整策略分配ID作为scope_id无效
scope_id是策略分配所在的范围路径,不是策略分配自身的ID。策略分配ID的格式是/<scope>/providers/Microsoft.Authorization/policyAssignments/<分配名称>,和scope_id是完全不同的概念,不能混用。
修正后的代码示例
假设策略分配位于订阅层级,且var.subscription_id为纯订阅ID:
data "azurerm_policy_assignment" "policy_assignment1" { name = "Test-Inherit-RequiredTag-InheritedTag" scope_id = "/subscriptions/${var.subscription_id}" } resource "azurerm_subscription_policy_remediation" "remediation1" { name = "remediation1-inherit-tag" subscription_id = var.subscription_id policy_assignment_id = data.azurerm_policy_assignment.policy_assignment1.id }
额外验证技巧
直接在Azure门户找到目标策略分配,查看其「范围」字段,复制该路径作为scope_id使用,能百分百匹配正确格式。
内容的提问来源于stack exchange,提问作者Mattman5000
相关产品推荐
相关产品推荐

