[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

【超过500家企业部署】AWS搭建、运维、监控服务

【超过500家企业部署】AWS搭建、运维、监控服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

[仅适用于 WordPress] 云服务器“Web Speed”

[仅适用于 WordPress] 云服务器“Web Speed”

[便宜]网站安全自动诊断“快速扫描仪”

[便宜]网站安全自动诊断“快速扫描仪”

[预约系统开发] EDISONE定制开发服务

[预约系统开发] EDISONE定制开发服务

[注册100个URL 0日元] 网站监控服务“Appmill”

[注册100个URL 0日元] 网站监控服务“Appmill”

【兼容200多个国家】全球eSIM“超越SIM”

【兼容200多个国家】全球eSIM“超越SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

【全球专属服务】Beyond北美及中国MSP

【全球专属服务】Beyond北美及中国MSP

[YouTube]超越官方频道“美由丸频道”

[YouTube]超越官方频道“美由丸频道”

如何在 Terraform 中向安全组添加多个规则

 

*沾面重田(神户六甲道)

你好!
我是Beyond大阪事务所的拉面大王Hide。
这是我的第 10 篇文章。

上次,我写了有关如何使用 Google Cloud Load Balancing (GCLB) 的全球外部 HTTP(S) 负载均衡器配置 URL 重定向的文章!

最新型号和传统型号的 URL 重定向设置有所不同,因此有点困难,但了解一下很有用,所以如果您有兴趣,请看一下以下内容!

● 第 1 部分:如何使用 GCP 的全球外部 HTTP(S) 负载均衡器配置 URL 重定向设置(传统类型)
● 第 2 部分:如何使用 GCP 的全球外部 HTTP(S) 负载均衡器配置 URL 重定向设置

在 Terraform 中向安全组添加多个规则

通常,在创建安全组时,您会手动创建多个入站规则,但在 Terraform 中,您也希望创建一个具有多个入站规则的安全组并将其附加到实例。

我们将介绍两种创建这些多个规则的方法。

最终的目标是让它看起来像下图一样!
让我们尽力而为吧!

设定方法

首先,第一种设置方法是在aws_security_group中设置两个ingress(入站规则)。
这非常简单并且非常容易使用。

资源“aws_security_group”“test-sg”{名称=“test-sg”描述=“test-sg”出口{from_port=0to_port=0协议=“-1”cidr_blocks=[“0.0.0.0/0”]}入口 { from_port = 80 to_port = 80 协议 = "tcp" cidr_blocks = ["0.0.0.0/0"] } 入口 { from_port = 443 to_port = 443 协议 = "tcp" cidr_blocks = ["0.0.0.0/0"] } }

第二种配置方法是配置 aws_security_group_rule。

您可以将其写入 aws_security_group_rule 中,而不是将其写入 aws_security_group 中。使用此方法,您只能在一个 aws_security_group_rule 资源中写入一条规则,因此如果您要写入多条规则,请创建一个具有不同资源名称的 aws_security_group_rule 资源,如下所示,然后这是添加规则的方法。

但是,如果使用得当的话可能会很方便,但是如果您使用此 aws_security_group_rule 来设置规则,请务必在设置之前阅读以下内容!

资源“aws_security_group”test-sg“{名称=“test-sg”描述=“test-sg”出口{from_port = 0 to_port = 0协议=“-1”cidr_blocks = [“0.0.0.0/0”] ipv6_cidr_blocks = ["::/0"] } } 资源 "aws_security_group_rule" "test-sg-inbound-http" { type = "ingress" from_port = 80 to_port = 80 协议 = "tcp" cidr_blocks = [ "0.0.0.0/0" ] security_group_id = aws_security_group.test-sg.id } 资源 "aws_security_group_rule" "test-sg-inbound-https" { type = "ingress" from_port = 443 to_port = 443 协议 = "tcp" cidr_blocks = [ "0.0.0.0/0 "] security_group_id = aws_security_group.test-sg.id }

请勿在 aws_security_group 和 aws_security_group_rule 中同时设置规则


“我在 aws_security_group 中设置了 ingress,但是

我想添加另一个入口,因此使用 aws_security_group_rule 添加它! ”

我是这样想的,并在 aws_security_group 中设置了入口规则,但是如果我将其添加到 aws_security_group_rule 中,
规则会发生冲突,并在应用时创建或删除,从而导致错误...

“这不可能是bug!你在说什么?”

我确信有人有这样的想法,当我第一次了解到它时,我也是完全一样的方式哈哈
对于那些人,我会留下我实际验证过的日志!

在下面的main.tf中应用。

资源“aws_security_group”“test-sg”{名称=“test-sg”描述=“test-sg”出口{from_port=0to_port=0协议=“-1”cidr_blocks=[“0.0.0.0/0”]}入口 { from_port = 80 to_port = 80 协议 = "tcp" cidr_blocks = ["0.0.0.0/0"] } } 资源 "aws_security_group_rule" "test-sg-inbound-https" { type = "ingress" from_port = 443 to_port =第443章 协议=“tcp” cidr_blocks=[“0.0.0.0/0”]

第一个应用在 AWS 端将如下所示。
端口 80 和 443 的入站规则已创建,没有任何问题。

但是,当您第二次应用它时,它会发生更改,并且 aws_security_group_rule 中的设置将被删除,即使 main.tf 没有进行任何更改。

aws_security_group.test-sg:刷新状态... [id=sg-063e7c33de8e1dc09] aws_security_group_rule.test-sg-inbound-https:刷新状态... [id=sgrule-4193634971] aws_instance.test:刷新状态... [ id=i-07125d27a59e1b8f5] Terraform 使用选定的提供程序生成以下执行计划。资源操作用以下符号指示:~就地更新 Terraform 将执行以下操作:# aws_security_group.test-sg 将在- 中更新。地点〜资源“aws_security_group”“test-sg”{id =“sg-063e7c33de8e1dc09”〜入口= [ - { - cidr_blocks = [ - “0.0.0.0/0”,] - 描述=“” - from_port = 443 - ipv6_cidr_blocks = [] - prefix_list_ids = [] - 协议 = "tcp" - security_groups = [] - self = false - to_port = 443 }, - { - cidr_blocks = [ - "0.0.0.0/0", ] - 描述 = "" - from_port = 80 - ipv6_cidr_blocks = [] - prefix_list_ids = [] - 协议 = "tcp" - security_groups = [] - self = false - to_port = 80 }, + { + cidr_blocks = [ + "0.0.0.0/0", ] + 描述 = null + from_port = 80 + ipv6_cidr_blocks = [] + prefix_list_ids = [] + 协议 = "tcp" + security_groups = [] + self = false + to_port = 80 }, ] name = "test-sg" 标签 = {} # (隐藏 7 个未更改的属性) } 计划:0 表示添加,1 表示更改,0 表示销毁 您要执行这些操作吗? Terraform 只会执行上述操作。输入一个值:是

第二次应用后的AWS屏幕如下。 aws_security_group_rule 中设置的部分已消失。 。 。

官方 aws_security_group 资源描述如下:

简而言之,即使您在 aws_security_group_rule 中设置,它也会被 aws_security_group 中设置的内容覆盖。如果你在不知情的情况下操作它,那可能会很可怕......

Terraform 目前提供独立的安全组规则资源(单个入口或出口规则)和包含内联定义的入口和出口规则的安全组资源。

具有内联规则的安全组当前无法与安全组规则资源结合使用。这样做会导致规则配置冲突并覆盖规则。

● 参考: https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group

概括

这次我介绍了如何使用Terraform向安全组添加多个规则,您觉得怎么样?

您可以使用 aws_security_group 和 aws_security_group_rule 定义多个规则,但请注意不要同时设置规则,否则最终可能会犯下可怕的错误!

我将由您决定使用哪一个,但除非有特殊原因,否则我认为通过在 aws_security_group 中设置多个规则更容易管理和避免冲突。

请在创建安全组时参考!

如果您觉得这篇文章有帮助,请点赞!
5
加载中...
5 票,平均:1.00 / 15
6,930
X Facebook 哈特纳书签 口袋
[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

写这篇文章的人

关于作者

隐藏@基础设施工程师

这一切都始于一次非常有趣的采访。
大阪系统解决方案部门的一名职业中期员工。我的
工作是构建和运营服务器和云!
我拥有 LPIC1、AWS SAA 和 OCI 架构师助理资格。

其实我很喜欢拉面,
已经调查过大阪100多家店了(。-∀-)我要努力成为Nibi Beyond

我也在Twitter,所以请关注我(´∇`)
点击右上角的Twitter标记! !