本文介绍如何在不重新启动Spring Boot应用程序的情况下处理AWS RDS密钥轮换。
我遇到了这个问题,其中无论何时为我的AWS RDS实例更新数据库密码时,都必须更新数据库连接。这可能是由于采用了每月密码轮换策略,或者是数据库凭据已被盗用,并且即使更改了数据库密码,您也希望所有正在运行的应用程序继续运行。
为了解决此类问题,AWS提供了一个库,该库将处理数据库连接的此更新,而无需重新启动Spring Boot应用程序。
AWS有一个名为AWS Secrets Manager JDBC的开源库,该库在应用程序运行并与RDS实例通信时处理数据库连接。
让我们看看它是如何工作的。
首先,在构建文件中添加以下依赖项。考虑到Maven,它将如下
<依存关系>
< groupId > com.amazonaws.secretsmanager </ groupId >
< artifactId > aws-secretsmanager-jdbc </ artifactId >
<版本> 1.0.5 </版本>
</依赖>
接下来,使用方案jdbc-secretsmanager
代替JDBC数据源URLjdbc
春天:
资料来源:
网址:jdbc - secretsmanager:mysql://数据库主机:3306 / rotate_db
接下来,您需要指定驱动程序类名称。对于本文,我们将坚持使用MySQL RDS实例。因此,它将是com.amazonaws.secretsmanager.sql.AWSSecretsManagerMySQLDrive
。
该库还需要特定于数据库的连接库。因此,您将需要添加MySQL连接器库,这通常是工件mysql-connector-java
。这将用于与数据库建立实际连接。
如果您要处理其他数据库,则可以从此处的源代码中找到相应的驱动程序。
接下来,使用AWS Secrets Manager中的数据库凭证部分为RDS实例创建AWS Secret。
接下来,在属性文件中application.yaml
,将刚刚创建的机密名称指定为用户名,并且您不必指定任何密码,因为该密码现在存储在机密管理器中。
您的属性文件应如下所示。福州小程序开发公司
春天:
资料来源:
网址:jdbc - secretsmanager:mysql://数据库主机:3306 / rotate_db
用户名:秘密/轮换
司机-类-的名字:COM。amazonaws。秘密经理。sql。AWSSecretsManagerMySQLDriver
现在,为了使应用程序与AWS通讯并获取秘密值,您将必须设置和配置AWS CLI。这是它的链接。
完成此操作后,您的应用程序可以通过AWS_PROFILE
在配置AWS配置时使用您设置的配置文件导出环境变量来连接到AWS 。
这样,您就完成了更改。
现在启动应用程序,它应该能够与AWS Secrets Manager进行通信以获取凭证并开始与AWS RDS实例进行通信。
您可以通过单击密码中的“旋转密码”选项进行测试,该选项将为数据库生成一个新密码并检查与数据库的通信。
这是我的实现的GitHub链接。
奖金:
如果已经安装了liquibase集成,这也将起作用。您只需在liquibase配置和数据库密码中指定与用户名相同的URL,即可使用liquibase设置。
春天:
资料来源:
网址:jdbc - secretsmanager:mysql://数据库主机:3306 / rotate_db
用户名:秘密/轮换
司机-类-的名字:COM。amazonaws。秘密经理。sql。AWSSecretsManagerMySQLDriver
liquibase:
网址:jdbc - secretsmanager:mysql://数据库主机:3306 / rotate_db
用户:秘密/轮换