es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  , ,

Answer

  1. Avatar for 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 archivos bootstrap.yml y application.yml:

    1. En bootstrap.yml, actualice la propiedad order de las secciones spring.cloud.config.server.jdbc y spring.cloud.config.server.vault para asegurarse de que se busque primero en el backend Vault:
    spring:
      cloud:
        config:
          server:
            jdbc:
              order: 2
            vault:
              order: 1
    
    1. En application.yml, elimine las propiedades spring.datasource.username y spring.datasource.password de la sección spring.datasource:
    spring:
      datasource:
        url: jdbc:mysql://localhost/bootdb?createDatabaseIfNotExist=true&autoReconnect=true&useSSL=false
        driverClassName: com.mysql.jdbc.Driver
        hikari:
          connection-timeout: 60000
          maximum-pool-size: 5
    
    1. Agregue una propiedad spring.cloud.vault.generic.enabled establecida en true y actualice la sección spring.cloud.vault para incluir la propiedad token:
    spring:
      cloud:
        vault:
          scheme: http
          host: localhost
          port: 8400
          defaultKey: my-secrets
          token: root.RIJQjZ4jRZUS8mskzfCON88K
      config:
        server:
          vault:
            scheme: http
            host: localhost
            port: 8400
            token: ${spring.cloud.vault.token}
    
    1. Finalmente, en bootstrap.yml, agregue una propiedad spring.cloud.vault.token para que se pueda resolver el valor de application.yml:
    spring:
      cloud:
        config:
          allowOverride: true
          server:
            jdbc:
              sql: SELECT prop_key, prop_value from CloudProperties where application=? and profile=? and label=?
              order: 2 
            vault:
              scheme: http
              host: localhost
              port: 8400
              defaultKey: my-secrets
              order: 1
        vault:
          generic:
            enabled: true
            default-context: application
          token: root.RIJQjZ4jRZUS8mskzfCON88K
    

    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 y spring.datasource.password se recuperarán de Vault, y el error com.zaxxer.hikari.pool.HikariPool ya no debería ocurrir.

Comments are closed.