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

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

一个解决scheme(但不是唯一的解决scheme!)是使用所谓的堡垒主机。 堡垒主机是一个超低功率的服务器,位于您的公有子网,是唯一允许入站SSH连接的服务器。

这个服务器应该彻底强化,根据你的偏执级别,你可以使用一些技巧来隐藏这个服务器正在侦听SSH连接的事实。 参见例如http://www.portknocking.org/view/details 。 当然,你不需要加强它只是连接到你的RDS实例。

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

  • 堡垒主机安全组只允许您的本地IP端口22(所以你可以SSH进入,但没有其他人可以)
  • RDS安全组只允许来自堡垒主机的端口X上的传入数据库连接(取决于您的数据库)

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

现在你有两个select:

选项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> ,然后它将转发到<rds-private-ip>

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

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

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

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

在aws上创build数据库实例时,确保定义如下:

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

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

 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