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

如何在Terraform中为AWS Network Firewall添加托管有状态规则组并解决ARN变量问题

问题原因与解决方案

错误原因

你遇到的报错是因为data.aws_arn.stateful-rulegroup返回的是ARN解析对象(包含partition、region、resource等多个属性),而join函数要求传入字符串列表,直接使用整个对象会触发类型不匹配错误。


修复ARN生成错误的两种方法

方法1:使用ARN数据源的字符串属性

修改第27行,引用数据源的arn字段(这才是原始的ARN字符串值):

resource_arn = join("/", [data.aws_arn.stateful-rulegroup.arn, "AbusedLegitBotNetCommandAndControlDomainsStrictOrder"])

方法2:直接字符串插值(更简洁)

如果不需要解析ARN的细分属性,完全可以跳过data "aws_arn",直接通过变量拼接生成ARN:

resource_arn = "arn:aws:network-firewall:${var.region}:aws-managed:stateful-rulegroup/AbusedLegitBotNetCommandAndControlDomainsStrictOrder"

完整替换自定义规则组的配置

移除原有的allow_domains规则组引用,添加所有指定的AWS托管有状态规则组,每个规则组设置唯一的优先级:

resource "aws_networkfirewall_firewall_policy" "anfw_policy" {
  name        = "your-firewall-policy-name"
  description = "Firewall policy with AWS managed stateful rule groups"

  firewall_policy {
    # 保留原有无状态规则、默认动作等配置

    # 移除原自定义规则组 allow_domains 的引用

    # 添加AWS托管的四个有状态规则组
    stateful_rule_group_reference {
      priority     = 21
      resource_arn = "arn:aws:network-firewall:${var.region}:aws-managed:stateful-rulegroup/AbusedLegitBotNetCommandAndControlDomainsStrictOrder"
    }

    stateful_rule_group_reference {
      priority     = 22
      resource_arn = "arn:aws:network-firewall:${var.region}:aws-managed:stateful-rulegroup/MalwareDomainsStrictOrder"
    }

    stateful_rule_group_reference {
      priority     = 23
      resource_arn = "arn:aws:network-firewall:${var.region}:aws-managed:stateful-rulegroup/BotNetCommandAndControlDomainsStrictOrder"
    }

    stateful_rule_group_reference {
      priority     = 24
      resource_arn = "arn:aws:network-firewall:${var.region}:aws-managed:stateful-rulegroup/AbusedLegitMalwareDomainsStrictOrder"
    }
  }
}

可选:用本地变量简化重复代码

如果想减少ARN前缀的重复书写,可以定义本地变量复用:

locals {
  managed_stateful_rg_prefix = "arn:aws:network-firewall:${var.region}:aws-managed:stateful-rulegroup"
}

# 规则组引用示例
stateful_rule_group_reference {
  priority     = 21
  resource_arn = "${local.managed_stateful_rg_prefix}/AbusedLegitBotNetCommandAndControlDomainsStrictOrder"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:23:15