PgAdmin访问私有子网中的AWS Postgres实例

hlo*_*rey 4 amazon-web-services amazon-rds

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

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

在此处输入图片说明

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

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

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

Joh*_*ein 6

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

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

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

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

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

在Windows中,可以使用SSH客户端完成此操作-例如,如果您使用的是PuTTY,则可以配置隧道。请参阅:如何在PuTTY上配置SSH隧道

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

ssh -i YOUR-KEYPAIR.pem -L 5555:RDS-ENDPOINT:5432 ec2-user@YOUR-BASTION-SERVER
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 对于那些使用 AWS CDK 的人来说,有一个可以构建堡垒的现成结构。https://docs.aws.amazon.com/cdk/api/latest/docs/aws-ec2-readme.html#bastion-hosts (3认同)