如何通过Terraform配置允许Amazon EC2控制台连接实例
用Terraform配置EC2安全组支持AWS控制台SSH连接
要通过AWS控制台的「连接」按钮SSH登录EC2实例,你需要在Terraform中配置安全组入站规则,允许AWS Instance Connect服务的流量访问22端口。具体实现步骤如下:
- 获取对应区域的Instance Connect前缀列表
AWS每个区域都有专属的EC2 Instance Connect前缀列表,通过Terraform的data资源可自动获取该列表ID,无需手动查找:
data "aws_prefix_list" "instance_connect" { name = "com.amazonaws.${var.aws_region}.ec2-instance-connect" }
提示:将
var.aws_region替换为你实际使用的AWS区域变量,或直接写死区域名称(比如us-east-1)。
- 配置安全组入站规则
在你的EC2安全组资源中,添加针对22端口的入站规则,引用上述获取的前缀列表ID:
resource "aws_security_group" "ec2_instance_sg" { name = "ec2-instance-connect-sg" description = "Allow EC2 Instance Connect SSH access" vpc_id = var.vpc_id # 替换为你的VPC ID # 允许Instance Connect服务访问SSH端口 ingress { from_port = 22 to_port = 22 protocol = "tcp" prefix_list_ids = [data.aws_prefix_list.instance_connect.id] } # 默认允许所有出站流量(可按需调整) egress { from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] } tags = { Name = "EC2-Instance-Connect-SG" } }
- 关联安全组到EC2实例
确保你的EC2实例资源关联这个配置好的安全组:
resource "aws_instance" "example" { ami = var.ami_id # 替换为支持Instance Connect的AMI(如Amazon Linux 2、Ubuntu 20.04+) instance_type = "t2.micro" vpc_security_group_ids = [aws_security_group.ec2_instance_sg.id] # 其他实例配置项... }
额外说明
- 你的EC2实例AMI需要预装
ec2-instance-connect包,主流AWS官方AMI(如Amazon Linux 2、Ubuntu)默认已包含该组件。 - 使用前缀列表的方式比手动配置CIDR更安全,因为前缀列表会由AWS自动维护更新,无需你手动调整IP范围。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

