亚马逊AWS官方博客

新功能 – AWS Systems Manager Session Manager 支持通过 Shell 访问 EC2 实例

当今这个时代对于企业 IT 管理员来说非常有趣。一方面,开发人员在探讨(并着手实施)基础设施即代码的美好未来,将服务器和其他资源视之如敝履。另一方面,仍需将旧版系统视之如爱宠,需要手动或借助有限的自动化进行设置和维护。与我交流过的许多客户都在快速向未来迈进,但却困囿于眼下的环境。例如,他们有时仍需要在 Shell 级别访问服务器。他们可能需要在维护强大的安全配置文件的同时,强制结束失控的进程、查阅服务器日志、优化配置或安装临时补丁。他们希望避免因运行堡垒主机产生的麻烦,也希望规避因在实例上打开入站 SSH 端口带来的风险。

我们已经通过 AWS Systems Manager Run Command 满足了部分 Shell 级访问需求。这款 AWS 工具可让管理员安全访问 EC2 实例。允许他们创建命令文档并在任何所需的 EC2 实例组上运行它们,同时支持 Linux 和 Microsoft Windows。这些命令以异步方式运行,并捕获输出以供审核。

全新 Session Manager

今天,我们增加了新的 Shell 级访问选项。全新 Session Manager 让 AWS Systems Manager 更加强大。现在,您可以使用基于浏览器的全新交互式 Shell 和命令行界面 (CLI) 来管理 Windows 和 Linux 实例。其功能如下:
安全访问 – 您不必在实例上手动设置用户账户、密码或 SSH 密钥,也不必打开任何入站端口。Session Manager 通过 SSM 代理,通过在实例上生成的加密隧道与实例进行通信,不需要堡垒主机。

访问控制 – 您可以使用 IAM 策略和用户来控制实例访问权限,无需分发 SSH 密钥。您可以利用 IAM 的 日期条件运算符,将访问限制在所需的时间/维护时段。

可审计性 – 命令和响应可以记录到 Amazon CloudWatch 和 S3 存储桶中。您可以安排在新会话启动时接收 SNS 通知。

交互性 – 命令在完全交互的 bash (Linux) 或 PowerShell (Windows) 环境中同步执行

编程和脚本编写 – 除了我稍后要展示的控制台访问权限之外,您还可以通过命令行 (aws ssm ...) 或 Session Manager API 发起会话。

EC2 实例上运行的 SSM 代理必须能够连接到 Session Manager 的公共终端节点。您还可以设置 PrivateLink 连接,允许在私有 VPC 中运行的实例(在无法访问互联网或公共 IP 地址的情况下)连接到 Session Manager。

Session Manager 实际应用

为了使用 Session Manager 访问我的 EC2 实例,实例必须运行位于最新版本(2.3.12 或更高版本)的 SSM 代理中。实例的实例角色必须引用允许访问相应服务的策略;您可以创建自己的策略,也可以使用 AmazonEC2RoleForSSM 。这是我的 EC2 实例( sk1 sk2 运行的是 Amazon Linux; sk3-win sk4-win 运行的是 Microsoft Windows):

在运行第一条命令之前,我要打开 AWS Systems Manager,单击首选项 。由于我想记录命令,因此我要输入 S3 存储桶的名称和 CloudWatch 日志组。如果我输入其中一个或两个值,则实例策略还必须授予对它们的访问权限:

准备就绪了! 我单击“会话”,可以看到没有活动会话,然后单击 Start session (开始会话)继续操作:

选择一个 Linux 实例 (sk1 ),然后再次单击 Start session(开始会话):

会话将立即打开:

我可以为我的一个 Windows 实例执行相同的操作:

在 CloudWatch 中可以看到日志流:

每个流都包含单个会话的内容:

工作过程

与以往一样,我们在使用 Session Manager 时会需要另外一些功能。以下为这些功能的简要介绍:
SSH 客户端 – 您可以在 Session Manager 上创建 SSH 会话,而无需打开任何入站端口。

本地访问 – 我们计划通过 Session Manager 为您提供访问本地实例(必须运行 SSM 代理)的功能。

现已推出

Session Manager 现已在所有 AWS 区域(包括 AWS GovCloud)推出,无需额外付费即可使用。

 

本篇作者

Jeff Barr

AWS 首席布道师; 2004年开始发布博客,此后便笔耕不辍。