低代码到底是不是行业毒瘤?一线大厂怎么做的?戳此了解>>> 了解详情
写点什么

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

2019 年 10 月 17 日

忘记堡垒机,使用 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 权限






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



策略的 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 主机上。



  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



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




通过浏览器登录



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



  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



  1. 在AWS CLI上进行登录



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



执行命令进行登录: aws ssm start-session –target instance-id



查看通过 Session Manager 登录 EC2 的历史


Console 上进行查看



AWS CLI 上进行查看



记录通过 Session Manager 登录 EC2 的日志


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



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



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



S3 文件日志显示



下载到本地打开能看见所有的命令操作



CloudWatch Logs 日志显示


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




作者介绍:


姚远


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


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/session-manager-register-ec2/


2019 年 10 月 17 日 09:00373
用户头像

发布了 1249 篇内容, 共 33.1 次阅读, 收获喜欢 34 次。

关注

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

评论

发布
暂无评论
发现更多内容

《我们一起学集合》-ArrayList

蚊子

数据结构 面试 ArrayList JAVA集合

编程小技巧之 Linux 文本处理命令(二)

程序员历小冰

Linux 编辑器 sed

悟透前端 | javascript中变量声明var、let、const的区别

devpoint

var const let js变量声明

服务网格的最佳实践

阿里巴巴中间件

讲真,一位8 年 Java 经验大牛的面试总结,你照猫画虎还怕收不到offer?

Java架构之路

Java 程序员 架构 面试 编程语言

2021年了,还听到有些兄弟在问Kafka香不香?

后台技术汇

28天写作

当视频恋爱 App 用上了 Serverless

阿里巴巴中间件

宙斯运维平台简述,看数十万云服务器如何高效运维?

李忠良

28天写作

28天瞎写的第二百三十一天:一次被骗的故事

树上

28天写作

京东资深架构师推荐学习6本实战文档:多线程+Redis+Nginx+MySQL+JVM....

Java成神之路

Java 程序员 架构 面试 编程语言

我国首个自主可控区块链软硬件技术体系发布

CECBC区块链专委会

区块链

产业区块链蓬勃发展 联盟链成为落地应用最大杀器

CECBC区块链专委会

区块链

阿里直招怒斩“P7“offer,自曝狂啃六遍的面试笔记

Java架构之路

Java 程序员 架构 面试 编程语言

加油,成功通过阿里P7Java岗面试,分享一些面试心得

Java架构之路

Java 程序员 架构 面试 编程语言

阿里云重磅发布云拨测产品:深度挖掘数据,精准定位 IT 问题

阿里巴巴中间件

偷刷阿里学长的大厂面经宝典,四肝挑战字节,成功上岸

Java成神之路

Java 程序员 架构 面试 编程语言

收藏=学会!阿里新产Java全栈笔记+2021面试指南全新开源,助力金三银四!

程序员小毕

Java spring 架构 面试 微服务

是我太菜,美团四面+蚂蚁金服四面全部凉凉,太难了!!!

Java成神之路

Java 程序员 架构 面试 编程语言

微服务“大门”如何选择?

阿里巴巴中间件

牛皮了!字节面试官爆肝七天七夜总结了一份算法面试笔记

互联网架构师小马

Java 字节跳动 数据结构 面试 算法

LeetCode题解:200. 岛屿数量,DFS,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

DevOps到底是什么意思?

xcbeyond

DevOps 方法论 软件测试 28天写作

2021直播电商下半场,“网易严选们”为何成主播良港?

脑极体

“复制”马斯克(二):“一无所有”的世界首富想要什么?

脑极体

在游戏运营行业,函数计算如何解决数据采集分析痛点?

阿里巴巴中间件

智能电动车的估值模式及电气架构变迁 (28天写作 Day21/28)

mtfelix

汽车电子 28天写作 智能汽车 汽车电气架构

七面阿里成功offer,入职就是25k*16薪,还原我的大厂面经

云流

Java 程序员 面试

推荐给所有程序员!这份“Netty最强宝典”你不服不行(实战+权威指南+项目+面试题库)

Java成神之路

Java 程序员 架构 面试 编程语言

北京朝阳法院借力区块链化解物业纠纷

CECBC区块链专委会

法院调解

CSS(七)——设置背景颜色和背景图像

程序员的时光

程序员 前端 七日更 28天写作

《携程技术2020年度合辑》,送给爱学习的你

携程技术中心

2021 ThoughtWorks 技术雷达峰会

2021 ThoughtWorks 技术雷达峰会

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