使用MariaDB JDBC对接AWS RDS Proxy IAM认证出现访问拒绝问题
问题根因
报错的核心原因是MariaDB JDBC驱动未触发IAM认证逻辑,仍然使用原生MySQL密码认证方式提交请求,从RDS Proxy日志可以明确看到客户端使用mysql_native_password认证插件,而非IAM令牌认证。
排查与解决方案
1. 修正数据源URL配置
当前URL存在两处错误:
- 存在冗余的
&符号:credentialType=AWS-IAM&&verifyServerCertificate中的两个连续&需改为单个 - 缺失AWS区域参数:MariaDB驱动的IAM认证逻辑需要显式指定
awsRegion参数,否则无法生成对应区域的合法IAM令牌
修正后的配置参考:
datasources: default: url: jdbc:mariadb://XXXXXX/DATABASE?user=INSTANCE_PROFILE_NAME&credentialType=AWS-IAM&awsRegion=eu-west-1&verifyServerCertificate=true&useSSL=true&requireSSL=true&Unicode=yes&characterEncoding=UTF-8&passwordCharacterEncoding=UTF-8 driverClassName: org.mariadb.jdbc.Driver type: org.mariadb.jdbc.MariaDbPoolDataSource
其中新增的passwordCharacterEncoding=UTF-8参数可以解决应用日志提示的密码字符编码不匹配问题。
2. 验证RDS实例数据库用户配置
确认你在底层RDS实例中已经创建了与IAM角色同名的数据库用户,且使用AWS专属认证插件,创建命令参考:
CREATE USER 'INSTANCE_PROFILE_NAME'@'%' IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS'; GRANT ALL PRIVILEGES ON 你的数据库名.* TO 'INSTANCE_PROFILE_NAME'@'%'; FLUSH PRIVILEGES;
不得使用mysql_native_password作为该用户的认证插件。
3. 校验IAM权限配置
确认权限策略中的prx-XXXXXXXXX为你当前使用的RDS Proxy的真实资源ID,你使用的*通配符匹配所有数据库用户的配置是合法的,无需修改。
4. 驱动版本校验
你使用的mariadb-java-client:2.7.4版本原生支持AWS-IAM凭证类型,无需额外自定义IAM令牌生成逻辑,配置修正后即可正常触发认证流程。
内容的提问来源于stack exchange,提问作者maathor
相关产品推荐
相关产品推荐

