Хранение spring.cloud.vault.token
в application.properties
, зарегистрированном в VCS (например, Git), может поставить под угрозу все секреты, хранящиеся в Vault.
Решение состоит не в том, чтобы хранить токен Vault в application.properties
как простой текст. Есть несколько вариантов.
Удалить токен Vault из application.properties
Просто удалите spring.cloud.vault.token
из application.properties
и предоставьте его через системное свойство -Dspring.cloud.vault.token=00000000-0000-0000-0000-000000000000
(при запуске приложения) или переменная окружения SPRING_CLOUD_VAULT_TOKEN
. Переменная окружения особенно удобна, если вы используете контейнеры (Docker или Kubernetes).
Храните зашифрованный токен 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'
Symmetri c шифрование
Самый простой способ зашифровать свойства - это использовать шифрование симметрии c.
Поднимитесь с ключом симметрии c (например, 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
Передать ключ симметрии c приложению в переменной среды ENCRYPT_KEY
.
Ключ шифрования Symmetri c никогда не должен проверяться в VCS.
Asymmetri c шифрование
Рассмотрим r asymmetri c шифрование с использованием publi c и пары секретных ключей в качестве более безопасной альтернативы шифрованию симметри c.
Вместо ключа шифрования симметрии c необходимо создать хранилище ключей (используя keytool
утилита, поставляемая с 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.