忘记堡垒机,使用 Session Manager 登录和管理 EC2 主机

阅读数:149 2019 年 10 月 17 日 09:00

忘记堡垒机,使用 Session Manager 登录和管理 EC2 主机

忘记堡垒机,使用 Session Manager 登录和管理 EC2 主机

企业 IT 管理员经常会面临两难抉择。 一方面,开发人员希望他们部署代码的业务系统的基础架构环境大门敞开,最好自己可以以各种方式能从本地的主机对业务系统进行代码管理和部署。 另一方面,企业的安全架构师又希望业务系统足够的安全,最好是层层把关,才能对系统进行操作。在这样的两难选择下,使得现阶段主流架构都会使用堡垒机作为企业访问内部资源的第一道关卡。例如,他们需要通过登录位于公有子网的堡垒机来对其服务器进行 shell 级访问。 他们可能需要杀死失控进程,查阅服务器日志,微调配置或安装临时补丁,同时保持强大的安全配置文件。然而,使用堡垒机会带来额外的使用上的不便利,以及要承担在实例上打开入站 SSH 端口时出现的风险。

Session Manager 是什么,能做什么

AWS Systems Manager 会话管理器是一个新的交互式 Shell 和 CLI,有助于提供安全、访问权限受到控制且经过审计的 Windows 和 Linux EC2 实例管理。使用会话管理器,您无需打开入站端口、管理 SSH 密钥或使用堡垒主机。并且登录的主机可以处于公有子网或者私有子网。

借助会话管理器,您可以提高安全性,集中进行访问管理并接收详细的审计。除了无需打开入站端口之外,您还可以结合使用会话管理器与 AWS NAT Gateway,以便登录处于私有子网的 EC2 主机。通过使用 AWS Identity and Access Management (IAM) 策略,您可以在一个中心位置授予和撤销对实例的访问权限。提供访问权限后,您可以使用 AWS CloudTrail 审计哪个用户访问了实例,并将每个命令记录到 Amazon S3 或 Amazon CloudWatch Logs。会话管理器用户只需单击并启动一个会话,然后选择一个实例,即可快速开始使用该工具。

要了解有关 AWS Systems Manager 的更多信息,请访问我们的产品页面文档

您现在可以使用新的基于浏览器的交互式 shell 和命令行界面(CLI)来管理 Windows 和 Linux 实例。 使用 Session Manager 来管理主机,可以给您的管理带来如下好处:

  • 访问控制 – 您使用 IAM 策略和用户来控制对实例的访问,而不需要分发 SSH 密钥。您可以使用 IAM 的日期条件运算符限制对所需时间 / 维护窗口的访问。
  • 可审计性 – 可以将命令和响应记录到 Amazon CloudWatch 和 S3 存储桶。您可以安排在新会话启动时收到 SNS 通知。
  • 交互性 – 命令在完全交互式 bash(Linux)或 PowerShell(Windows)环境中同步执行
  • 编程和脚本 – 您可以从控制台以及命令行( aws ssm … )或通过会话管理器 API 的方式来启动会话。

在 EC2 实例上运行的 SSM 代理必须能够连接到会话管理器的公共端点。您可以设置 NAT Gateway,以允许在你的 VPC 的私有子网中(无 Internet 访问或公共 IP 地址)中运行的实例连接到会话管理器。

如何使用 Session Manager 登录 EC2

  1. 创建 IAM Role,使得 System Manager 可以访问 EC2 资源。

创建标准 IAM Role,添加 System Manager 权限

忘记堡垒机,使用 Session Manager 登录和管理 EC2 主机忘记堡垒机,使用 Session Manager 登录和管理 EC2 主机忘记堡垒机,使用 Session Manager 登录和管理 EC2 主机忘记堡垒机,使用 Session Manager 登录和管理 EC2 主机

选择创建好的这个 Role,点击”Add inline policy”添加关于 Session Manager 的策略

忘记堡垒机,使用 Session Manager 登录和管理 EC2 主机

策略的 JSON 文件如下:

Json

复制代码
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetEncryptionConfiguration"
],
"Resource": "*"
}
]
}

将这个 IAM Role 附到对应的希望登录的 EC2 主机上。

忘记堡垒机,使用 Session Manager 登录和管理 EC2 主机

  1. 给 IAM 用户创建对应的 Policy,指定该用户能访问的 EC2。

参考文档:

基础: https://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/getting-started-restrict-access-quickstart.html

高级: https://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/getting-started-restrict-access-examples.html

根据需要,修改红色部分

Json

复制代码
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:StartSession"
],
"Resource": [
"arn:aws:ec2:*:*:instance/instance-id"
]
},
{
"Effect": "Allow",
"Action": [
"ssm:DescribeSessions",
"ssm:GetConnectionStatus",
"ssm:DescribeInstanceProperties",
"ec2:DescribeInstances"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ssm:GetDocument"
],
"Resource": "arn:aws:ssm:region:account-id:document/SSM-SessionManagerRunShell"
},
{
"Effect": "Allow",
"Action": [
"ssm:TerminateSession"
],
"Resource": [
"arn:aws:ssm:::session/${aws:username}-*"
]
}
]
}
  1. 更新 EC2 上的 SSM-agent

注意,如果要通过 Session Manager 来管理 EC2 主机的话,那么需要升级 EC2 上的 SSM Agent 版本至 2.3.68.0

参考文档: https://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/sysman-manual-agent-install.html#agent-install-al

忘记堡垒机,使用 Session Manager 登录和管理 EC2 主机

  1. 通过 Session Manager 进行登录访问

忘记堡垒机,使用 Session Manager 登录和管理 EC2 主机
通过浏览器登录

忘记堡垒机,使用 Session Manager 登录和管理 EC2 主机

通过 Session Manager 进行登录,默认用户是 ssm-user,可以通过 su 命令进行用户切换

忘记堡垒机,使用 Session Manager 登录和管理 EC2 主机

  1. 在主机上安装 AWS CLI 上的 plugin

如果希望通过 AWS CLI 命令行来进行登录管理 EC2,那么需要首先安装好插件

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

以 MacOS 为例:

(1). 执行命令下载文件
curl “ https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/sessionmanager-bundle.zip” -o “sessionmanager-bundle.zip”

(2). 解压文件
unzip sessionmanager-bundle.zip

(3). 执行命令进行插件安装
sudo ./sessionmanager-bundle/install -i /usr/local/sessionmanagerplugin -b /usr/local/bin/session-manager-plugin

(4). 安装插件完毕之后,检验插件的安装情况
session-manager-plugin –version

忘记堡垒机,使用 Session Manager 登录和管理 EC2 主机

  1. 在 AWS CLI 上进行登录

使用命令进行登录,instance-id 是主机的实例 ID,可以在 EC2 控制台中找到

忘记堡垒机,使用 Session Manager 登录和管理 EC2 主机
执行命令进行登录: aws ssm start-session –target instance-id

忘记堡垒机,使用 Session Manager 登录和管理 EC2 主机
查看通过 Session Manager 登录 EC2 的历史

Console 上进行查看

忘记堡垒机,使用 Session Manager 登录和管理 EC2 主机

AWS CLI 上进行查看

忘记堡垒机,使用 Session Manager 登录和管理 EC2 主机
记录通过 Session Manager 登录 EC2 的日志

可以通过 S3 和 CloudWatch Logs 来记录 Session Manager 的日志。在 Session Manager 的 Preferences 参数下可以对日志记录的方式进行配置。

忘记堡垒机,使用 Session Manager 登录和管理 EC2 主机

配置完毕之后再 Preferences 处可以看见配置的 S3 和 CloudWatch 存储日志的地方

忘记堡垒机,使用 Session Manager 登录和管理 EC2 主机

通过 Session History 找到需要查看的 SSH Session 的 Session ID,方便后续在 S3 和 CloudWatch 里面对应的进行查看

忘记堡垒机,使用 Session Manager 登录和管理 EC2 主机

S3 文件日志显示

忘记堡垒机,使用 Session Manager 登录和管理 EC2 主机
下载到本地打开能看见所有的命令操作

忘记堡垒机,使用 Session Manager 登录和管理 EC2 主机
CloudWatch Logs 日志显示

也可以在 CloudWatch Logs 日志中显示登录之后的所有操作

忘记堡垒机,使用 Session Manager 登录和管理 EC2 主机忘记堡垒机,使用 Session Manager 登录和管理 EC2 主机

作者介绍:
姚远
亚马逊 AWS 解决方案架构师,负责基于 AWS 的云计算方案架构的咨询和设计,同时致力于 AWS 云服务在国内的应用和推广。现致力于网络和 DevOps 相关领域的研究。在加入 AWS 之前,在思科中国担任系统工程师,负责方案咨询和架构设计,在企业私有云和基础网络方面有丰富经验。

本文转载自 AWS 技术博客。

原文链接:
https://amazonaws-china.com/cn/blogs/china/session-manager-register-ec2/

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布