我正在尝试为多层Web应用程序创建一个实际的网络设置。我已经在AWS中用1个公共子网和2个私有子网创建了一个新的VPC。然后,我在私有子网中创建了一个Postgres实例,并将其设置为不可公开访问。这在数据库周围增加了一层额外的安全性,但是如何从本地IP访问数据库呢?

我创建了一个安全组,并在创建期间将我的IP分配给了入站规则,并将其分配给了数据库实例:

amazon-web-services - PgAdmin访问私有(private)子网中的AWS Postgres实例-LMLPHP

但是我仍然无法连接到它吗?我是否需要创建一个VPN并通过VPN连接到我的VPC,然后再连接到数据库实例?在建议的体系结构内,如何连接到数据库?

我要实现的架构是允许我创建Lambda函数,这些函数通过API网关与DB进行通信并将数据提供给Web前端。因此,我希望通过私有子网保护数据库。但是我也希望能够从本地笔记本电脑直接连接到数据库。

目前-RDS实例正在VPC中运行,但是我不知道如何连接到它。我需要设置一个Internet网关/ VPN / EC2实例并跳转到数据库吗?

最佳答案

通过将Amazon RDS数据库放置在专用子网中,您已经实现了出色的安全性。这意味着无法从Internet访问它,从而阻止了大多数潜在的安全威胁。

但是,这也意味着您无法从Internet连接到它。

实现目标的最常见方法是在公共子网中启动Amazon EC2实例,并将其用作堡垒或跳箱:


您通过SSH进入堡垒
然后,堡垒可以将您连接到VPC内的其他资源


由于您只希望连接到数据库(而不是登录到另一台服务器),因此最好的方法是将SSH与端口转发一起使用。

在Windows中,可以使用SSH客户端完成此操作-例如,如果您使用的是PuTTY,则可以配置隧道。参见:How to Configure an SSH Tunnel on PuTTY

对于Mac / Linux,请使用以下命令:

ssh -i YOUR-KEYPAIR.pem -L 5555:RDS-ENDPOINT:5432 ec2-user@YOUR-BASTION-SERVER


然后,将便携式计算机上的SQL客户端指向:localhost:5555


5555可以是您希望的任何数字。它只是您自己计算机上的“本地端口”,将用于将流量转发到远程计算机。
RDS-ENDPOINT是RDS控制台中提供的RDS数据库的端点。它将类似于:db.cnrffgvaxtw8.us-west-2.rds.amazonaws.com
BASTION-SERVER是将用于连接的跳转框的IP地址或DNS名称


然后,从SQL客户端发送到localhost:5555的所有流量都将通过SSH连接自动发送到堡垒/跳箱,然后堡垒/跳箱将其转发到RDS数据库上的端口5432。流量将通过SSH连接进行加密,并且连接的建立需要SSH密钥对。

关于amazon-web-services - PgAdmin访问私有(private)子网中的AWS Postgres实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47374565/

10-13 00:01