我正在尝试在私有子网中创建一个 EC2 实例(Amazon Linux,因此我不必配置 SSM 代理,因为它应该是自动配置的),并且希望能够通过 SSH 进入它。根据这篇文章为此,我必须使用 AWS Systems Manager。我之前使用 codestar/beanstalk 做过很多工作,但现在只是想能够通过 AWS CLI 手动创建和删除所有内容,以便学习。
以下是我可以正常运行的命令(使用我的角色成功创建了 ec2 实例)
aws iam create-role --role-name ec2-role --assume-role-policy-document file://roles/ec2-role.json
aws iam attach-role-policy --role-name ec2-role --policy-arn "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"
aws iam create-instance-profile --instance-profile-name ssm-instance-profile-for-ec2-instances
aws iam add-role-to-instance-profile --instance-profile-name ssm-instance-profile-for-ec2-instances --role-name ec2-role
// Creating the EC2 instance
aws ec2 run-instances --image-id ami-0db9040eb3ab74509 --count 1 --instance-type t2.micro --key-name key-pair-for-instance1 --subnet-id <my_valid_subnet_id> --iam-instance-profile Name=ssm-instance-profile-for-ec2-instances
我从以下命令中截取了部分内容这个帖子。
我的 ec2-role 的 json 文件:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "Service": "ec2.amazonaws.com"},
"Action": "sts:AssumeRole"
}
]
}
不幸的是,这个实例在 SSM (系统管理器) 中不可见:
aws ssm describe-instance-information
{
"InstanceInformationList": []
}
我一直在关注 SSM 的主要文档,从以下页面我可以了解到,您所需要的只是 AmazonSSMManagedInstanceCore 策略: https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-instance-profile.html
到目前为止,Web 控制台还没有提供任何帮助,到此页面它将角色和实例配置文件视为同一事物。
我在这里缺少什么才能使用 aws ssm 命令启动 ssh 会话?
答案1
SSM 需要访问 ssm 和 ssmmessages aws 端点才能工作。如果您的 ec2 实例无法访问互联网(没有 natgateway 的私有子网),则需要为该服务启用 vpc 私有端点。
https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-create-vpc.html
答案2
我按照这张图片解决了这个问题AWS 网络基础知识视频:
我需要做的事情:
- 向 VPC 添加互联网网关
- 向公共子网添加 NAT 网关并为其分配弹性 IP
- 配置两个路由表,一个用于具有到互联网网关的路由的公共子网,另一个用于具有到 NAT 网关的路由的私有表。
- 创建一个安全组并将 EC2 实例添加到其中。安全组默认具有 0.0.0.0/0 出站访问权限,从那时起,我就可以访问该实例并在 AWS Systems Manager 下的会话管理器中启动 SSH 会话。有趣的是,它不需要允许端口 22 上的入站 SSH 流量的规则。
感谢@Taylor 和@Tim 的建议。
编辑:有关如何构建可通过 SSM 访问的带有子网和 ec2 接口的简单 VPC 的完整教程: https://dpgmedia-engineering.medium.com/applying-basic-networking-fundamentals-in-aws-d8ffdc4ad537