如何使用 SQL 客户端连接到 AWS RDS 数据库(部署在 VPC 中)?

mat*_*the 7 amazon-web-services rds

我是 AWS 的新手,正在尝试设置和初始化 RDS 实例。由于我有一个新创建的帐户,它不支持 EC2-Classic,这(据我所知)意味着我的 RDS 实例必须部署到 VPC 中的私有子网中。但是,一旦创建了 RDS 实例,我如何从外部世界连接到它?我知道我可以从 VPC 中的公共子网连接到它,因此我的应用程序服务器将能够毫无问题地使用数据库。但是,我希望能够说,启动 Squirrel 或其他一些 GUI 客户端以初始化架构,或者随着我的应用程序的增长添加列和表。如果需要位于私有子网中,我该怎么做?

小智 11

一种解决方案(但不是唯一的解决方案!)是使用所谓的堡垒主机。堡垒主机是位于公共子网中的超低功耗服务器,是唯一允许入站 SSH 连接的服务器。

该服务器应该彻底加固,并且根据您的偏执程度,您可以使用一些技术来隐藏该服务器正在侦听 SSH 连接这一事实。例如,参见http://www.portknocking.org/view/details。当然,您不需要仅仅为了连接到您的 RDS 实例而对其进行加固。

无论如何,您可以按如下方式设置您的 EC2 安全组规则:

  • 堡垒主机安全组仅允许来自您本地 IP 的端口 22(因此您可以通过 SSH 访问它,但其他人不能)
  • RDS 安全组仅允许来自堡垒主机的端口 X(取决于您的数据库)上的传入数据库连接

顺便说一下,您可以通过指定堡垒主机的私有 IP 地址或列出堡垒主机使用的安全组名称来实现“仅来自堡垒主机”。

现在您有两个选择:

选项 #1:设置本地端口转发作为 SSH 连接的一部分

例如,如果您使用的是 OS X 或 Linux,请通过 SSH 连接到堡垒主机并使用以下命令设置本地端口转发:

ssh -l <bastion-host-username> -L <local-port-you-connect-to>:<rds-private-ip>:<rds:listening-port> <bastion-host-public-ip>
Run Code Online (Sandbox Code Playgroud)

假设您从基于 Ubuntu 的堡垒主机连接到 Postgres。它可能看起来像这样:

ssh -l ubuntu -L 5432:<rds-private-ip>:5432 <bastion-host-public-ip>
Run Code Online (Sandbox Code Playgroud)

现在你的本地计算机正在侦听端口5432,并转发任何那些连接<bastion-host-public-ip>这反过来将其转发到端口5432<rds-private-ip>

选项 #2:在您的数据库客户端中查找此功能

我知道 DBVisualizer 支持这一点。我不确定松鼠。基本上,不是使用 SSH 手动设置本地端口转发,而是由您的 SQL 客户端为您处理。