Configuración de Spring Cloud – respaldo Vault y JDBC con credenciales JDBC en Vault.
Estoy intentando modificar nuestro servidor actual de Spring Cloud Config que solo tiene un backend JDBC para incluir un backend de Vault para hacer que las credenciales de la conexión JDBC sean secretas.
VAULT:
Listener 1: tcp (addr: “127.0.0.1:8400”, cluster address: “127.0.0.1:8401”, máx. duración de solicitud: “1m30s”, máx. tamaño de solicitud: “33554432”, tls: “desactivado”)
C:\apps\HashiCorp>vault kv get secret/my-secrets
=============== Datos ===============
Llave Valor
— —–
spring.datasource.password yadayadayada
spring.datasource.username cobar
bootstrap.yml
server:
port: 8888
spring:
application:
name: config-server
cloud:
config:
allowOverride: true
server:
jdbc:
sql: SELECT propkey, propvalue from CloudProperties where application=? and profile=? and label=?
order: 2
#https://cloud.spring.io/spring-cloud-config/reference/html/#vault-backend
vault:
scheme: http
host: localhost
port: 8400
defaultKey: my-secrets
order: 1
application.yml
spring:
main:
banner-mode: off
allow-bean-definition-overriding: true
datasource:
url: jdbc:mysql://localhost/bootdb?createDatabaseIfNotExist=true&autoReconnect=true&useSSL=false
#username: cobar
#password: yadayadayada
driverClassName: com.mysql.jdbc.Driver
hikari:
connection-timeout: 60000
maximum-pool-size: 5
cloud:
vault:
scheme: http
host: localhost
port: 8400
defaultKey: my-secrets
token: root.RIJQjZ4jRZUS8mskzfCON88K
El nombre de usuario y la contraseña de spring.datasource no se están recuperando del vault.
2021-12-01 12:43:39.927 INFO 5992 — [restartedMain]: Los siguientes perfiles están activos: jdbc, vault
2021-12-01 12:43:46.123 ERROR 5992 — [restartedMain] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 – Excepción durante la inicialización del pool.
Error de inicio de sesión para el usuario ”. ClientConnectionId:a32
davy.ai
Para recuperar el nombre de usuario y la contraseña de
spring.datasource
desde Vault en lugar del backend JDBC, se necesitan algunas modificaciones en los archivosbootstrap.yml
yapplication.yml
:bootstrap.yml
, actualice la propiedadorder
de las seccionesspring.cloud.config.server.jdbc
yspring.cloud.config.server.vault
para asegurarse de que se busque primero en el backend Vault:application.yml
, elimine las propiedadesspring.datasource.username
yspring.datasource.password
de la secciónspring.datasource
:spring.cloud.vault.generic.enabled
establecida entrue
y actualice la secciónspring.cloud.vault
para incluir la propiedadtoken
:bootstrap.yml
, agregue una propiedadspring.cloud.vault.token
para que se pueda resolver el valor deapplication.yml
:Después de estos cambios, el servidor Spring Cloud Config buscará primero las propiedades en Vault, y si no se encuentran, retrocederá al backend JDBC. Los valores de
spring.datasource.username
yspring.datasource.password
se recuperarán de Vault, y el errorcom.zaxxer.hikari.pool.HikariPool
ya no debería ocurrir.