当前位置: 首页 > 知识库问答 >
问题:

Hashicorp保险库-你应该在KV中存储客户提供的秘密吗?

金理
2023-03-14

我需要存储用户提供给我的非常敏感的秘密(用户名+密码+证书以验证进入第三方API)。

我首先考虑的是AWS秘密管理器,它非常昂贵,而且IMHO主要用于基础设施机密(数据库密码、API密钥……),而不是客户提供的机密。现在,我正在决定使用AWS KMS(以及使用信封加密将加密的机密存储在数据库(AWS RDS)中)和Hashicorp Vault。

  • https://www.vaultproject.io/docs/secrets/transit
  • https://www.vaultproject.io/docs/secrets/kv/kv-v2

根据我所读到的内容,我得出的结论是,Vault KV主要用于基础设施机密,而Vault Transform可能在某种程度上等同于AWS KMS(更好地用于客户提供的机密)。

由于我正在构建一个非常小的应用程序,如果我决定使用Vault KV,我根本不需要数据库。但我不确定Vault KV是否合适。

对于Vault KV,我是否应该意识到一些限制或可能的问题(对于这个用例)?

谢谢

共有1个答案

顾乐家
2023-03-14

AWS KMS实际上只是管理主密钥。参数存储将使用隐藏的KMS来管理其加密密钥。如果您在AWS中部署Vault,您可能也会使用KMS来解封并作为主密钥。您可能不想直接使用KMS(因为其他解决方案为您提供了每个机密/路径策略、机密版本控制、审计日志,以及所有您可能想要/需要的功能,而KMS不会直接提供这些功能)

Vault key-value secrets引擎允许您存储秘密,并且Vault管理加密、审计日志、访问(以及使用KV v2时的版本)

transit secrets引擎可以被视为“html" target="_blank">加密即服务”:

  • 调用它来创建密钥环(将其视为一个数据加密密钥,内置了循环机制,因此有了密钥环。)
  • 然后,您可以使用keyring引用来加密一些东西,并获得一些加密的密文,可以存储在数据库或文件中。或者您也可以做相反的操作,使用keyring引用(一些密文)调用它,并要求它对其进行解密并获取数据(假设您有正确的策略)
  • 或者,如果您想要加密/解密的数据是“大的”(取决于您的用例),您可以使用它来获得一个数据密钥,您可以使用它来本地加密/解密您的数据。(您获取密钥,对其进行加密或解密,但不必处理加密密钥安全性:Vault为您管理密钥安全性,因此您只需从内存中清除密钥,并在下次从Vault中取回密钥即可)

就像很多事情一样:这要看情况而定。这取决于你的标准。我确实喜欢两者,但对于不同的用例,所以让我列出我看到的两者之间的主要区别,希望它能给您足够的上下文来做出选择:

访问管理:Vault提供了许多身份验证选项,并且很容易对策略进行推理。如果IAM策略足以覆盖所有的用例,以允许对这些秘密的最小访问,则参数存储是一个很好的选择。否则保险库会掩护你的。

别忘了Vault还提供了很多其他的秘密/加密工具。它们可能会使您的项目受益(或者没有,但请检查此选项)

我的经验法则是:如果AWS IAM就足够了,而且除了简单的秘密存储之外,您没有任何其他需求,那么SSM参数存储听起来是个好主意。
如果您有其他加密需求,或者一些其他身份验证/策略要求,这将使在IAM之上构建变得更加具有挑战性,
那么Vault就会发光。
如果您有很多秘密要存储/加密/解密,Vault的Transition secret引擎来加密/解密数据,而您的常规DB来存储这些加密blob将会完美地工作。

 类似资料:
  • 基本上我们可以有一个只能读取一次的金库密钥吗?

  • 我正在寻找一个更好的解决方案的秘密旋转和发现保险库动态秘密是一个很好的一个。通过启用秘密引擎,例如数据库,应用程序/服务可以租赁动态秘密。 我注意到每次应用程序租用数据库机密时,Vault都会在数据库中创建一个新的用户/帐户。我明白,每个应用程序/服务需要是一个好公民,并根据租赁时间使用秘密。然而,在微服务环境中,实现bug可能导致服务请求太多动态机密,从而触发在数据库中创建太多帐户。 有什么方法

  • 我正在测试Vault+Consul之间的集成,以保存我的秘密并将它们存储在多台机器中。我可以看到和插入/检索我的秘密从保险库没有问题。 现在,我正在尝试配置SpringCloud来使用来自Vault的秘密(我浏览了https://cloud.spring.io/spring-cloud-vault/reference/html/),我的bootstrap.yml与示例类似: 而且也管用!我的应用程

  • 问题内容: 有没有一种简单的方法可以在进行测试时模拟Hashicorp保险库? 我在Go中创建了一个可访问保险柜的服务,并希望为其创建适当的测试。 我没有找到我喜欢的简单解决方案(例如python中的moto)。我还尝试在docker中以dev模式使用Vault(采用系统测试路线),但我无法通过API写入文件。想法? 问题答案: 有没有一种简单的方法可以在Go测试中模拟HashiCorp Vaul

  • 最近,我了解了HashiCorp Vault及其与Kubernetes结合的用法。我发现了两篇非常棒的博客文章,关于如何通过使用init-container和共享卷(post1,post2)来使用HashiCorp Vault来动态生成cred。Kubernetes还提供了一种使用Kubernetes机密处理凭据的好方法,它还允许用户通过环境变量读取凭据。因此,它为秘密存储提供了一个很好的抽象。

  • 在我的应用程序中,我必须存储其用户的非常敏感的数据,例如其他第三方服务的各种密码(用户填写表格,向我们提供第三方服务的登录名和密码) 该应用程序的目标是使用从100多个输入生成的powershell脚本来设置其他复杂系统。需要将用户工作保存为草稿,这就是为什么我需要以某种方式加密敏感字段。 我读了很多关于Azure Key Vault的文章,每当我读到有关机密的文章时,它们似乎被描述为保存应用程序