使用 Spring Boot 时存储密码的最佳实践

Ska*_*ias 3 password-encryption spring-boot kubernetes

我们正在开发一个 Java Spring Boot 应用程序,该应用程序需要访问数据库,密码存储在文件中application.properties

我们的主要问题是密码上传到 GitLab/GitHub 后可能会被查看。

我发现我们可以使用 Jasypt 来加密数据,但从我读到的内容来看,我需要在执行时使用解密密钥,该密钥也存储在 Git 上,以便使用 Kubernates 进行部署。

在这种情况下有什么方法可以保护我们的密码吗?如果这有什么区别的话,我们正在使用 AWS,并且我们正在尝试使用 EKS 服务,但到目前为止我们已经拥有安装了 K8s 的虚拟机。

bla*_*ide 7

application.properties为此,您应该在文件中使用环境变量:

spring.datasource.username=${SPRING_DATASOURCE_USERNAME}
spring.datasource.password=${SPRING_DATASOURCE_PASSWORD}
Run Code Online (Sandbox Code Playgroud)

或者使用默认值(用于开发):

spring.datasource.username=${SPRING_DATASOURCE_USERNAME:admin}
spring.datasource.password=${SPRING_DATASOURCE_PASSWORD:admin}
Run Code Online (Sandbox Code Playgroud)

然后你可以将Kubernetes Secret添加到你的命名空间中:

spring.datasource.username=${SPRING_DATASOURCE_USERNAME}
spring.datasource.password=${SPRING_DATASOURCE_PASSWORD}
Run Code Online (Sandbox Code Playgroud)

并将其分配给您的部署:

spring.datasource.username=${SPRING_DATASOURCE_USERNAME:admin}
spring.datasource.password=${SPRING_DATASOURCE_PASSWORD:admin}
Run Code Online (Sandbox Code Playgroud)

另一种选择是将整个application.properties文件存储在 Secret 或 ConfigMap 中,并将其作为文件挂载到容器中

这两种情况在这里都有更详细的解释: https ://developers.redhat.com/blog/2017/10/03/configuring-spring-boot-kubernetes-configmap