如何通过 AWS Systems Manager 使用 SSH 隧道来访问我的私有 VPC 资源?
我想通过 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。
先决条件
安装 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.1 和 localport 转换为访问 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-pair 和 username 用于您通过隧道传输到的实例(在本示例中为 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 访问。
相关信息
相关内容
- 已提问 2 个月前lg...
- 已提问 3 个月前lg...
- 已提问 4 个月前lg...
- 已提问 4 个月前lg...
- 已提问 3 个月前lg...
- AWS 官方已更新 3 个月前
- AWS 官方已更新 5 个月前