1

J'utilise Spring Cloud Config Server pour servir la configuration de mes applications client. Pour faciliter la configuration des secrets, j'utilise HashiCorp Vault comme backend. Pour le reste de la configuration, j'utilise un repo GIT. J'ai donc configuré le serveur de configuration en mode composite. Voir mon serveur de configuration bootstrap.yml ci-dessous: -Printemps Cloud Config (backend Vault) teminer trop tôt

server: 
    port: 8888 

spring: 
    profiles: 
     active: local, git, vault 

    application: 
     name: my-domain-configuration-server 

    cloud: 
     config: 
      server: 
       git: 
        uri: https://mygit/my-domain-configuration 
        order: 1 
       vault: 
        order: 2 
        host: vault.mydomain.com 
        port: 8200 
        scheme: https 
        backend: mymount/generic 

C'est tout fonctionne comme prévu. Cependant, le jeton que j'utilise est sécurisé avec une politique d'authentification Vault. Voir ci-dessous: -

{ 
    "rules": "path "mymount/generic/myapp-app,local" { 
        policy = "read" 
       } 

       path "mymount/generic/myapp-app,local/*" { 
        policy = "read" 
       } 

       path "mymount/generic/myapp-app" { 
        policy = "read" 
       } 

       path "mymount/generic/myapp-app/*" { 
        policy = "read" 
       } 

       path "mymount/generic/application,local" { 
        policy = "read" 
       } 

       path "mymount/generic/application,local/*" { 
        policy = "read" 
       } 

       path "mymount/generic/application" { 
        policy = "read" 
       } 

       path "mymount/generic/application/*" { 
        policy = "read" 
       }" 
} 

Mon problème est que je ne stocke pas de secrets dans tous ces domaines. J'ai besoin de spécifier tous ces chemins juste pour que je puisse autoriser le jeton à lire un secret de mymount/generic/myapp-app,local. Si je n'autorise pas tous les autres chemins, la méthode VaultEnvironmentRepository.read() renvoie un code d'état 403 HTTP (Interdit) et déclenche une exception VaultException. Cela entraîne l'échec total de récupération de toute configuration pour l'application, y compris la configuration basée sur GIT. Ceci est très limitatif car les applications client peuvent avoir plusieurs profils Spring qui n'ont rien à voir avec la récupération des éléments de configuration. Le problème est que le serveur de configuration tentera de récupérer la configuration pour tous les profils actifs fournis par le client.

Existe-t-il un moyen d'activer la tolérance aux pannes ou l'indulgence sur le serveur de configuration, de sorte que VaultEnvironmentRepository n'abandonne pas et renvoie toute configuration qu'il est autorisé à retourner?

Répondre

0

Avez-vous absolument besoin du profil local? Ne seriez-vous pas en mesure de vous débrouiller avec les profils 'vault' et 'git' dans Config Server et d'utiliser le profil 'default' dans chaque application Spring Boot?

Si vous utilisez la suggestion ci-dessus les deux seuls chemins que vous aurez besoin dans votre fichier de règles (de .HCl) sont:

path "mymount/generic/application" { 
    capabilities = ["read", "list"] 
} 

et

path "mymount/generic/myapp-app" { 
    capabilities = ["read", "list"] 
} 

Cela suppose que vous êtes configuration écrit à

vault write mymount/generic/myapp-app 

et non

vault write mymount/generic/myapp-app,local 

ou similaire.

+0

D'accord, même si mon problème illustre un problème qui existe toujours si j'ajoute un profil qui n'est pas configuré dans Vault. J'ai besoin d'un mécanisme qui me permette d'utiliser des profils qui ne sont pas configurés dans Vault. Le profil "local" est simplement utilisé à titre purement illustratif ici. – Codesnooper