You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lambda连接同VPC内RDS PostgreSQL报错:no pg_hba.conf entry

Lambda连接RDS PostgreSQL失败排查与解决

问题背景

Lambda与RDS PostgreSQL实例处于同一VPC,已配置连接所需IAM权限,尝试密码认证和IAM认证两种方式连接数据库并查询数据,均报错。RDS已设置允许所有主机连接。

Lambda代码

export const handler = async (event) => {
  console.log("hereeeeee");
  const dbConfig = {
    host: ENDPOINT_URL,
    port: 5432,
    database: DATABASE_NAME,
    user: USERNAME,
  };

  const signer = new Signer({
    region: MY_REGION,
    hostname: ENDPOINT_URL,
    port: dbConfig.port,
    username: dbConfig.user,
  });

  try {
    const token = await signer.getAuthToken();
    console.log("Generated token");
    dbConfig.password = token;
  } catch (error) {
    console.log(error);
  }

  const client = new Client(dbConfig);

  try {
    await client.connect();

    console.log("Connected");

    const query = "SELECT * FROM your_table_name;";
    const result = await client.query(query);

    console.log(result);

    return {
      statusCode: 200,
      body: JSON.stringify(result.rows),
    };
  } catch (error) {
    console.log(error);
    return {
      statusCode: 500,
      body: JSON.stringify({
        message: "Error fetching data from the database",
      }),
    };
  } finally {
    await client.end();
  }
};

错误日志

error: no pg_hba.conf entry for host "49.43.242.150", user "username", database "databasename", no encryption
.
.
.
    at TCP.onStreamRead (node:internal/stream_base_commons:190:23) {
  length: 162,
  severity: 'FATAL',
  code: '28000',
  detail: undefined,
  hint: undefined,
  position: undefined,
  internalPosition: undefined,
  internalQuery: undefined,
  where: undefined,
  schema: undefined,
  table: undefined,
  column: undefined,
  dataType: undefined,
  constraint: undefined,
  file: 'auth.c',
  line: '543',
  routine: 'ClientAuthentication'
}

解决步骤

1. 强制启用SSL连接

错误提示明确指出no encryption,PostgreSQL默认要求SSL连接(尤其是IAM认证场景),需在数据库配置中添加SSL参数:

const dbConfig = {
  host: ENDPOINT_URL,
  port: 5432,
  database: DATABASE_NAME,
  user: USERNAME,
  ssl: { rejectUnauthorized: false } // 测试环境可临时关闭证书验证,生产环境建议配置CA证书
};

生产环境中,建议下载对应区域的RDS CA证书,配置ca参数指向证书内容,保障连接安全性。

2. 验证RDS的IAM认证配置

  • 确认RDS实例已启用IAM数据库认证:在RDS控制台实例详情的「连接」标签下,检查「IAM数据库认证」状态为启用。
  • 为数据库用户赋予IAM认证权限:执行以下SQL语句:
    GRANT rds_iam TO username;
    

3. 检查VPC安全组规则

  • 确保Lambda所在安全组允许出站访问RDS的5432端口。
  • 确保RDS实例安全组允许来自Lambda安全组的5432端口入站流量。
    注:即使RDS设置允许所有主机连接,VPC内部安全组规则优先级更高,需保证双向流量放行。

4. 密码认证场景额外检查

若使用密码认证而非IAM令牌,需确认:

  • 数据库用户密码正确且未过期。
  • 避免IAM认证代码分支覆盖密码,可通过条件判断区分两种认证方式。

内容的提问来源于stack exchange,提问作者Ravi Ranjan Ojha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 07:47:49