Java 在spring vault中部分存储实体数据

Java 在spring vault中部分存储实体数据,java,spring,hashicorp-vault,spring-vault,Java,Spring,Hashicorp Vault,Spring Vault,我已经阅读了Vault文档,但仍然不确定是否正确理解了解决问题的方法 想象一下有一个名为Example的实体。它有多个字段,如name、created等,其中包括敏感字段,如password、secret\u key @Entity @Table(name = "example") public class Example { private String name; private Date created; ... @Convert(converter = SomeCo

我已经阅读了Vault文档,但仍然不确定是否正确理解了解决问题的方法

想象一下有一个名为Example的实体。它有多个字段,如name、created等,其中包括敏感字段,如password、secret\u key

@Entity
@Table(name = "example")
public class Example { 
  private String name;
  private Date created;

  ...

  @Convert(converter = SomeConverter.class)
  private String password;
  @Convert(converter = SomeConverter.class)
  private String secretKey;
}
该实体存储在SQL数据库(例如PostgreSQL)中。现在,我的目标是确保密码安全(因此是converter类),但其余数据则不安全

是否可以将实体数据存储在数据库中,同时将敏感数据存储在Vault中(存储在其后面的任何存储中)?因此,当我加载实体时,实体数据将从DB加载,敏感数据将从Vault加载

或者正确的(也是唯一可行的)方法是只使用Vault中的加密/解密转换器并将其存储在同一数据库中吗?并通过使用Vault进行身份验证来限制这一点


在这种情况下,我只是不知道Vault是否应该只用于静态机密。

我想说,这取决于您/业务

可以将整个图元(对象)存储到vault中,也可以仅存储字符串

看看这是否有帮助:

不要将所有内容都作为机密存储到vault中,您可以存储密码,但对于一般用户(在您的情况下,实体似乎是应用程序用户)我不建议这样做。 使用他们的transit secret引擎加密数据并存储在任何数据库中,您可以使用vault身份验证支持数据库访问


如果您想在secret engine中存储密码,您可以这样做,但您需要一个服务类,该类将在执行任何操作之前从vault中获取密码。

但就是这样,大多数示例都显示存储整个对象,但我想知道的是,我是否可以只存储其中的一部分?或者只有加密/解密才有可能,就这样。所以基本上你能做的是:1。将所有物品存放在保险库或2号仓库中。只需要一些必要的东西,然后您就可以进入
VaultRepository
:或3。不要将任何信息存储在Vault中,而是将所有信息存储在另一个存储中,并使用Vault Transit Encryption Service:但这一切都取决于用例。Vault存储库不允许您对整个类而不仅仅是实体的一部分执行这些操作吗?假设我的目标是移动现有实体/类的敏感数据(已使用@Convert进行加密,但不是按照最佳标准-密钥在源代码中)到更安全的位置(vault),或使用vault对其进行加密。也许使用EaaS就足够了?因为据我所知,vault更适合用于机密(如密钥)而不是整个对象—不是实体中的所有数据都是敏感的。在这种情况下,我将使用
VaultTemplate
从Vault中使用EaaS,并将加密和未加密属性存储在经典数据库中。