Spring Vault

官方地址:https://spring.io/projects/spring-vault

Spring Vault 提供了熟悉的 Spring 抽象和客户端支持来访问、存储和撤销机密。它提供了与 Vault 交互的低级和高级抽象,使用户免于基础设施问题。

借助HashiCorp 的 Vault,您可以在一个中心位置来管理所有环境中应用程序的外部秘密数据。Vault 可以管理静态和动态机密,例如应用程序数据、远程应用程序/资源的用户名/密码,并为外部服务(例如 MySQL、PostgreSQL、Apache Cassandra、Consul、AWS 等)提供凭证。

特征

  • Spring 配置支持使用基于 Java 的 @Configuration 类。

  • VaultTemplate帮助程序类可提高执行常见 Vault 操作的工作效率。包括文档和 POJO 之间的集成对象映射。

  • 支持的身份验证机制:

    • Token

    • AppRole

    • AWS-EC2

    • AWS-IAM

    • Azure MSI

    • Certificates (PKI)

    • Cubbyhole

    • GCP-GCE

    • GCP-IAM

    • Kubernetes

    • Pivotal CloudFoundry

  • 基于注释的 @VaultPropertySource 集成

  • 支持可更新和轮换的秘密

  • 与 Spring 转换服务集成的功能丰富的对象映射

  • 基于注释的映射元数据,但可扩展以支持其他元数据格式

  • 自动实现存储库接口,包括支持自定义查询方法。

配置 VaultTemplate

@Configuration
class VaultConfiguration extends AbstractVaultConfiguration {

  @Override
  public VaultEndpoint vaultEndpoint() {
    return new VaultEndpoint();
  }

  @Override
  public ClientAuthentication clientAuthentication() {
    return new TokenAuthentication("…");
  }
}

注入并使用 VaultTemplate

public class Example {

  // inject the actual template
  @Autowired
  private VaultOperations operations;

  public void writeSecrets(String userId, String password) {

    Map<String, String> data = new HashMap<String, String>();
    data.put("password", password);

    operations.write(userId, data);
  }

  public Person readSecrets(String userId) {

    VaultResponseSupport<Person> response = operations.read(userId, Person.class);
    return response.getBody();
    }
}

Vault PropertySource

@VaultPropertySource(value = "aws/creds/s3",
  propertyNamePrefix = "aws."
  renewal = Renewal.RENEW)
public class MyConfig {

}

public class Example {

  // inject the actual values
  @Value("${aws.access_key}")
  private String awsAccessKey;

  @Value("${aws.secret_key}")
  private String awsSecretKey;

  public InputStream getFileFromS3(String filenname) {
    // …
  }
}
作者:Jeebiz  创建时间:2023-08-12 12:38
最后编辑:Jeebiz  更新时间:2024-07-06 19:00