我是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地址,或列出堡垒主机使用的安全组名称来实现“仅从堡垒主机”。
现在你有两个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数据库实例时,确保定义如下:
我还必须为数据库所在的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