我正在尝试为多层Web应用程序创建真实的网络设置。我在AWS中创建了一个新的VPC,带有1个公有子网和1个子网。 2个私有子网。然后,我在私有子网内创建了一个Postgres实例,并将其设置为不可公开访问。这为数据库增加了额外的安全层,但是如何从本地IP访问数据库呢?
我创建了一个安全组&将我的IP分配给入站规则&在创建期间将其分配给数据库实例:
但我仍无法连接它?我是否需要创建VPN并通过VPN连接到我的VPC,然后连接到数据库实例?在建议的架构中,您如何连接到DB?
我想要实现的是一种体系结构,它允许我创建Lambda函数,这些函数通过API网关与数据库通信,并将数据提供给Web前端。所以我希望通过私有子网保护数据库。但我也希望能够从我当地的笔记本电脑直接连接到数据库。
目前 - RDS实例正在VPC中运行,但我不知道如何连接它。我需要设置一个Internet Gateway / VPN / EC2实例并跳转到DB吗?
答案 0 :(得分:4)
您已将Amazon RDS数据库置于私有子网中,从而实现了出色的安全性。这意味着无法从互联网访问它,这可以阻止大多数潜在的安全威胁。
但是,这也意味着你无法从互联网连接到它。
实现目标的最常用方法是在公有子网中启动Amazon EC2实例并将其用作堡垒或跳转框:
由于您只想连接到数据库(而不是登录到另一台服务器),最好的方法是将SSH与端口转发一起使用。
在Windows中,可以使用SSH客户端完成此操作 - 例如,如果您使用的是PuTTY,则可以配置隧道。请参阅:How to Configure an SSH Tunnel on PuTTY
对于Mac / Linux,请使用以下命令:
dayornight
然后,将笔记本电脑上的SQL客户端指向:ssh -i YOUR-KEYPAIR.pem -L 5555:RDS-ENDPOINT:5432 ec2-user@YOUR-BASTION-SERVER
localhost:5555
可以是您想要的任何数字。它只是您自己计算机上的“本地端口”,用于将流量转发到远程计算机。5555
是RDS控制台中提供的RDS数据库的端点。它类似于: db.cnrffgvaxtw8.us-west-2.rds.amazonaws.com RDS-ENDPOINT
是您将用于连接的跳转框的IP地址或DNS名称然后,从SQL客户端发送到BASTION-SERVER
的任何流量都将通过SSH连接自动发送到Bastion / Jump Box,然后将其转发到RDS数据库上的端口5432。流量将通过SSH连接进行加密,建立连接需要SSH密钥对。