如何限制AWS EC2 22端口仅允许AWS CodeBuild访问?
解决方案:限制EC2 22端口访问并通过CodeBuild复制文件
1. 收紧EC2安全组的22端口规则
先修改EC2关联的安全组入站规则,替换原有的0.0.0.0/0(允许所有IP访问):
- 添加规则1:允许你的公网IP访问22端口(格式为
xxx.xxx.xxx.xxx/32,自己的公网IP可通过搜索“我的IP”获取) - 添加规则2:允许CodeBuild所在VPC的子网CIDR访问22端口。如果你的CodeBuild还没配置VPC,先进入CodeBuild项目设置,将其配置到与EC2同VPC的子网(私有/公有子网均可,根据你的网络架构选择),然后把该子网的CIDR填入规则(例如
10.0.1.0/24)
2. 配置CodeBuild的SSH密钥访问权限
- 将EC2的SSH私钥(
.pem文件的内容)存入AWS Secrets Manager,命名比如EC2-SSH-Key - 编辑CodeBuild的执行IAM角色,添加权限:允许
secretsmanager:GetSecretValue操作针对上述密钥资源 - 在CodeBuild项目的环境设置中,确保开启“允许访问AWS服务”,保证流水线能正常调用Secrets Manager
3. 编写buildspec.yml实现文件复制
在你的buildspec.yml中加入以下构建步骤,完成文件复制:
version: 0.2 phases: build: commands: # 从Secrets Manager拉取SSH私钥 - aws secretsmanager get-secret-value --secret-id EC2-SSH-Key --query SecretString --output text > ec2-key.pem # 设置私钥权限(SSH要求权限不能过宽) - chmod 400 ec2-key.pem # 用scp复制单个/多个文件到EC2,替换占位符为你的实际信息 - scp -i ec2-key.pem -o StrictHostKeyChecking=no ./your-local-files/* ec2-user@<EC2-IP>:/remote-target-folder/ # 若需复制整个目录,推荐用rsync(更高效): # - rsync -avz -e "ssh -i ec2-key.pem -o StrictHostKeyChecking=no" ./your-local-dir/ ec2-user@<EC2-IP>:/remote-target-folder/
注意:
ec2-user是Amazon Linux系列的默认用户名,Ubuntu系统请换成ubuntu;<EC2-IP>如果是同VPC内的EC2,填私有IP即可,跨VPC则填公网IP(需确保CodeBuild能访问到)
4. 验证效果
- 用自己的设备SSH登录EC2,确认访问正常
- 手动触发CodeBuild流水线,查看构建日志,确认文件成功复制到EC2目标路径
- 尝试用其他外部IP访问EC2的22端口,应该会被安全组拦截
内容的提问来源于stack exchange,提问作者muhammad adil
相关产品推荐
相关产品推荐

