RDS 连接错误:主机没有 pg_hba.conf 条目

ida*_*dan 27 postgresql amazon-rds

我需要帮助,因为我在连接到 RDS 上的托管 Postgres 数据库时遇到问题。我遇到以下错误消息:“主机 '16.151.149.51'、用户 'analytics'、数据库 'database' 没有 pg_hba.conf 条目,没有加密” 我已确认加密功能正常,并且我还将IP添加到安全组。我应该采取什么步骤来解决这个问题?

the*_*kaa 37

首先,我想指出 Nick 的回答解决了我的问题,但我只是想为那些刚接触 AWS 的人添加详细的步骤:

创建一个新的参数组:

  1. 打开 Amazon RDS 控制台https://console.aws.amazon.com/rds/
  2. 在导航窗格中,选择“参数组”。
  3. 点击页面右上角的“创建参数组”。
  4. 在“参数组系列”下拉列表中,选择“postgres15”。
  5. 在“组名称”字段中,输入新参数组的名称。
  6. 在“描述”字段中,输入新参数组的描述。
  7. 点击页面右下角的“创建”。

修改新参数组的 rds.force_ssl 参数:

  1. 在参数组列表中,单击刚刚创建的新参数组的名称。
  2. 在“过滤器参数”框中,输入 rds.force_ssl 并按 Enter。
  3. 您应该看到 rds.force_ssl 参数。单击“编辑参数”。
  4. 将 rds.force_ssl 的值从 1 更改为 0,然后单击“保存更改”。

将您的 RDS 实例与新参数组关联:

  1. 在导航窗格中,选择“数据库”。
  2. 单击您的 RDS 实例的名称。
  3. 点击页面右上角的“修改”。
  4. 在“数据库选项”部分中,找到“数据库参数组”设置,然后从下拉菜单中选择您创建的新参数组。
  5. 向下滚动并单击“继续”。
  6. 查看修改摘要并单击“修改数据库实例”。

重新启动您的 RDS 实例:

  1. 在导航窗格中,选择“数据库”。
  2. 单击您的 RDS 实例的名称。
  3. 单击页面右上角的“操作”,然后单击“重新启动”。
  4. 确认您要重新启动实例。

通过执行这些步骤,您应该能够成功修改 Amazon RDS 实例中的 rds.force_ssl 参数。希望连接问题能够得到解决。


小智 25

如果您使用的是 15 或更高版本的引擎:

在 RDS 中设置数据库时,使用 postgres15 的默认参数组 (default.postgres15)。但是,我们需要更改“rds.force_ssl”参数,该参数在default.postgres15组中不可编辑。为此,我们将为 postgres15 创建一个新的参数组,它允许我们进行编辑。

创建新参数组后,我们将选择它并找到“rds.force_ssl”参数。我们将其值从 1 更改为 0(默认值为 1)。

然后,在数据库配置选项卡中,我们将“数据库实例参数组”从默认组切换到新组。

进行这些更改后,我们将重新启动数据库并尝试再次连接。这应该有效。


小智 10

new Pool({
        user: "",
        password: "",
        host: "",
        database: "",
        port: "",
        ssl: {
            rejectUnauthorized: false
        }
})
Run Code Online (Sandbox Code Playgroud)

对于节点 Postgres


Tee*_*muK 1

好吧,OP 可能已经解决了这个问题,但对于遇到此问题的其他人来说:确保您已下载 AWS RDS CA 证书并仔细检查您的凭据是否正确。就我而言,我使用的 Terraform 模块manage_master_user_password默认设置为 true,它很好地默默地丢弃了我提供的密码并自行设置。

但基本上,对于不了解的人来说,使用 SSL 连接的步骤是:

  1. 创建可公开访问的 RDS(例如publicly_accessible = true在 TF 中)或至少对具有适当入口规则的 VPC 子网开放,例如:
  ingress {
    from_port   = 5432
    to_port     = 5432
    protocol    = "tcp"
    description = "PostgreSQL access for VPC and local machine"
    cidr_blocks = [
      module.vpc.vpc_cidr_block,
      "1.1.1.1/32"
    ]
  }
Run Code Online (Sandbox Code Playgroud)
  1. 然后在您的 ec2 实例/客户端中,下载所需的根 CA https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html Global 是最简单的,例如:curl -O https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
  2. 在 Postgres 想要的任何位置创建.postgresql文件夹并将证书移到那里,例如root.crtmv global-bundle.pem /root/.postgresql/root.crt
  3. 使用正确的连接字符串进行连接并强制执行 SSL,例如:psql postgresql://<your user>:<your pass>@postgres-1-project.z4dadjt5qxpn.us-east-1.rds.amazonaws.com:5432/<your db>?sslmode=verify-full
  4. 您应该连接到 RDS。如果它说FATAL: password authentication failed for user再次检查您的凭据。如果您将其设置为 SSL 应该可以工作(或者至少会抱怨一些事情)verify-full