NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

使用 AWS System Manager Sessions Manager 的端口转发功能

  • 2019-09-18
  • 本文字数:2210 字

    阅读完需:约 7 分钟

使用 AWS System Manager Sessions Manager 的端口转发功能

我发现越来越多的客户采用不可变的基础设施架构模式:他们在每次更新时都重新构建和重新部署整个基础设施。他们很少通过 SSH 或 RDP 连接服务器来更新配置或部署软件更新。然而,在将现有应用程序迁移到云时,连接到 Amazon Elastic Compute Cloud (EC2) 实例来执行各种不同的管理或运营任务很常见。为减少攻击面,AWS 建议使用堡垒主机,也称为跳转主机。此特殊用途的 EC2 实例旨在作为互联网的主要接入点并用于您其他 EC2 实例的代理。要连接您的 EC2 实例,首先通过 SSH / RDP 连接到堡垒主机,然后从那里连接到目标 EC2 实例。


要进一步减少攻击面、管理堡垒主机的运营负担和产生的其他费用,AWS Systems Manager Session Manager 可让您安全连接到您的 EC2 实例,无需运行和操作您自己的堡垒主机,也无需在 EC2 实例上运行 SSH。当您在实例上安装了 Systems Manager 的代理且您拥有调用 Systems Manager API 的 IAM 权限时,您可以使用 AWS 管理控制台或 AWS 命令行界面 (CLI) 安全地连接您的 Linux 或 Windows EC2 实例。


EC2 实例上的交互式 Shell 不是唯一的 SSH 使用案例。很多客户还使用 SSH 隧道远程访问未公开到公共互联网的服务。SSH 隧道是 SSH 的一个强大但鲜为人知的功能,可使您在本地主机与远程服务之间创建安全隧道。想象一下,我在运行一个 Web 服务器,以便在 EC2 实例与我的笔记本电脑之间轻松进行私有文件传输。这些文件是私有文件,我不希望其他人访问该 Web 服务器,因此,我将 Web 服务器配置为仅绑定 127.0.0.1,且没有将端口 80 添加到实例的安全组中。只有本地进程才能访问 Web 服务器。为了从我的笔记本电脑访问 Web 服务器,我在笔记本电脑与 Web 服务器之间创建了 SSH 隧道,如下所示



此命令告知 SSH 以 ec2-user 用户的身份连接实例,在我的本地笔记本上打开端口 9999,并将那里的一切内容转发至实例上的 localhost:80。当建立隧道时,我可以将浏览器指向 http://localhost:9999,以通过端口 80 连接我的私有 Web 服务器。


今天,我们为 AWS Systems Manager Session Manager 发布了端口转发功能。端口转发功能可帮助您在私有子网中部署的实例间安全创建隧道,无需在服务器上启动 SSH 服务、在安全组中打开 SSH 端口或使用堡垒主机。


与 SSH 隧道相似的是,端口转发功能可使您在笔记本电脑与实例上的已打开端口间转发流量。配置好端口转发后,您便可以连接本地端口并访问在实例内运行的服务器应用程序。Systems Manager Session Manager 的端口转发使用通过关于 API 访问的 IAM 策略和端口转发 SSM 文档进行控制。您可以在两个不同的地方控制组织中的哪些人可以有权创建隧道。


要立即试用端口转发功能,您可以使用此 CDK 脚本部署具有私有和公共子网的 VPC 及在私有子网中运行 Web 服务器的单个实例。下图所示为我在此博文中使用的基础设施。



该实例为私有实例,没有公共 IP 地址和 DNS 名称。VPC 默认安全组未授权通过 SSH 的连接。Systems Manager 代理运行在您的 EC2 实例上,必须能够与 Systems Manager 的服务终端节点通信。因此,私有子网必须具有至 NAT 网关的路由表,或您必须配置 AWS Private Link 进行此操作。


我们来使用 Systems Manager Session Manager 端口转发功能访问在此私有实例上运行的 Web 服务器。


开始之前,您必须确保符合 EC2 实例上的以下先决条件:


  • 必须安装并运行 System Manager 代理(版本 2.3.672.0 或更新版本,请参阅 Linux 或 Windows 的说明)。此代理默认安装并在 Amazon 提供的 Amazon Linux 1 & 2、Windows 和 Ubuntu AMI 上启动(请参阅此页面了解确切版本),使用它们时,不需要任何操作。

  • EC2 实例必须具有 IAM 角色,该角色具有调用 Systems Manager API 的权限。在此示例中,我使用的是 AmazonSSMManagedInstanceCore。


您必须在笔记本电脑上:


  • 安装 System Manager CLI 扩展(版本 1.1.26.0 或更新版本)

  • 使用最新版的 AWS 命令行界面 (CLI)(1.16.220 或更新版本)

  • 符合先决条件后,您便可以使用 AWS 命令行界面 (CLI) 创建隧道(假设您使用 CDK 脚本启动实例来创建您的实例):


# find the instance ID based on Tag NameINSTANCE_ID=$(aws ec2 describe-instances \               --filter "Name=tag:Name,Values=CodeStack/NewsBlogInstance" \               --query "Reservations[].Instances[?State.Name == 'running'].InstanceId[]" \               --output text)# create the port forwarding tunnelaws ssm start-session --target $INSTANCE_ID \                       --document-name AWS-StartPortForwardingSession \                       --parameters '{"portNumber":["80"],"localPortNumber":["9999"]}'
Starting session with SessionId: sst-00xxx63Port 9999 opened for sessionId sst-00xxx63Connection accepted for session sst-00xxx63.
复制代码


现在,您可以将您的浏览器指向端口 9999 并访问您的私有 Web 服务器。键入 ctrl-c 以终止端口转发会话。



Session Manager 端口转发功能可创建类似于 SSH 隧道的隧道,如下所示。



端口转发功能适用于 Windows 和 Linux 实例。现在,它在每个公共 AWS 区域均可用,当连接 EC2 实例时,无需额外费用,将针对从 NAT 网关或您的 VPC Private Link 中发出的带宽向您收取费用。


本文转载自 AWS 博客。


原文链接 :


https://amazonaws-china.com/cn/blogs/china/new-port-forwarding-using-aws-system-manager-sessions-manager/


2019-09-18 15:07831
用户头像

发布了 1836 篇内容, 共 92.5 次阅读, 收获喜欢 73 次。

关注

评论

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

高效易用的C++单元测试框架:轻松构建高质量代码

万木春

c++ GitHub 单元测试

Mac哪款系统性能软件好用呢?Performance Index 64 Pro mac版推荐~

真大的脸盆

Mac Mac 软件 系统性能监测

易观千帆 | 2023年3月证券APP月活跃用户规模盘点

易观分析

证券 经济

《API加速优化方案:多级缓存设计》

后台技术汇

三周年连更

突破传统监测模式:业务状态监控HM的新思路

京东科技开发者

系统架构 监控系统 数据监控 业务监控 企业号 4 月 PK 榜

跨平台应用开发进阶(五十六):应用渲染异常问题分析及解决

No Silver Bullet

跨平台应用开发 三周年连更 问题分析及解决 渲染异常

大数据之Hadoop图解概述

袁袁袁袁满

三周年连更

DockerSwarm实践及原理

乌龟哥哥

三周年连更

C# 之 字符串前加@(逐字字符串标识符)

陈言必行

C# 三周年连更

Matlab实现遗传算法

Shine

三周年连更

如何优雅的处理异常

京东科技开发者

异常处理 java 抛出异常 企业号 4 月 PK 榜 throwale

复旦MOSS大模型开源了!Github和Hugging Face同时上线

Openlab_cosmoplat

人工智能 开源项目 ChatGPT

关于 SaaS 软件销售领域中的 Renewal 和 linearity

Jerry Wang

SaaS Cloud Studio 三周年连更

Python项目实战│ Python实现线程池工作模式

TiAmo

Python 线程池 三周年连更 工作模式

代码优雅之道——如何干掉过多的if else

小小怪下士

Java 程序员 后端 代码

执行个 DEL 竟然也会阻塞 Redis?深挖一下果然不简单

架构精进之路

redis 缓存 后端 bigkey 三周年连更

如何建设一个用于编译 iOS App 的 macOS 云服务器集群?

京东科技开发者

ios 编译 CI/CD 企业号 4 月 PK 榜 云服务集群

迪斯克Disrupt DEX众筹挖矿系统开发技术

薇電13242772558

dapp

一些常见的字符串匹配算法

京东科技开发者

字符串 字符串匹配算法 企业号 4 月 PK 榜 文本处理

你如何看待,“国内ChatGPT还没成熟,但ChatGPT的付费模式已经成熟了?”

小傅哥

人工智能 小傅哥 ChatGPT 人工智能ChatGPT 吗? ChatGPT4

【Linux】之Centos7安装KVM虚拟化及相关命令

A-刘晨阳

Linux 虚拟化 kvm 三周年连更

语雀-使用指南

六月的雨在InfoQ

在线文档 在线协同文档 三周年连更 语雀

Nginx常用配置及和基本功能讲解

京东科技开发者

nginx 负载均衡 正向代理与反向代理 企业号 4 月 PK 榜 Nginx入门

Retrofit 在 JSON 反序列化的时候提示 UnrecognizedPropertyException 异常

HoneyMoose

一种新的流:为 Java 加入生成器(Generator)特性

阿里巴巴云原生

Java 阿里云 云原生

Java如何获取@ApiModelProperty(value = “序列号“, name = “uuid“)注解中的value值name值?

bug菌

三周年连更 获取注解值

Prometheus实战-从0构建高可用监控平台(一)

小毛驴的烂笔头

Prometheus

用友BIP助力中国领先企业数智化国产替代

用友BIP

国产替代

算法题每日一练:最长递增子序列

知心宝贝

数据结构 算法 前端 后端 三周年连更

使用AI优化慢SQL,开发秒变DBA

NineData

sql AI 开发者 dba NineData

数字北京城,航行在联通2000M的“大运河”

脑极体

联通

使用 AWS System Manager Sessions Manager 的端口转发功能_软件工程_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章