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

3 分钟阅读
0

我想通过 AWS Systems Manager 使用 SSH 隧道来访问我的私有 Amazon Virtual Private Cloud(Amazon VPC)资源。

简短描述

SSH 隧道(SSH 端口转发)是一种通过加密的 SSH 连接传输数据的方法。SSH 隧道让您可以通过安全通道将与本地端口建立的连接转发到远程计算机。要创建 SSH 隧道,请使用会话管理器。会话管理器是 AWS Systems Manager 的一项功能,它允许您为远程主机配置端口转发。SSM Agent 版本 3.1.1374.0 及更高版本支持此功能。端口转发是以下步骤的替代方法。有关详细信息,请参阅启动会话(端口转发到远程主机)

会话管理器通过 Systems Manager 基础设施使用类似于 SSH 的实例创建会话。会话管理器对真正的 SSH 连接进行隧道化,并允许您直接从本地计算机通过隧道连接到 Amazon VPC 中的其他资源。您创建的一个托管实例充当您的 AWS 资源的堡垒主机或网关。

此配置的好处有以下几点:

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

**注意:**有关如何使用终端或单端口转发访问 EC2 实例的说明,请参阅设置会话管理器

先决条件

必须满足以下先决条件:

**注意:**必须安装以下软件才能使用 SSH 功能:

  • SSM Agent v2.3.672.0 或更高版本
  • 在本地计算机上安装会话管理器插件 v1.1.23 或更高版本
  • 在本地计算机上安装 AWS CLI v1.16.12 或更高版本

解决方法

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

要使用会话管理器启动 SSH 隧道,请完成以下步骤:

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

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

2.    运行以下命令来测试对您在目标端口上创建的隧道的访问:

telnet 127.0.0.1 localport

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

配置示例: 使用 SSM 主机作为堡垒主机,创建一个从本地计算机到 MySQL 数据库的隧道

在本地计算机上创建一个隧道访问 MySQL 数据库。该数据库必须在 EC2 实例上运行并使用 SSM 主机作为堡垒主机。

使用的资源

实例 1: 充当堡垒主机并由 AWS Systems Manager 管理的 EC2 实例
主机名 = ec2-198-51-100-1.compute-1.amazonaws.com,实例 ID = i-0123456789abcdefa

实例 2: 在默认端口 3306 上运行 MySQL 数据库的 EC2 实例
主机名 = ec2-198-51-100-2.compute-1.amazonaws.com

1.    在本地计算机(例如,您的笔记本电脑)上,运行以下 SSH 命令连接到实例 1。此命令使用基于会话管理器的 SSH 并建立一个通往实例 2 上端口 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

注意:实例 2 必须允许来自实例 1 的流量。这包括实例 2 上存在的所有安全组网络访问控制列表(网络 ACL)、安全规则和第三方安全软件。在前面的示例中,实例 2 必须允许从实例 1 访问端口 3306。

配置示例: 通过单个 SSH 连接创建隧道以访问 MySQL 数据库和 Web 服务器实例

在本地计算机上,通过单个 SSH 连接创建三条隧道到:

  • 连接到实例 1 的 SSH 端口
  • 访问 RDS 实例中的 MySQL 数据库
  • 访问实例 3 中的网络服务器

使用的资源

实例 1: 充当堡垒主机并由 AWS Systems Manager 管理的 EC2 实例
主机名 = ec2-198-51-100-1.compute-1.amazonaws.com,实例 ID = i-0123456789abcdefa

RDS 实例: 位于私有子网中的 MySQL RDS 实例
主机名 = DBinstanceidentifier.abcdefg12345.region.rds.amazonaws.com

实例 3: 位于私有子网中的 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.    访问从本地计算机到实例 1 的 SSH。本地端口 8080 通过隧道连接到实例 1 上的 SSH 端口 (22)。密钥对用户名适用于您要通过隧道连接到的实例(在本示例中为实例 1)。

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

3.    访问 RDS 实例上的数据库。本地端口 9090 通过隧道连接到 RDS 实例上的端口 3306。使用 MySQL 工作台中的 GUI 访问数据库服务器,hostname 为 127.0.0.1,port 为 9090。或者,在 shell 命令提示符下运行以下命令:

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

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

http://127.0.0.1:9091

重要事项:****RDS 实例实例 3 上存在的任何安全组网络 ACL、安全规则或第三方安全软件都必须允许来自实例 1 的流量。在前面的示例中,实例 3 必须允许从实例 1 访问端口 80。

相关信息

在没有互联网网关的情况下自动配置会话管理器

session-manager-without-igw(在 GitHub 网站上)

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

如何创建 VPC 端点,以便我可以在没有互联网访问权限的情况下使用 Systems Manager 管理私有 EC2 实例?

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