存储spring.cloud.vault.token
在application.properties
已签入 VCS(例如 Git)的文件中可能会危及存储在 Vault 中的所有机密。
解决方案不是将 Vault 令牌存储application.properties
为纯文本。有几种选择。
从中删除 Vault 令牌application.properties
只需从系统属性(启动应用程序时)或环境变量中删除spring.cloud.vault.token
并提供application.properties
它。如果您使用容器(Docker 或 Kubernetes),环境变量特别方便。-Dspring.cloud.vault.token=00000000-0000-0000-0000-000000000000
SPRING_CLOUD_VAULT_TOKEN
将加密的 Vault 令牌存储在application.properties
如果财产是加密的,您可以保留spring.cloud.vault.token
财产。application.properties
Spring Cloud Config支持以以下值开头的属性解密{cipher}
:
spring.cloud.vault.token={cipher}encrypted_vault_token
要使用属性加密和解密,您将需要以下依赖项(Gradle 示例):
implementation 'org.springframework.cloud:spring-cloud-context:2.2.2.RELEASE'
implementation 'org.bouncycastle:bcprov-jdk15on:1.64'
对称加密
加密属性的最简单方法是使用对称加密。
想出一个对称密钥(例如s3cr3t
)。
要加密 Vault 令牌,您可以将Spring Boot CLI与Spring Boot Cloud CLI一起使用:
curl "https://repo.spring.io/release/org/springframework/boot/spring-boot-cli/2.2.2.RELEASE/spring-boot-cli-2.2.2.RELEASE-bin.tar.gz" -o spring-boot-cli-bin.tar.gz
tar -xf spring-boot-cli-bin.tar.gz
cd spring-2.2.2.RELEASE
bin/spring install org.springframework.cloud:spring-cloud-cli:2.2.1.RELEASE
bin/spring encrypt 00000000-0000-0000-0000-000000000000 --key s3cr3t
# 507cd1614682535ab8237b448ca73dc74058d3ae9145d63a7381ee67f3046eb1598da6960abdbf2dbf22c47206db5222e45fc74fd6122bc707b61c62f5051e0f
bin/spring decrypt 507cd1614682535ab8237b448ca73dc74058d3ae9145d63a7381ee67f3046eb1598da6960abdbf2dbf22c47206db5222e45fc74fd6122bc707b61c62f5051e0f --key s3cr3t
# 00000000-0000-0000-0000-000000000000
将对称密钥传递给ENCRYPT_KEY
环境变量中的应用程序。
绝对不能将对称加密密钥签入 VCS。
非对称加密
考虑使用公钥和私钥对的非对称加密作为对称加密的更安全替代方案。
您需要生成一个密钥库(使用keytool
JDK 或 JDK 附带的实用程序openssl
),而不是对称加密密钥。
在bootstrap.properties
指定以下属性:
encrypt.keyStore.location
encrypt.keyStore.password
encrypt.keyStore.alias
encrypt.keyStore.type
密钥库必须安装在 中指定的位置,encrypt.keyStore.location
并且从不签入 VCS。
此外,解锁密钥库的密码更好地传递ENCRYPT_KEYSTORE_PASSWORD
环境变量。
阅读Spring Cloud Config 中的密钥管理。