Terraform - 允许除特定端口之外的所有出站端口?



我在terraform中定义了这个AWS安全组:

resource "aws_security_group" "sg" {
name = "${var.name}"
description = "${var.description}"
vpc_id = "${data.terraform_remote_state.vpc.vpc_id}"
ingress {
from_port   = 80
to_port     = 80
protocol    = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port   = 443
to_port     = 443
protocol    = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port   = 22
to_port     = 22
protocol    = "tcp"
cidr_blocks = ["${var.ext_blocks}"]
}
egress {
from_port       = 0
to_port         = 0
protocol        = "-1"
cidr_blocks     = ["0.0.0.0/0"]
}
}

通过此配置,任何端口都可以用作传出/出站。但是,如果我想排除某些端口,推荐的方法是什么?

假设我想排除端口 25 和 465,所以我可以做类似的事情(而不是使用允许任何端口的出口规则(:

egress {
from_port       = 0
to_port         = 24
protocol        = "-1"
cidr_blocks     = ["0.0.0.0/0"]
}
egress {
from_port       = 26
to_port         = 464
protocol        = "-1"
cidr_blocks     = ["0.0.0.0/0"]
}
egress {
from_port       = 466
to_port         = 65535
protocol        = "-1"
cidr_blocks     = ["0.0.0.0/0"]
}

但这需要定义特定的范围,这需要定义一些额外的出口规则。也许有更好的方法吗?例如,我可以在哪里定义规则以允许所有端口,然后排除一些端口?

例如,

我可以定义规则以允许所有端口,然后排除一些端口

这开始达到 AWS 安全组的限制,因为它们只能指定允许规则而不能指定拒绝规则,并且每个组只能有 60 个入站规则和 60 个出站规则(每个规则总共 120 条规则(。

理想情况下,您将能够定义这样的变量

variable "excluded_ports" { default=[25,465] }

然后可以用来建立类似于您在问题中发布的aws_security_group_rule资源(即从/到0-24、26-464和466-65535的块(。不幸的是,这将是相当困难的,如果可能的话,会导致一种丑陋/黑客的方式来基于提供的变量生成from/to端口。这是因为在最新版本(v0.11(版本的Terraform中目前不支持列表元素的映射(参考此terraform问题和此问题(,但Terraform v0.12将使这些类型的操作变得更加容易。

相关内容

  • 没有找到相关文章

最新更新