AWS 和 Terraform - 安全组中的默认出口规则

2023-11-22

我在许多提供者是 AWS 的 Terraform 项目中看到了可重复的配置:配置出站(出口)规则以允许所有出站流量。

据我了解,这是 AWS 中的默认行为,如AWS 用户指南:

默认情况下,安全组包含允许所有出站流量的出站规则。您可以删除规则并添加仅允许特定出站流量的出站规则。如果您的安全组没有出站规则,则不允许来自您的实例的出站流量。

安全组的常见 Terraform 设置的示例 - 我问题的焦点是出口块:

 resource "aws_security_group" "my_sg" {
       name        = "my_sg"
       description = "Some description"
       vpc_id      = "${aws_vpc.my_vpc.id}"
       tags {
         Name = "my_sg_tag"
       }

       #Not redundant - Because a new security group has no inbound rules.
       ingress {
         from_port   = "80"
         to_port     = "80"
         protocol    = "TCP"
         cidr_blocks = ["0.0.0.0/0"]
       }

       #Isn't this redundant?    
       egress {
         from_port   = 0
         to_port     = 0
         protocol    = "-1"
         cidr_blocks = ["0.0.0.0/0"]
       }
}

此配置是为了文档而进行的还是有技术原因?


The 的文档aws_security_group资源特别指出,他们在默认情况下故意删除了 AWS 的默认出口规则,并要求用户指定它以限制对用户的意外:

关于出口规则的注意事项:默认情况下,AWS 在 VPC 内创建新安全组时会创建 ALLOW ALL 出口规则。在 VPC 内创建新的安全组时,Terraform 将删除此默认规则,并要求您在需要该规则时专门重新创建它。我们认为这会减少控制出口规则方面的意外情况。如果您希望此规则到位,您可以使用此出口块:

egress {
  from_port   = 0
  to_port     = 0
  protocol    = "-1"
  cidr_blocks = ["0.0.0.0/0"]
}

这里还有一个技术/用户体验原因,即让 Terraform 了解在更改安全组时是否应该保留允许所有出口规则是很棘手的。它是否应该始终提供允许所有出口规则,除非指定了另一个出口规则,然后如果指定则删除默认规则?与以下的组合将如何工作aws_security_group_rule资源?

AWS 已经决定,允许所有出站的默认规则比没有它更好的用户体验(并且使人们困惑为什么他们的实例无法进行出站通信),而无需too很大的安全影响(与入站的同等影响相比)。即使他们现在改变主意,因为这样做的好处,他们也无法在不大规模破坏很多人的设置/工作流程的情况下做到这一点,而 AWS 非常不愿意这样做。

另一方面,Terraform 做出了相反的决定,这更适合该工具,并稍微改善了该工具的安全状况,但代价是让人们在很多地方定义重复的出口块。

如果您特别关心重复并且总是希望允许所有出口流量,那么您可能会发现使用自动包含允许所有出口规则的模块很有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AWS 和 Terraform - 安全组中的默认出口规则 的相关文章

随机推荐