You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Terraform为Azure策略分配多个豁免

给ISO 27001:2013计划分配添加策略豁免的Terraform操作方法

你可以通过Terraform的azurerm_policy_exemption资源,为已分配的ISO 27001计划添加单个策略豁免。以下是具体实现方式,包含单个豁免示例和批量创建5个豁免的优化方案:

1. 单个豁免的实现代码

在现有计划分配代码的基础上,添加如下azurerm_policy_exemption资源块,对应你提供的首个豁免需求:

data "azurerm_policy_set_definition" "iso27001" {
  display_name = "ISO 27001:2013"
}

resource "azurerm_resource_group_policy_assignment" "iso27001_assignment" {
  name                 = "iso27001_assignment"
  resource_group_id    = azurerm_resource_group.rg.id
  policy_definition_id = data.azurerm_policy_set_definition.iso27001.id
  description          = "Assignment of the ISO 27001:2013 initiative to subscription."
  display_name         = "ISO 27001:2013 Governance"
  location             = "Switzerland North"
  identity { 
    type = "SystemAssigned" 
  }
}

# 首个策略豁免
resource "azurerm_policy_exemption" "sql_aad_admin_exemption" {
  name                      = "sql-aad-admin-audit-exemption"
  policy_assignment_id      = azurerm_resource_group_policy_assignment.iso27001_assignment.id
  policy_definition_id      = "/providers/Microsoft.Authorization/policyDefinitions/1f314764-cb73-4fc9-b863-8eca98ac36e9"
  exemption_category        = "Waiver" # 可选值:Waiver/Mitigated,根据实际豁免原因选择
  display_name              = "豁免:SQL服务器Azure AD管理员审核策略"
  description               = "豁免审核为SQL服务器配置Azure Active Directory管理员的策略"
  scope                     = azurerm_resource_group.rg.id
}

2. 批量创建5个豁免的优化方案

如果需要添加5个豁免,推荐使用for_each批量创建,避免重复编写资源块:

data "azurerm_policy_set_definition" "iso27001" {
  display_name = "ISO 27001:2013"
}

resource "azurerm_resource_group_policy_assignment" "iso27001_assignment" {
  name                 = "iso27001_assignment"
  resource_group_id    = azurerm_resource_group.rg.id
  policy_definition_id = data.azurerm_policy_set_definition.iso27001.id
  description          = "Assignment of the ISO 27001:2013 initiative to subscription."
  display_name         = "ISO 27001:2013 Governance"
  location             = "Switzerland North"
  identity { 
    type = "SystemAssigned" 
  }
}

# 定义所有需要豁免的策略信息
locals {
  policy_exemptions = {
    sql_aad_admin = {
      policy_id   = "/providers/Microsoft.Authorization/policyDefinitions/1f314764-cb73-4fc9-b863-8eca98ac36e9"
      display_name = "豁免:SQL服务器Azure AD管理员审核策略"
      description  = "豁免审核为SQL服务器配置Azure Active Directory管理员的策略"
    },
    # 补充剩余4个豁免的信息,格式同上
    policy_2 = {
      policy_id   = "第二个策略的定义ID"
      display_name = "第二个豁免的显示名称"
      description  = "第二个豁免的描述"
    },
    policy_3 = {
      policy_id   = "第三个策略的定义ID"
      display_name = "第三个豁免的显示名称"
      description  = "第三个豁免的描述"
    },
    policy_4 = {
      policy_id   = "第四个策略的定义ID"
      display_name = "第四个豁免的显示名称"
      description  = "第四个豁免的描述"
    },
    policy_5 = {
      policy_id   = "第五个策略的定义ID"
      display_name = "第五个豁免的显示名称"
      description  = "第五个豁免的描述"
    }
  }
}

# 批量创建豁免
resource "azurerm_policy_exemption" "iso27001_exemptions" {
  for_each                  = local.policy_exemptions
  name                      = "${each.key}-exemption"
  policy_assignment_id      = azurerm_resource_group_policy_assignment.iso27001_assignment.id
  policy_definition_id      = each.value.policy_id
  exemption_category        = "Waiver"
  display_name              = each.value.display_name
  description               = each.value.description
  scope                     = azurerm_resource_group.rg.id
}

关键字段说明

  • policy_assignment_id:关联你之前创建的ISO 27001计划分配的ID,确保豁免针对该计划分配生效
  • policy_definition_id:填入需要豁免的单个策略的定义ID(即你提供的定义ID字段值)
  • exemption_category:选择Waiver(豁免)或Mitigated(已缓解),根据实际业务场景决定
  • scope:必须与计划分配的作用域一致(此处为资源组ID)

内容的提问来源于stack exchange,提问作者Tobi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 23:13:13