Terraform中跨账户源安全组ID无法白名单的问题求助
解决跨账户安全组SSH访问的Terraform实现方案
你的问题出在跨账户安全组规则的写法上——AWS Terraform provider并不支持把账户ID和安全组ID拼接成账户ID:SG-ID的格式传入source_security_group_id,正确做法是拆分使用两个参数:source_security_group_id(仅填安全组ID)和source_security_group_owner_id(填对方账户ID)。
修正后的代码示例
resource "aws_security_group" "builder_sg" { name = "Builder-Dev-SG" description = "SG for dev account builds" vpc_id = data.aws_vpc.staging_vpc.id } resource "aws_security_group_rule" "builder_sg_ingress_0" { security_group_id = aws_security_group.builder_sg.id description = "Allow SSH from central account CI/CD SG" type = "ingress" protocol = "tcp" from_port = 22 to_port = 22 # 仅填中央账户的CI/CD安全组ID source_security_group_id = "sg-0a32d4ae223c46901" # 指定安全组所属的中央账户ID source_security_group_owner_id = "12345678910" }
关键说明
source_security_group_owner_id参数用于告诉AWS:这个安全组属于另一个账户,需要跨账户查找验证。- 无需在中央账户做额外配置,只要次级账户的IAM身份(执行Terraform的角色/用户)拥有
ec2:AuthorizeSecurityGroupIngress权限,且目标安全组(中央账户的CI/CD SG)存在即可。
执行terraform apply时,AWS会通过你指定的账户ID去对应账户查找安全组,不会再出现Security group not found或InvalidGroupId.Malformed的错误。
内容的提问来源于stack exchange,提问作者user21190291
相关产品推荐
相关产品推荐

