Spring Boot中如何保护DataSource的用户名和密码?

Posted

技术标签:

【中文标题】Spring Boot中如何保护DataSource的用户名和密码?【英文标题】:How to protect username and pass of DataSource in Spring Boot? 【发布时间】:2020-06-04 10:14:35 【问题描述】:

我已经开发了一些 Spring Boot 项目,并通过在 application.properties 中使用 spring.datasource.username 和 spring.datasource.password 启动了我的数据库连接

我曾尝试使用 jasypt 来加密这些属性,但我认为这不是一个好方法,因为我仍然需要在 application.properties 中存储未加密的 jasypt.encryptor.password。

我很难找到解决方案,因为来自互联网的结果只提到了 jasypt。

有没有更好的方法来保护用户名并通过 Spring Boot?

【问题讨论】:

保护在哪里?在属性文件中还是在与数据库的网络连接中? 我正在寻找保护(加密)用户名并传入属性文件的方法。 您在哪里运行您的应用程序? AWS? GCP?蔚蓝? 我在linux服务上部署了我的项目。我没有足够的条件使用网络服务 【参考方案1】:

绝对不应该将敏感数据保存在属性文件中。

您应该将这些数据保存在保险库中。

一些保险库提供者:

Hashicorp 保险柜:https://www.vaultproject.io/ AWS Secrets Manager // 用于云 Keywhiz 知己等

那么你应该使用 spring config server token based security 来从敏感存储中获取敏感数据,例如 vault。

请参阅此以获取此类用例与 spring 配置服务器的集成示例。 here.

【讨论】:

【参考方案2】:

另一种解决方案是使用 Ansible Vault 之类的东西将敏感数据存储在您的存储库中,然后在部署期间将这些机密设置为环境变量。您的属性文件会查找要设置为值的环境变量。您需要将密码存储到 Vault 文件中,但 Ansible Vault 可以使用本地文件(未在源中跟踪!)来存储 Vault 密码。

其中很多内容来自12 Factor App 的想法,您使用环境变量作为更改配置的手段。

希望对你有帮助!

【讨论】:

以上是关于Spring Boot中如何保护DataSource的用户名和密码?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 API 密钥和秘密保护 Spring Boot API

Spring Boot 从 Oracle 配置入手

如何在不维护 jsessionid 的情况下在 Spring Boot 中保护 RESTful API

如何保护 Spring Boot Web 应用程序中的 REST API?

Keycloak,如何保护不提供网页的 Spring Boot 后端?

Spring Boot 配置中的敏感信息如何保护?