我在私有子网中有 AWS Postgres 实例,但没有任何 ***,如何通过本地访问它?

Posted

技术标签:

【中文标题】我在私有子网中有 AWS Postgres 实例,但没有任何 ***,如何通过本地访问它?【英文标题】:I have AWS Postgres instance in private subnet and I don't have any ***, How Can I access it through Local? 【发布时间】:2020-06-21 04:53:38 【问题描述】:

我在私有子网下有一个 Postgres 实例,我没有配置 *** 来连接,即使我的堡垒(跳转节点)不允许这样做。 有什么方法可以通过我的本地机器将它连接到测试开发?

默认端口是 5432。 我可以通过 Bastion 节点对我的应用程序服务器进行 ssh 访问。

【问题讨论】:

【参考方案1】:

因为您可以通过 Bastion 对应用服务器进行 ssh 访问。 然后您可以创建两级 ssh 隧道代理。由于即使 Bastion 节点也不允许 Postgres,只允许通过应用程序服务器。

1:创建从应用服务器到堡垒节点的隧道。

ssh-add ~/.ssh/id_rsa ;ssh -oStrictHostKeyChecking=no -Att -l USER_NAME BASTION IP ssh -oStrictHostKeyChecking=no -Att -l USER_NAME APP_SERVER_IP -L 5432:AWS_POSTGRESS_END_POINT:5432

(保持打开这个终端)

2:创建另一个从 Bastion 到本地计算机的隧道: (打开新终端)

ssh-add ~/.ssh/id_rsa ;ssh -oStrictHostKeyChecking=no -Att -l USER_NAME BASTION_IP -L 5432:localhost:5432 (保持打开这个终端)

3:在连接字符串中使用 localhost 或 127.0.0.1 和 5432 端口(从本地计算机连接)而不是 Postgress 端点。

注意:用粗体突出显示的文本替换正确的 ssh 密钥路径和您的用户名。并保持打开两个终端以保持会话。

【讨论】:

【参考方案2】:

端口转发是一个过程,您可以在其中建立从您的计算机(在 Internet 上)到堡垒服务器的连接,然后将流量转发到数据库。

ssh -i key.pem ec2-user@BATION-IP -L 5432:DATABASE-DNS-NAME:5432

然后,在您的 SQL 客户端中,通过以下方式连接到数据库:

localhost:5432

当 SQL 客户端访问本地计算机上的 5432 端口时,SSH 连接会将流量转发到堡垒服务器,然后将其发送到:DATABASE-DNS-NAME:5432

(您实际上可以在本地使用任何端口号。例如,您可以创建到不同数据库的多个转发连接,每个连接在不同的端口上。)

【讨论】:

以上是关于我在私有子网中有 AWS Postgres 实例,但没有任何 ***,如何通过本地访问它?的主要内容,如果未能解决你的问题,请参考以下文章

如何在私有子网上托管的 aws ec2 实例中安装 Nginx

在没有公有子网的私有子网中运行 Amazon ElasticBeanstalk 实例

AWS 如何从私有子网中的 EC2 实例打开网站

AWS攻略——使用Public NAT解决私有子网实例访问互联网

AWS 中的 cloudformation 最佳实践

AWS Lambda NodeJS 连接到 RDS Postgres 数据库