无法使用入站规则连接到 Amazon RDS 数据库以允许打开所有连接和公开访问

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

我创建了一个 postgresql RDS 数据库实例并连接到一个 EC2 实例。我可以 ssh 进入 EC2 实例并从那里访问数据库,但无法使用

psql
连接到数据库或使用 prisma 连接到数据库。

我在 prisma 中遇到的错误-

Environment variables loaded from .env
Prisma schema loaded from prisma/schema.prisma
Datasource "db": PostgreSQL database "postgres", schema "public" at "greengainsdb.cfyqeu2ws1b6.us-west-2.rds.amazonaws.com"

Error: P1001: Can't reach database server at `greengainsdb.cfyqeu2ws1b6.us-west-2.rds.amazonaws.com`:`5432`

Please make sure your database server is running at `greengainsdb.cfyqeu2ws1b6.us-west-2.rds.amazonaws.com`:`5432`.

以及我使用时遇到的错误

psql

psql --host=greengainsdb.cfyqeu2ws1b6.us-west-2.rds.amazonaws.com --port=5432 --username=postgres --password --dbname=postgres
Password:
psql: error: connection to server at "greengainsdb.cfyqeu2ws1b6.us-west-2.rds.amazonaws.com" (35.155.218.201), port 5432 failed: Operation timed out
    Is the server running on that host and accepting TCP/IP connections?

enter image description here

这是我在数据库上的安全组。

enter image description here

我尝试更改安全组以允许任何 IP 上的 TCP 上的所有连接进行测试,看看是否能够连接到数据库,但仍然无法连接到数据库。通过 SSH 连接到 EC2 效果非常好。我错过了什么吗?我有一种感觉,我位于私有子网中,但我不知道如何更改子网设置以将其公开。

postgresql amazon-web-services amazon-ec2 amazon-rds prisma
1个回答
0
投票

数据库通常在私有子网中启动,以添加另一层保护。根据定义,私有子网中的任何内容都无法通过 Internet 直接访问。

您似乎有:

  • 公有子网
  • 中的 Amazon EC2 实例
  • 私有子网中的 Amazon RDS 数据库

您可以通过 SSH 访问 EC2 实例,因为它可以访问 Internet,并且您可以从那里连接到数据库,因为 只要安全组允许,VPC 内的所有资源都可以相互通信。

Amazon RDS 数据库上还有另一个相关设置。您的数据库可能设置为

Publicly available = No

,这意味着数据库的 DNS 名称 (URL) 将仅解析为私有 IP 地址。该地址只能从 VPC 内部访问。

所以,你有两个选择:

选项 1:使用端口转发

建立与 EC2 实例的 SSH 连接时,您可以将端口从您自己的计算机“转发”到 EC2 实例。例如,这是一个普通的 SSH 命令:

ssh -i key.pem [email protected]
但是您可以添加端口转发:

ssh -i key.pem -L 5432:greengainsdb.cfyqeu2ws1b6.us-west-2.rds.amazonaws.com:5432 [email protected]
这表示:“通过 SSH 连接转发本地端口 5432。连接另一端的计算机应将流量转发到 

greengainsdb.cfyqeu2ws1b6.us-west-2.rds.amazonaws.com:5432

。”

这将允许您在不影响安全性的情况下连接到私有数据库,并且是推荐的方法。事实上,许多 SQL 客户端允许您将 SSH 端口转发配置为数据库连接的一部分,因此它们会为您执行上述命令。

选项 2:公开您的数据库

如果您确实想直接连接到数据库,则需要以下配置:

    Amazon RDS 数据库需要位于
  • 公共子网
  • 需要配置为
  • Publicly Available = Yes
    
    
  • 与数据库关联的安全组需要允许从您计算机的 IP 地址进行访问
这将允许直接访问数据库。然而,这也使其更容易受到来自互联网的攻击。正确配置的安全组将只允许从您的 IP 地址进行访问,但将数据库放在公共子网中通常被认为是较差的安全实践。

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