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

使用aws-advanced-jdbc-wrapper连接Aurora Postgres遇认证问题求助

AWS Advanced JDBC Wrapper 连接 Aurora Postgres IAM 认证+SSL 报错处理

问题回顾

使用AWS Advanced JDBC Wrapper实现Aurora Postgres的IAM认证连接时,先后遇到两个错误:

  1. 初始报错:org.postgresql.util.PSQLException: FATAL: PAM authentication failed for user john_smith
  2. 添加SSL属性并导入证书后,新报错:org.postgresql.util.PSQLException: Could not open SSL root certificate file /home/<MY_USER>/.postgresql/root.crt

解决方案

1. 修正JDBC SSL属性配置

PostgreSQL JDBC驱动要求ssl属性为字符串类型,而非布尔值,且AWS JDBC Wrapper需要正确传递这些属性到底层驱动。修改后的属性配置如下:

properties.setProperty("sslrootcert", "/完整绝对路径/global-bundle.pem");
properties.setProperty("ssl", "true"); // 必须是字符串"true",不能用布尔值true
properties.setProperty("sslmode", "verify-ca");

2. 解决证书路径与权限问题

方式一:指定绝对路径

确保global-bundle.pem文件权限允许应用读取:

chmod 644 /path/to/global-bundle.pem

方式二:使用默认路径

将证书复制到PostgreSQL JDBC驱动默认查找路径,可省略sslrootcert属性:

cp /path/to/global-bundle.pem ~/.postgresql/root.crt
chmod 600 ~/.postgresql/root.crt # 设置安全权限,仅当前用户可读

3. 验证IAM认证核心配置

  • IAM权限检查:确保执行代码的IAM实体(如EC2角色、本地AWS用户)拥有rds-db:connect权限,示例策略:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "rds-db:connect",
            "Resource": "arn:aws:rds-db:你的区域:你的账号ID:dbuser:你的DB实例ID/john_smith"
        }
    ]
}
  • 数据库用户配置:确认john_smith是启用IAM认证的用户(创建时需指定IAM_AUTH参数)

4. 区分Java信任库与PostgreSQL证书

之前导入证书到cacerts的操作是配置Java全局信任库,但PostgreSQL JDBC驱动默认使用独立的证书文件。如果想改用Java信任库,需添加额外属性:

properties.setProperty("sslfactory", "org.postgresql.ssl.DefaultJavaSSLFactory");

此时可无需设置sslrootcert,驱动会自动使用Java的cacerts信任库。


内容的提问来源于stack exchange,提问作者Sherlock Wayne

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 16:46:17