一、Session Manager简介

Session Manager是System Manager(以下简称SSM)里边的管理套件其中的一个组件。它是一项Region级别的区域性服务。使用Session Manager在特定系统上可以快速免密钥登录EC2。

1、使用Session Manager的前提

几个前提:

  • EC2系统上安装了System Manager Agent,简称SSM Agent;
  • EC2上附带了Session Manager所需要的IAM Role角色;
  • EC2具有外网访问权限,可以连接到本区域的Session Manager服务;
  • EC2没有外网访问权限,但是本VPC内配置了Session Manager的VPC Endpoint,可以从私有子网Private Subnet连接到本区域的Session Manager服务;
  • 如果希望从开发者本机(云下笔记本)使用Session Manager登录到EC2,那么使用者环境需要安装AWSCLI、配置正确的密钥,并安装Session Manager插件;
  • 在以上全过程中,EC2无须打开外网TCP 22端口的访问权限,所有操作将通过EC2上安装的SSM Agent传递到EC2上。

2、默认支持Session Manager的系统

在创建EC2时候选择以下的AWS官方AMI,已经内置System Manager Agent的,支持使用Session Manager包括:

  • Amazon Linux 1,2,以及未来版本;
  • Ubuntu 18.04,以及更高;
  • Windows Server 2016,以及更高版本。

3、需要额外安装System Manager Agent才能支持Session Manager的操作系统

以下操作系统默认不包含System Manager Agent,需要额外手工安装Agent:

  • 社区的CentOS镜像
  • 社区其他非官方制作者发布的镜像
  • 从IDC导入的镜像

SSM Agent是开源的,如果您对在EC2内安装管理控制端有疑虑,请从如下Github地址获取SSM的代码:

https://github.com/aws/amazon-ssm-agent

安装Agent的步骤如下:

https://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/sysman-manual-agent-install.html

本文按照使用Amazon Linux 2系统编写,已经内置System Manager Agent,无需再手动安装。

二、为EC2创建Session Manager需要的IAM角色并绑定到EC2

1、创建IAM角色

进入IAM节点,点击左侧的角色Role按钮,点击右侧的创建角色按钮。如下截图。

点击服务类型是EC2,然后向下滚动屏幕。如下截图。

选择EC2 Role for System Manager,然后点击右下角的下一步权限。如下截图。

在策略界面上,自动加载出来了一条策略。测试无须做配置,直接点击标签按钮跳到下一步。如下截图。

在配置标签界面上,无须配置,点击下一步跳过。

在创建IAM角色的最后一步,输入角色的名称,例如ec2-ssm-login,稍后配置中将使用这个名字。最后点击右下角的创建角色完成创建过程。如下截图。

2、新创建EC2时候选择Session manager需要的IAM角色

创建使用System Manager – Session Manager登录的EC2的过程,与创建普通EC2没有明显的差别。其中一个关键步骤是,在创建的时候就赋予EC2响应IAM角色。如下截图。

在选择EC2安全规则组一步,无需开放任何端口,即便将所有入栈端口都关闭,也可以使用SSM。如下截图。

在创建的最后一步,选择EC2登录密钥,这里为了演示效果,不选择任何SSH Key,然后直接创建EC2。如下截图。

创建EC2完成。

三、在AWS控制台上使用Session Manager连接到EC2

在EC2创建时候,需要等待1-2分钟,待其健康状态变为2/2 checks Passed也就是检查通过后,才可开始连接。选中EC2,点击右上方的连接按钮。如下截图。

在新弹出的窗口中,选择连接方式是Session Manager,并点击连接。如下截图。

如果之前的配置不正确,这一步将提示无法检测SSM Agent,也就无法连接。

连接成功。如下截图。

Session Manager也可以用于Windows操作系统。登录到Windows以后提供的不是GUI图形界面,而是提供Windows Powershell。您可以通过Powershell安装软件、调整配置。如下截图。

四、在云下客户机(如开发者笔记本)使用AWS CLI的Session Manager插件登录到EC2

在云下的开发环境,例如开发者本机,如果安装了AWSCLI工具,那么也可以通过Session Mangaer连接到EC2。为此,需要安装AWS CLI的插件,下载地址和文档说明在这里:

https://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html

在以上文档中,可以分别找到Windows、Linux和MacOS的版本。

环境安装好之后,连接到EC2之前还需要获取本EC2的Instance ID。查看Instance ID可以通过EC2控制台网页获得,也可以在CLI上执行aws ec2 describe-instances 也可以看到Instance ID。获取Instance ID后,执行如下命令:

aws ssm start-session --target i-0b35c6823Ieeafc7O

即可登录到EC2。如下截图是在MacOS下的AWSCLI使用Session Manager登录到Windows EC2后的Powershell界面。

此方法可在运行AWSCLI的客户机上,跨平台远程登录到Linux、Windows的EC2系统上,其中Linux会打开默认shell,而Windows系统就会打开Powershell。

五、配置SSM登录后的操作日志

进入SSM控制台,找到左侧的节点管理,在其中找到Session Manager。如下截图。

进入SSM模块后,查看属性选项。如下截图。

在设置界面下,向下滚动页面,即可看到S3存储桶和自动加载脚本的设置。如下截图。

Shell Profile的作用是在登录后自动执行脚本,可根据实际需要进行配置。

查看S3存储桶内,即可看到Session Manager登录的日志。如下截图。

将日志下载到本地后,打开可以看到其中的内容就是SSH日志。

六、使用AWSCLI+Session Manager插件转发内网端口到开发者本地

上文使用Session Manager可以让外部用户远程连接到EC2,当搭配AWSCLI时候,还可以从开发者本地的直接连接到EC2。接下来进一步拓展使用场景,有时候还需要从开发者本机访问云上VPC内的数据库。这时候能访问到EC2是不够的,最好从开发者本机能直接访问VPC内的数据库。这种场景可以使用Session Manager的端口转发来实现。

首先在开发者的环境上安装好AWSCLI,并安装好Session Manager插件。接下来确认下VPC内要转发的RDS的Endpoint名称,然后构建如下命令:

aws ssm start-session \
    --target i-123456xxxxxxxx \
    --document-name AWS-StartPortForwardingSessionToRemoteHost \
    --parameters '{"host":["mydb.example.ap-east-1.rds.amazonaws.com"],"portNumber":["3306"], "localPortNumber":["56789"]}'

启动完毕后,即可将RDS的Endpoint映射到本地的56789端口。另外,此窗口不能关闭,否则SSH转发会断开链接。

接下来使用如下命令即可连接到RDS。注意命令中需要使用127.0.0.1的IP地址表示本机,不能使用localhost,否则mysql客户端可能会查找本机的socket文件而不是通过网络接口连接。

mysql -h 127.0.0.1 -P 56789 -u admin -p

输入RDS的admin账户的密码即可完成登录。

七、参考文档

安装Session Manager插件:

https://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html

使用Session Manager端口转发:

https://github.com/peteragility/ssm-port-forward

完。

原文地址:http://www.cnblogs.com/xzlive/p/16825987.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性