本文主要是介绍数据库密码定期轮换(AWS版),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题
需要定期轮换AWS上面的RDS数据库的密码,而且,需要让业务程序无感知。
思路
AWS有个一个aws-secretsmanager-jdbc库,只要在SpringBoot的基础上面集成即可,就可以使用secrets manager来定期轮换数据库的密码了。
解决步骤
这里用的是私有vpc,所以需要一些准备工作。
安全组
这里需要许可内网vpc内部能够访问Secrets Manager的REST API,所以,需要许可vpc内部的能够使用443端口进行出入站。配置类似如下:
注意:这里的出站入站规则都是内网地址,并且都是443端口的流量。
endpoint
接下来,配置vpc的Secrets Manager服务端口,保证vpc内部能够通过内网访问调用Secrets Manager接口。
注意:这里私有vpc必须是RDS同一个,这里的安全组,选择之前创建许可出站443端口的安全组即可。
Secrets Manager
参加一个密钥,并且让Secrets Manager定期轮换这个密钥的密码。后期,还需要将这个密钥集成到SpringBoot里面。创建密钥类似如下:
这里填入数据库用户名和密码。
注意:这里的数据库用户必须是数据库已经存在的用户。
注意:这里配置Lambda轮换函数,这里Lambda轮换函数也可以自动生成,默认是自动生成的,也是可以的。
直接验证
点击【立即轮换密钥】,进行密钥轮换,如下图:
然后,在执行轮换密钥的Lambda的监控CloudWatch日志组中可以发现类似日志:
finishSecret: Successfully set AWSCURRENT stage to version ...
,则表示轮换密码完成。最后,可以从【检索密钥值】中查看密码。进行登录测试,测试验证结果如下图:
上图使用test用户和轮换后的密码,成功登录数据库。
aws-secretsmanager-jdbc集成
假设基础工程是SpringBoot的Maven项目。
Maven
<dependency><groupId>com.amazonaws.secretsmanager</groupId><artifactId>aws-secretsmanager-jdbc</artifactId><version>1.0.11</version>
</dependency>
application.yml
spring:datasource:url: jdbc-secretsmanager:mysql://xxx:3306/xxxusername: dev/test/rdsdriver-class-name: com.amazonaws.secretsmanager.sql.AWSSecretsManagerMySQLDriver
这里主要就是设置jdbc驱动类为com.amazonaws.secretsmanager.sql.AWSSecretsManagerMySQLDriver
和设置数据库用户为Secrets Manager的密钥名称;url使用的jdbc-secretsmanager协议。
总结
到这里aws-secretsmanager-jdbc+Spring Boot就集成完成了,这样Spring就可以在AWS云中使用轮换密钥了。
参考:
- Amazon Secrets Manager 轮换问题排查
- 如何在私有 VPC 中轮换 AWS Secrets Manager 密钥?
- Spring Boot project using AWS RDS and Secrets Manager
- aws-secretsmanager-jdbc
这篇关于数据库密码定期轮换(AWS版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!