如何通过Terraform为AWS安全组入站规则设置Name标签?
问题原因
你现在的写法无法生效是两个原因导致的:
- 内嵌在
aws_security_group资源中的ingress配置块本身不支持tags参数,你写在这部分的标签会被AWS Provider直接忽略,不会应用到规则上。 - AWS安全组规则的标签是独立于安全组本体标签的资源属性,无法通过安全组的全局配置直接传递给单条规则。
解决方法
你需要拆分配置,不用安全组资源内嵌的ingress字段,改为单独声明aws_security_group_rule资源配置每条入站/出站规则,这个资源支持给单条规则配置独立标签,示例代码如下:
# 安全组本体配置 resource "aws_security_group" "allow-google-dns" { name = "allow-google-dns" description = "Allows google dns" vpc_id = var.vpcid tags = { Name = "Allow-Google" } } # 单独声明入站规则,可配置独立标签 resource "aws_security_group_rule" "google_dns_in" { type = "ingress" from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["8.8.8.8/32"] security_group_id = aws_security_group.allow-google-dns.id # 单条规则的Name标签,配置后即可在控制台对应规则列展示 tags = { Name = "MyName" } }
注意事项
- 需要你的AWS Terraform Provider版本 >= 3.64.0,该版本才新增了安全组规则的标签支持。
- 不要同时混用安全组内嵌
ingress/egress规则和独立aws_security_group_rule资源,否则会出现规则冲突、反复覆盖的问题,要给单条规则打标签请统一使用独立规则资源配置所有规则。
内容的提问来源于stack exchange,提问作者M Smith
相关产品推荐
相关产品推荐

