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

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

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

答案1

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

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

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

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

顺便说一句,您可以通过指定 Bastion Host 的私有 IP 地址或列出 Bastion Host 使用的安全组名称来实现“仅从 Bastion Host”。

现在你有两个选择:

选项 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>

假设你从基于 Ubuntu 的 Bastion Host 连接到 Postgres。它可能看起来像这样:

ssh -l ubuntu -L 5432:<rds-private-ip>:5432 <bastion-host-public-ip>

您的本地计算机现在正在侦听端口5432,并将转发任何​​这些连接,<bastion-host-public-ip>进而将其转发5432<rds-private-ip>

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

我知道 DBVisualizer 支持此功能。但我不确定 Squirrel 是否支持。基本上,您的 SQL 客户端会为您处理此问题,而不是使用 SSH 手动设置本地端口转发。

答案2

这对我来说很有效。确保你有psql 客户端本地安装。

psql --host=myAwsDbEndpointUrl.ciqykqusf0nv.us-west-1.rds.amazonaws.com --port=5432 --username=myUserName --password --dbname=myDbName

在 aws 上创建数据库实例时,请确保定义以下内容:

  1. 用户名
  2. 密码
  3. 数据库名称
  4. 端口号

我还必须为数据库所在的 VPC 创建一个安全组。创建后,请确保您的数据库实例将其用作其安全组。安全组具有以下规则:

inbound--> type:PostgreSQL, protocol:TCP port range:5432, source:0.0.0.0/0

outbound--> type:All Traffic, protocol:All, port range:all, destination:0.0.0.0/0

相关内容