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

使用IAM认证连接AWS RDS PostgreSQL报root密码认证失败错误

问题描述

我在AWS上创建了RDS实例,参考官方文档创建了如下权限策略:

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
             "rds-db:connect"
         ],
         "Resource": [
             "arn:aws:rds-db:us-east-2:1234567890:dbuser:db-ABCDEFGHIJKL01234/db_user"
         ]
      }
   ]
}

我创建了配置专属密码的通用数据库用户,尝试参考Java连接官方指南,使用生成的IAM auth token替代常规密码登录数据库,相关实现代码如下:

private static Properties setMySqlConnectionProperties() {
    Properties mysqlConnectionProperties = new Properties();
    mysqlConnectionProperties.setProperty("verifyServerCertificate","true");
    mysqlConnectionProperties.setProperty("useSSL", "true");
    mysqlConnectionProperties.setProperty("user",DB_USER);
    mysqlConnectionProperties.setProperty("password",generateAuthToken());
    return mysqlConnectionProperties;
}

public static String generateAuthToken(String region, String hostName, int port, String username) {
    RdsIamAuthTokenGenerator generator = RdsIamAuthTokenGenerator.builder()
            .credentials(new DefaultAWSCredentialsProviderChain())
            .region(region)
            .build();

    String authToken = generator.getAuthToken(
            GetIamAuthTokenRequest.builder()
                    .hostname(hostName)
                    .port(port)
                    .userName(username)
                    .build());

    return authToken;
}

我实际使用的数据库为PostgreSQL,连接时返回如下错误:

"FATAL: password authentication failed for user \"root\"","error.stack_trace":"org.postgresql.util.PSQLException: FATAL: password authentication failed for user \"root\"

我已为root用户配置了IAM认证支持,需要逐一校验哪些配置项才能修复该问题?
下方为AWS控制台中已配置完成的策略截图:
配置截图


排查校验项

按优先级从高到低依次校验以下配置:

  • 校验IAM策略的资源ARN匹配度:你当前策略授权的数据库用户是db_user,但实际连接使用的是root用户。IAM策略的资源段固定格式为arn:aws:rds-db:<区域>:<账号ID>:dbuser:<RDS实例资源ID>/<数据库用户名>,必须将ARN末尾的用户名替换为实际使用的root,同时逐一确认区域、账号ID、RDS实例资源ID和实际实例完全匹配——注意实例资源ID是控制台显示的db-开头的标识符,不是实例访问端点。
  • 校验RDS实例的IAM认证开关:进入RDS实例详情页,确认IAM database authentication选项已设置为Enabled,该选项关闭时实例完全不接受IAM token认证,所有登录请求都会走普通密码校验逻辑。
  • 校验数据库内用户的IAM角色授权:登录PostgreSQL数据库执行GRANT rds_iam TO root;为root用户赋予内置的IAM认证角色,没有该角色的用户即使IAM策略配置正确也无法通过token登录,会直接返回密码错误。注意不要给绑定了rds_iam角色的用户设置普通密码,PostgreSQL RDS的IAM认证逻辑下,绑定该角色的用户会强制走IAM校验,原有普通密码会直接失效。
  • 校验连接参数的数据库适配性:你当前的连接属性方法命名为setMySqlConnectionProperties,存在直接套用MySQL配置的问题。PostgreSQL的SSL连接参数和MySQL不兼容,不需要verifyServerCertificate参数,需替换为PostgreSQL适配参数:sslmode=verify-full、sslrootcert=<RDS根证书本地存储路径>。
  • 校验Auth Token生成参数:确认传入generateAuthToken方法的四个参数完全准确:区域和RDS实例部署区域一致、hostname为RDS实例的官方读写端点(不能用只读端点、自定义域名或IP地址)、端口为数据库实际监听端口(PostgreSQL默认5432)、username参数传入值为root无拼写错误。
  • 校验代码运行身份的权限绑定:确认DefaultAWSCredentialsProviderChain实际加载到的身份(EC2实例角色、本地配置的AK/SK、EKS服务角色等)确实绑定了你创建的IAM策略,可以在代码中打印当前加载身份的ARN,和你配置策略的目标身份做比对,避免身份错配。
  • 校验SSL证书有效性:连接时使用的SSL证书必须是AWS对应区域的官方RDS CA证书,证书过期、不匹配会导致SSL握手异常,最终抛出认证失败错误。
  • 校验网络访问规则:确认运行代码的客户端IP在RDS实例安全组的入站允许范围内,数据库端口连通性正常,避免网络拦截导致token未被正确传递到数据库端。

内容的提问来源于stack exchange,提问作者Hard Worker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 10:18:07