如何连接到 EC2 上运行的 postgresql 服务器

问题描述 投票:0回答:3

我有一个在普通 AWS Linux EC2 实例上运行的服务。后端是 postgresql,默认情况下不暴露于外部世界。该实例通过 HTTPS 公开,仅用于前端服务的 Web 访问。

我想时不时地使用客户端远程连接到该数据库以进行调试和维护。打开的步骤是什么?

我想也许可以执行以下步骤?

  1. 更改数据库服务的配置以允许其接受来自外部世界的连接?
  2. 更改 EC2 防火墙规则以允许外部连接到数据库服务端口(什么端口)?

谢谢

我没有尝试过任何东西,因为我搜索但找不到任何教程。

postgresql amazon-web-services
3个回答
3
投票

最安全的选择是让您的 Postgres 数据库无法通过互联网访问

要连接到它,请使用 SSH 端口转发 将您的本地计算机连接到 EC2 实例。

您可以使用以下方式连接到实例:

ssh -i key.pem -L 5000:localhost:5432 ec2-user@IP-ADDRESS

这会将本地端口 5000(您可以选择任何数字)重定向到 EC2 实例,并从该实例连接到

localhost:5432
,这是运行 Postgres 数据库的地方。

您的本地 SQL 客户端可以通过

localhost:5000
连接到它,这将通过隧道转发流量。流量“看起来”来自 EC2 实例本身,因此您的数据库应该接受该流量。


0
投票

根据您的回复,您需要做两件事

  1. 首先确保您的防火墙已打开,以便您可以从笔记本电脑访问 Postgres 服务(默认端口 5432)。

  2. Postgres 服务内部有一个额外的防火墙。如果您可以从 EC2 实例内连接到它,“show hba_file”将告诉您该文件位置(在我的情况下,它是默认位置)。请参阅 doc 了解其作用

    hba_文件


    /var/lib/postgresql/data/pg_hba.conf


0
投票

在 PostgreSQL 16 上测试

要连接到在 EC2 实例上运行的 PostgreSQL 服务器,请按照以下步骤操作:

1. 配置 PostgreSQL

  • 编辑

    postgresql.conf

    • 打开配置文件:
      sudo nano /etc/postgresql/{version}/main/postgresql.conf
      
    • 设置
      listen_addresses
      以允许外部连接:
      listen_addresses = '*'
      
    • 保存并退出文件。
  • 编辑

    pg_hba.conf

    • 打开访问控制文件:
      sudo nano /etc/postgresql/{version}/main/pg_hba.conf
      
    • 添加一行以允许来自您的远程 IP 的连接(将
      your_ip
      替换为您的实际 IP):
      host    all             all             your_ip/32         md5
      
    • 保存并退出文件。
  • 重新启动 PostgreSQL:

    sudo systemctl restart postgresql
    

2. 配置安全组

  • 转到 AWS 管理控制台中的 EC2 仪表板
  • 找到您的 EC2 实例并检查其安全组。
  • 编辑入站规则
    • 添加规则以允许端口
      5432
      上的流量 (PostgreSQL):
      • 类型:PostgreSQL
      • 协议:TCP
      • 端口范围:5432
      • 来源:您的远程 IP(例如,
        your_ip/32
        )。
规则类型 协议 端口范围 来源 描述
入境 TCP 5432 你的_ip/32 允许从您的 IP 访问 PostgreSQL
入境 TCP 5432 0.0.0.0/0 允许从任何IP访问PostgreSQL

备注:

  • 如果您想限制对特定 IP 的访问,请使用第一个选项。
  • 如果需要允许来自任何 IP 的访问,请使用第二个选项(不建议用于生产环境)。

3. 连接到 PostgreSQL

在远程计算机上,使用以下命令:

psql -h ec2-your-instance-ip -U your_username -d your_database

4. 使用 SSH 隧道(替代选项)

如果您希望安全连接而不暴露数据库,可以使用 SSH 隧道:

  1. 建立 SSH 隧道: 打开终端并运行以下命令,替换占位符:

    ssh -i your-key.pem -L 5432:localhost:5432 ubuntu@your-ec2-public-ip
    
    • -i your-key.pem
      :SSH 密钥的路径。
    • -L 5432:localhost:5432
      :创建从本地端口 5432 到 EC2 实例上的 PostgreSQL 服务器的隧道。
    • ubuntu@your-ec2-public-ip
      :您的 EC2 实例的 SSH 用户和公共 IP。
  2. 连接到 PostgreSQL: 在新的终端窗口中,使用以下命令进行连接:

    psql -h localhost -U your_username -d your_database
    

重要提示

虽然 SSH 隧道提供了一种连接到 PostgreSQL 服务器的安全方法,但它通常不适合需要自动连接的应用程序。对于这些情况,请考虑在安全组设置中允许特定 IP 访问或使用 VPN 进行安全连接。

总结

确保两个 PostgreSQL 配置文件都允许外部连接,并且您的 EC2 安全组允许端口 5432 上的入站流量。完成这些步骤后,您应该能够从任何地方连接到 PostgreSQL 服务器。

© www.soinside.com 2019 - 2024. All rights reserved.