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

如何通过Terraform修改AWS中已有VPC的默认NACL

解决Terraform修改已有VPC默认NACL的问题

错误原因

你遇到的报错是因为**aws_vpc数据源没有default_network_acl_id或default_network_acl这类导出属性**,Terraform无法从VPC数据源直接获取默认NACL的关联信息。

可行解决方案

方案1:直接指定默认NACL ID

如果已经知晓目标VPC默认NACL的ID,直接硬编码到配置中是最直接的方式:

resource "aws_default_network_acl" "default" {
  default_network_acl_id = "acl-xxxxxx" # 替换为你的默认NACL实际ID

  egress {
    protocol   = "tcp"
    rule_no    = 80
    action     = "deny"
    cidr_block = "0.0.0.0/0"
    from_port  = 22
    to_port    = 22
  }

  ingress {
    protocol   = "tcp"
    rule_no    = 90
    action     = "deny"
    cidr_block = "0.0.0.0/0"
    from_port  = 3389
    to_port    = 3389
  }
}

方案2:通过数据源自动获取默认NACL

如果不想硬编码ID,可使用aws_network_acl数据源,通过default = true过滤条件,自动匹配目标VPC的默认NACL:

data "aws_vpc" "default" {
  id = "vpc-067415793148e22d1"
}

data "aws_network_acl" "default" {
  vpc_id  = data.aws_vpc.default.id
  default = true # 仅匹配VPC的默认NACL
}

resource "aws_default_network_acl" "default" {
  default_network_acl_id = data.aws_network_acl.default.id

  egress {
    protocol   = "tcp"
    rule_no    = 80
    action     = "deny"
    cidr_block = "0.0.0.0/0"
    from_port  = 22
    to_port    = 22
  }

  ingress {
    protocol   = "tcp"
    rule_no    = 90
    action     = "deny"
    cidr_block = "0.0.0.0/0"
    from_port  = 3389
    to_port    = 3389
  }
}

说明

aws_default_network_acl资源专门用于管理AWS默认创建的NACL(非Terraform创建的也适用),只要正确关联到默认NACL的ID,就能正常修改其规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 11:45:16