使用 Java 连接池的 AWS IAM 数据库身份验证

Tob*_*sen 5 java amazon-web-services amazon-rds amazon-iam

我正在寻找一个 Java 数据库连接池,允许我对 Aurora MySQL 使用 AWS IAM 数据库身份验证。该池应该能够在 Tomcat context.xml 文件中工作。

我研究过 Tomcat DBCP、dbcp2、HikariCP 和 c3p0。但它们似乎都假设用户名和密码在应用程序启动时已知,并且在应用程序的生命周期中不会更改。

对于 IAM 数据库身份验证,凭证每 15 分钟更改一次,因此池需要在创建新连接时向 AWS IAM 请求新凭证(凭证可以缓存几分钟)。

这是在任何 Java 连接池中实现的吗?或者您知道如何让它发挥作用吗?

Mil*_*ini 0

我最近遇到了同样的问题......我使用 HikariCP 连接池,直到现在它还不支持这一点。幸运的是我找到了一个使用这个工具的 PR:

https://github.com/brettwooldridge/HikariCP/pull/1335

我建议您创建一个项目分支并使用它,直到官方存储库接受此 PR。

我的实现:

public DataSource setup() throws Exception {
Supplier<String> passwordSupplier = () -> {
    return this.generateAuthToken(host, port, user);
}; 
com.zaxxer.hikari.HikariDataSource dataSource = new com.zaxxer.hikari.HikariDataSource();
dataSource.setPasswordSupplier(passwordSupplier); ...
Run Code Online (Sandbox Code Playgroud)

将其包含在您的池配置中非常重要:

dataSource.setMaxLifetime(15 * 60 * 1000); 
Run Code Online (Sandbox Code Playgroud)

因为您的池连接在 RDS Iam Auth 下的存活时间不能超过 15 分钟

祝你好运。

  • 您确定`dataSource.setMaxLifetime(15 * 60 * 1000); ` 是必需的吗?我一直有这样的假设:一旦打开物理连接,密码更改/令牌无效并不重要。新连接将需要新密码/有效令牌,但现有连接将继续运行。本周我有时间时将测试这个假设。 (2认同)