Pivotal a annoncé la disponibilité générale de Spring Vault 1.0. Il s'agit d'une bibliothèque Java qui offre des abstractions côté client autour de Hashicorp Vault, un outil de gestion de secrets. En appliquant les idiomes classiques de Spring, il permet à Vault d'être plus aisément intégré aux applications Spring ou Java. Ces patterns familiers comprennent des modèles, des sources de propriété et bien d'autres.
Hashicorp Vault est un outil qui fournit aux développeurs un moyen sécurisé d'accéder et de stocker des secrets tels que des jetons API, des certificats SSL et des mots de passe. Il gère également le contrôle d'accès des utilisateurs, avec la possibilité de révocation et de rotation des jetons. De plus, il existe également des fonctionnalités d'audit qui permettent de pister les utilisateurs.
Les développeurs Java qui souhaitent adopter Vault auront le choix entre la ligne de commande ou l'API. Ainsi, lorsque Vault est utilisé depuis la JVM, il est probable que les développeurs choisissent l'API et mettent en œuvre leur propre bibliothèque client. Spring Vault supprime la nécessité pour les développeurs de le faire eux-mêmes, en fournissant un projet open source. L'initiative est également soutenue par une entreprise commerciale, Pivotal.
Bien que n'étant pas dépendant de Spring lui-même, les principes de conception de haut niveau et les abstractions sont classiques, ainsi que l'objectif de réduire le code boilerplate pour le développeur. Cela signifie que l'adoption du framework devrait être particulièrement simple pour les développeurs Spring, ainsi que pour le développeur Java typique.
Pour interagir avec Vault, Spring Vault utilise la classe centrale VaultTemplate
. En ce qui concerne la ligne de commande et l'API de Vault, elles offrent des opérations standard telles que "écrire", "lire", "supprimer" et "révoquer" :
Secret toWrite = new Secret("foo");
vaultTemplate.write("mysecret/myapp", toWrite);
VaultResponseSupport<Secret> toRead = vaultTemplate.read("mysecret/myapp", Secret.class);
vaultTemplate.delete("mysecret/myapp");
L'usage de l'annotation @VaultPropertySource
offre un mécanisme déclaratif qui permet à Spring Vault de faire correspondre implicitement des secrets aux objets Java :
@VaultPropertySource(value = "foo/creds", propertyNamePrefix = "foo")
public class SomeConfig {
// ...
}
public class MyProperties {
@Value("${foo.username}")
private String awsAccessKey;
@Value("${foo.password}")
private String awsSecretKey;
// ...
}
La bibliothèque prend également en charge plusieurs mécanismes d'authentification : AppId, AppRole, AWS EC2, TLS Certificates et Cubbyhole. En les fournissant grâce à des implémentations de la classe ClientAuthentication
, cela signifie qu'un développeur Java est doté de code pour une connexion initiale plus facile à établir.
La nécessité de gérer les sessions est également gérée par le framework via la classe SessionManager
. Cela signifie que les tâches telles que le renouvellement et la révocation de jetons sont automatisées et ne doivent pas être effectuées explicitement par le code de l'application, évitant par là même à nouveau les coûts de développement inutiles.
La documentation officielle comporte des détails supplémentaires, la bibliothèque est disponible en téléchargement sur Maven Central et le code source est disponible sur GitHub.