我在私有子网中有 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 实例