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

Terraform-是否允许除特定端口之外的所有出站端口?,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,我在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 =

我在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,这样我可以做类似的事情(而不是使用允许任何端口的一个出口规则):

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

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

这开始触及AWS安全组的限制,因为它们可以,而且您可以(每个安全组总共有120条规则)

理想情况下,您可以定义这样的变量

variable "excluded_ports" { default=[25,465] }
然后,可以使用它来构建类似于您在问题中发布的内容(即从/到0-24、26-464和466-65535块)。不幸的是,这将是相当困难的,如果可能的话,将导致基于所提供的变量生成from/to端口的丑陋/黑客方式。这是因为最新(v0.11)版本的Terraform(参考和)目前不支持列表元素的映射,但Terraform v0.12将使这些类型的操作更容易。

非常确定,您不能-(如果您有很多排除项,您可以编写一个包装器脚本来吐出所需的TF代码,但是根据端口的数量,最终可能会达到每个SG的最大规则数。
variable "excluded_ports" { default=[25,465] }