如何将 Amazon EC2 实例用作堡垒机主机从本地计算机连接到私有 Amazon RDS 数据库实例?

3 分钟阅读
0

我想使用 Amazon Elastic Compute Cloud(Amazon EC2)实例作为堡垒机(跳转)主机。然后,我想使用该实例从本地计算机连接到私有 Amazon Relational Database Service(Amazon RDS)数据库实例。

简短描述

要使用 Amazon EC2 实例作为跳转服务器,从本地计算机连接到私有 Amazon RDS 数据库实例,请遵循以下步骤:

1.    启动并配置您的 EC2 实例,然后配置该实例的网络设置。

2.    配置 RDS 数据库实例的安全组。

3.    从本地计算机连接到 RDS 数据库实例。

**重要提示:**要连接到私有 Amazon RDS 或 Amazon Aurora 数据库实例,最佳实践是使用 VPNAWS Direct Connect。如果您不能使用这些选项,请使用堡垒机主机。以下示例配置使用安全组来限制访问。但是,您可以限制子网的网络访问控制列表(网络 ACL),以提高连接安全性。您还可以限制互联网网关的路由范围,以使用更小的范围而不是 0.0.0.0/0。例如,当您添加互联网网关时,只能在目的地的路由表中添加所需的 CIDR 范围。有关更多信息,请参阅示例路由选项

解决方法

以下示例配置适用于 Amazon Virtual Private Cloud(Amazon VPC)中的 Amazon RDS for MySQL 实例。该实例具有针对 EC2 实例设置的安全组。

启动和配置 EC2 实例

1.    打开 Amazon EC2 控制台,然后选择 Launch instance(启动实例)。

2.    选择一个亚马逊云机器镜像(AMI)。

3.    选择实例类型,然后选择 Next: Configure Instance Details(下一步:配置实例详细信息)。

4.    对于 Network(网络),选择 RDS 数据库实例使用的 VPC。

5.    对于 Subnet(子网),选择在其路由表中拥有互联网网关的子网。如果您还没有互联网网关,您可以在创建 EC2 实例后将它添加到子网中。

6.    对于 Auto-assign public IP(自动分配公有 IP),请确保选择 Enable(启用)。

7.    选择 Next: Add Storage(下一步:添加存储),然后根据需要修改存储。

8.    选择 Next: Add Tags(下一步:添加标签),然后根据需要添加标签。

9.    选择 Next: Configure Security Group(下一步:配置安全组),选择 Add Rule(添加规则),然后输入以下内容: **Type(类型):**输入 Custom TCP Rule(自定义 TCP 规则)。 **Protocol(协议):**输入 TCP。 **Port Range(端口范围):**输入 22。 **Source(源):**输入本地计算机的 IP 地址。默认情况下,源 IP 地址对所有人开放,但您可以限制仅您的本地公有 IP 地址可以访问。

10.    选择 Review and Launch(查看并启动)。

11.    选择 Launch(启动)。

配置 RDS 数据库实例的安全组

注意:要自动将一个或多个 EC2 实例连接到 RDS 数据库,请参阅自动将 EC2 实例连接到 RDS 数据库

1.    打开 Amazon RDS 控制台,然后从导航窗格中选择 Databases(数据库)。

2.    选择 RDS 数据库实例的名称。或者,如果您还没有实例,创建一个 RDS 数据库实例

3.    选择 Connectivity & security(连接与安全性)选项卡。

4.    从 Security(安全性)部分中,选择 VPC security groups(VPC 安全组)下的链接。

5.    选择安全组,选择 Actions(操作),然后选择 Edit inbound rules(编辑入站规则)。

6.    选择 Add rule(添加规则),然后输入以下内容: **Type(类型):**输入 Custom TCP Rule(自定义 TCP 规则)。 **Protocol(协议):**输入 TCP。 **Port Range(端口范围):**输入 RDS 数据库实例的端口。 **Source(源):**输入 EC2 实例的私有 IP 地址。

7.    选择 Save(保存)。

安全组的此配置允许来自 EC2 实例私有 IP 地址的流量。如果 EC2 实例和 RDS 数据库实例使用相同的 VPC,则您不需要修改 RDS 数据库实例的路由表。如果 VPC 不同,则创建 VPC 对等连接,以允许这些 VPC 之间的连接。

注意:如果您使用更具可扩展性的解决方案,请务必小心。例如,如果您在安全组规则中使用安全组 ID,请确保它不会限制对单个实例的访问。相反,配置规则以限制访问使用特定安全组 ID 的任何资源。

从本地计算机连接到 RDS 数据库实例

连接 RDS 数据库实例的步骤可能因您使用的客户端而不同。有关更多信息,请参阅连接到 Amazon RDS 数据库实例。如果您使用 MySQL,最佳做法是使用 SSL 加密客户端应用程序与 Amazon RDS 之间的连接。

以下示例使用 MySQL Workbench 客户端连接到堡垒机主机:

1.    启动新连接,然后选择 Standard TCP/IP over SSH(通过 SSH 的标准 TCP/IP)作为 Connection Method(连接方式)。

2.    对于 SSH 设置,输入有关 EC2 实例的以下详细信息: **Auto-assign Public IP(自动分配公有 IP):**确保在 DNS Hostnames(DNS 主机名)选项中选择 Enable(启用)。 **SSH Hostname(SSH 主机名):**输入 EC2 实例的公有 DNS 名称或其公有 IP 地址。 **SSH Username(SSH 用户名):**输入 EC2 实例的用户名称。例如,ec2-user 是 EC2 Linux 计算机的用户名称。 **SSH Key File(SSH 密钥文件):**选择在创建 EC2 实例时使用的私有密钥。 **注意:**如果创建某个 EC2 实例时所在的 VPC 已激活 DNS Hostnames(DNS 主机名),则使用公有 IP 地址启动的 EC2 实例中具有公有 DNS。

3.    输入有关 MySQL 实例设置的以下详细信息: **MySQL Hostname(MySQL 主机名):**输入 RDS 数据库实例端点。 **MySQL Server port(MySQL Server 端口):**输入 3306。或者,如果您使用自定义端口,则输入自定义端口号。 **Username(用户名):**输入 RDS 数据库实例的用户名称。 **Password(密码):**输入 RDS 数据库实例的密码。

4.    选择 Test Connection(测试连接)。

5.    连接成功后,输入连接名称,然后保存连接。

要使用 SSH 隧道从本地 MySQL 客户端连接到私有 RDS 实例,请参阅以下命令。

Linux or macOS(Linux 或 macOS):

1.    运行以下命令配置 SSH 隧道:

ssh -i "YOUR_EC2_KEY" -L LOCAL_PORT:RDS_ENDPOINT:REMOTE_PORT EC2_USER@EC2_HOST -N -f

**注意:**使用您的相关信息替换 YOUR_EC2_KEYLOCAL_PORTRDS_ENDPOINTREMOTE_PORTEC2_USEREC2_HOST

在前面的命令中填写自定义字段后,命令将看起来与以下示例类似:

ssh -i "ec2Key.pem" -L 3336:rdsinstance.xxx.xxx.rds.amazonaws.com:3306 ec2-user@ec2-34-244-136-223.xxxcompute.amazonaws.com -N -f

2.    运行以下命令测试并确认隧道正在侦听本地端口:

lsof -i4 -P | grep -i "listen" | grep LOCAL_PORT
nc -zv 127.0.0.1 LOCAL_PORT

注意:使用您的本地端口号替换 LOCAL_PORT

3.    如果您的隧道正成功侦听您的本地端口,您将看到的输出与以下内容类似:

lsof -i4 -P | grep -i "listen" | grep 3336
ssh       17692 user    8u  IPv4 0x3bc46bcfeffce12f      0t0  TCP localhost:3336 (LISTEN)

nc -zv 127.0.0.1 3336
Connection to 127.0.0.1 port 3336 [tcp/directv-tick] succeeded!

4.    运行以下命令,使用您的 EC2 实例作为堡垒机主机从本地计算机连接到您的 RDS 实例:

mysql -h 127.0.0.1 -P LOCAL_PORT -u RDS_USER -p

注意:使用您的本地端口号替换 LOCAL_PORT,使用您的 RDS 数据库用户名称替换 DB_USER


相关信息

如何解决在连接到 Amazon RDS 数据库实例时出现的问题?

相关视频

AWS 官方
AWS 官方已更新 1 年前