![](/img/trans.png)
[英]How to append or delete the ingress/egress rule for a security group using Terraform?
[英]AWS and Terraform - Default egress rule in security group
我在提供者是 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"]
}
}
此配置是为文档而进行的还是有技术原因?
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_security_group_rule
?
AWS已经做出了决定,一个默认规则,允许所有出口出站比没有它(和混乱的人,为什么它们的实例是无法沟通出站)没有太多的安全影响一个更好的用户体验(相比于等价入站)。 即使他们现在改变主意对此的好处,他们也无法在不大规模破坏 AWS 非常不愿意做的很多人的设置/工作流程的情况下做到这一点。
另一方面,Terraform 以另一种方式做出了决定,这更适合该工具,并略微改善了工具的安全状况,代价是让人们在很多地方定义重复的出口块。
如果您特别关心重复并且您总是希望允许所有出口流量,那么您可能会发现使用自动包含允许所有出口规则的模块来代替很有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.