如何通过 AWS Systems Manager 使用 SSH 隧道来访问我的私有 VPC 资源?

3 分钟阅读
0

我想通过 AWS Systems Manager 使用 SSH 隧道来访问我的私有 VPC 资源。该如何操作?

简短描述

要创建 SSH 隧道,可以使用 Session Manager(会话管理器),这是 AWS Systems Manager 的一项功能,允许您对远程主机使用端口转发。SSM Agent 版本 3.1.1374.0 及更高版本支持此功能。端口转发是以下步骤的替代方法。有关远程主机端口转发的更多信息,请参阅 Start a session(启动会话)。

Session Manager 使用 Systems Manager 基础架构创建具有实例的类似于 SSH 的会话。Session Manager 可通过隧道传输真正的 SSH 连接,从而使您可以直接从本地计算机中通过隧道传输到虚拟私有云(VPC)内的另一个资源。您创建的托管实例将充当您的 AWS 资源的堡垒主机或网关。

这种配置的优势包括:

  • **提高安全性:**这种配置仅可使用一个 Amazon Elastic Compute Cloud (Amazon EC2) 实例(堡垒主机),并将出站端口 443 与 Systems Manager 基础设施连接。这样一来,您无需任何入站连接便可以使用 Session Manager。本地资源必须仅允许来自充当堡垒机主机的实例的入站流量。因此,无需公开打开任何入站规则。
  • **简便易用:**您可以直接从您的本地计算机访问私有 VPC 中的资源。

**注意:**有关使用 Systems Manager 通过终端或一个端口转发访问 EC2 实例的说明,请参阅设置 Systems Manager

先决条件

完成 Session Manager 先决条件

安装 AWS 命令行界面(AWS CLI)的 Session Manage 插件

允许通过 Session Manager 进行 SSH 连接,并确保满足 SSH 连接要求

**注意:**您必须安装以下各项才能使用 SSH 功能:

1.    SSM Agent v2.3.672.0 或更新版本。

2.    在本地计算机上安装 Session Manager 插件 1.1.23 版或更新版本。

3.    在本地计算机上安装 AWS CLI v1.16.12 或更高版本

解决方法

要使用 Session Manager 启动 SSH 隧道,请执行以下步骤:

**注意:**如果在运行 AWS CLI 命令时收到错误信息,请确保您使用的是最新版本的 AWS CLI

1.    要启动 SSH 隧道,请运行以下命令:

ssh -i /path/my-key-pair.pem username@instance-id -L localport:targethost:destport

2.    要在第 1 步中创建的目标端口上测试对隧道的访问,请运行以下命令:

telnet 127.0.0.1 localport

在前面的示例中,127.0.0.1localport 转换为访问 targethost:destport

示例配置

场景 1

使用 SSM 主机用作堡垒主机,从您的本地计算机创建一个隧道,以访问 EC2 实例上运行的 MySQL 数据库。

使用的资源

instance1:用作堡垒主机并由 AWS Systems Manager 托管的 EC2 实例。

    主机名 = ec2-198-51-100-1.compute-1.amazonaws.com Instance id = i-0123456789abcdefa

instance2:在默认端口 3306 上运行 MySQL 数据库的 EC2 实例。

    主机名 = ec2-198-51-100-2.compute-1.amazonaws.com

说明

1.    从本地计算机(例如您的笔记本电脑)运行 SSH 命令以使用基于 Session Manager 的 SSH 连接 instance1。此命令在 instance2 上建立至端口 3306 的隧道,并在您本地计算机的端口 9090 上显示该隧道。

ssh -i /path/key-pair_instance1.pem username_of_instance1@i-0123456789abcdefa -L 9090:ec2-198-51-100-2.compute-1.amazonaws.com:3306

**注意:**在前述示例中,端口 9090 在本地计算机上可用。

2.    从本地计算机中,使用步骤 1 中所用的可用端口(在此示例中为 9090)访问数据库。

mysql -u user -h 127.0.0.1 -P 9090 -p password

**注意:**instance2 上的所有安全组网络访问控制列表(网络 ACL)、安全规则或第三方安全软件都必须允许来自 instance1 的流量。在前述示例中,instance2 必须允许来自 instance1 的端口 3306 访问。

场景 2

通过从您的本地计算机进行的单个 SSH 连接创建三个隧道:

  • 连接到 instance1 中的 SSH 端口
  • 访问 RDS 实例中的 MySQL 数据库
  • 访问 instance3 中的 Web 服务器

使用的资源

instance1:用作堡垒主机并由 AWS Systems Manager 托管的 EC2 实例。

    主机名 = ec2-198-51-100-1.compute-1.amazonaws.com Instance id = i-0123456789abcdefa

RDS 实例:位于私有子网中的 MySQL RDS 实例。

    主机名 = DBinstanceidentifier.abcdefg12345.region.rds.amazonaws.com

instance3:位于私有子网中的 EC2 实例

    主机名 = ec2-198-51-100-3.compute-3.amazonaws.com

说明

1.    使用 SSH 命令启动三个隧道的会话。

**注意:**命令中有三个单独的隧道调用。

ssh -i /path/key-pair_instance1.pem username_of_instance1@i-0123456789abcdefa -L 8080:ec2-198-51-100-1.compute-1.amazonaws.com:22 -L 9090:DBinstanceidentifier.abcdefg12345.region.rds.amazonaws.com:3306 -L 9091:ec2-198-51-100-3.compute-1.amazonaws.com:80

注意:在前述示例中,端口 8080、9090 和 9091 在本地计算机上可用。

2.    访问从本地计算机到 instance1 的 SSH。本地端口 8080 通过隧道传输到 instance1 上的 SSH 端口 (22)。key-pairusername 用于您通过隧道传输到的实例(在本示例中为 instance1)。

ssh -i /path/key-pair_instance1.pem username_of_instance1@127.0.0.1 -p 8080

3.    访问 RDS 实例上的数据库。本地端口 9090 通过隧道传输到 RDS 实例上的端口 3306。您可以使用 MySQL Workbench,它允许您使用 GUI 访问数据库服务器,127.0.0.1 为主机名,9090 为端口。或者,在 shell 命令提示符下运行以下命令:

mysql -u user -h 127.0.0.1 -P 9090 -p password

4.    要从本地计算机访问 instance3 上的网站,请打开浏览器并导航到网站。

http://127.0.0.1:9091

重要提示:****RDS 实例instance3 上的所有安全组网络 ACL、安全规则或第三方安全软件都必须允许来自 instance1 的流量。在前述示例中,instance3 必须允许来自 instance1 的端口 80 访问。


相关信息

无需互联网网关即可自动配置 Session Manager

session-manager-without-igw

使用您首选的 GUI 安全地远程连接到 Amazon RDS 或 Amazon EC2 数据库实例

相关视频

AWS 官方
AWS 官方已更新 6 个月前