A Pivotal anunciou a versão final do Spring Vault 1.0. O Spring Vault é uma biblioteca java que oferece abstrações para serem utilizadas por aplicações cliente em torno do Hashicorp Vault, uma ferramenta para gerenciamento de credenciais. Por seguir o idioma do Spring, o Hashicorp Vault pode ser integrado facilmente com aplicações Spring ou Java. A nova versão também Inclui alguns padrões familiares como templates e configurações de propriedades, dentre outros.
O Hashicorp Vault é uma ferramenta que fornece aos desenvolvedores uma forma segura de acessar e gravar suas credenciais como API tokens, certificados SSL e senhas. Também é possível administrar o controle de acesso para usuários, incluindo a capacidade de revogar e alterar tokens. Além disso, possui funcionalidades de auditoria que permitem rastrear os usuários.
Os desenvolvedores Java que querem utilizar o Vault, normalmente tem duas escolhas: a CLI (Command Line interface) ou a API. Portanto, ao chamar o Vault da JVM, os desenvolvedores escolhem utilizar a API e implementar seu próprio cliente. O Spring Vault remove a necessidade dos desenvolvedores terem que fazer isso, fornecendo uma solução como um projeto open source. Essa solução também é apoiada por uma empresa comercial, a Pivotal.
Embora não dependa do Spring, os princípios de abstrações e design de alto nível são familiares, junto com o objetivo de reduzir os códigos boilerplate para os desenvolvedores. Isso significa que framework foi concebido para ter uma forte adoção por desenvolvedores Spring, bem como desenvolvedores Java.
Para interagir com o Vault, o Spring Vault utiliza sua classe principal VaultTemplate. Com objetivo de ser igual ao Vault CLI e API, oferece operações familiares como "escrever", "ler", "excluir" e "revogar":
Secret toWrite = new Secret("foo"); vaultTemplate.write("mysecret/myapp", toWrite); VaultResponseSupporttoRead = vaultTemplate.read("mysecret/myapp", Secret.class); vaultTemplate.delete("mysecret/myapp");
Através do uso da anotação @VaultPropertySource, oferece um mecanismo declarativo que permite ao Spring Vault mapear implicitamente as credenciais para objetos 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; // ... }
A biblioteca também suporta outros mecanismos de autenticação: AppId, AppRole, AWS EC2, TLS Certificates, e Cubbyhole. Para utilizar um desses mecanismos é necessário implementar a classe ClientAuthentication, isso permite que o desenvolvedor Java faça as configurações de login mais facilmente.
A necessidade de gerenciar as sessões também é tratada pelo framework através da classe SessionManager. Isso significa que tarefas como renovação de tokens e revogação de acesso são automatizadas. Além disso, não é necessário que seja feito explicitamente no código da aplicação, removendo a necessidade de desenvolvimento adicionais.
Detalhes adicionais podem ser encontrados na documentação oficial. A biblioteca está disponível para download no Maven Central e o código fonte disponível no GitHub.