Hashicorp Vault 用于文件存储?

Posted

技术标签:

【中文标题】Hashicorp Vault 用于文件存储?【英文标题】:Hashicorp Vault for file storage? 【发布时间】:2016-04-22 05:24:16 【问题描述】:

我希望保存大量相当大的文档,从 1M 到可能更大的多个数量级。我知道 Hashicorp 的 Vault 非常适合存放密钥和较小的值。我很想从中获得“玻璃破碎”功能和关键滚动功能。

有没有人用大秘密对 Vault 进行过任何基准测试?我假设我不会对保险库中的机密数量感到困扰?

【问题讨论】:

如果你想避免繁重的 IO 将数据存储在外部,你也可以考虑在 Hashicorp Vault 中保留一些加密密钥,但使用 Ansible Vault 加密磁盘上的数据(使用密钥存储在 Hashicorp Vault 中)。 【参考方案1】:

性能完全取决于您使用的存储后端。如果您对具有精细访问控制的机密进行回购之类的事情,那么您可能不需要 HA,因此文件存储后端就可以了,并且您可以使用 SSD 来获得良好的性能。

出于以下几个原因,我建议不要使用 Transit 后端来加密和存储文件:

1.) 如果您只使用 KV,则从一个存储后端迁移到另一个存储后端(例如文件存储到 HA 后端)相对容易/直接,但当您使用 vault 的高级功能时,它并不总是那么容易/可能的。 (顺便说一句,后端之间的迁移是我在 Vault 1.0++ 中注意到的一个相对较新的功能) 2.) 您可以列出存储在 KV 存储中的所有秘密,并且您有版本控制。如果您使用 Transit,则必须自己编写代码。 3.) Transit 不是为此而设计的,错误的工作工具,KV 就是你要找的。

如果您想在 Vault 中存储大文件: 不要单独使用 Consul(否则您将被限制为最大 0.5mb) 应该可以开始:

storage "file"  path = "C:/Vault" 

然后在需要 HA 时转换到 S3/Azure Blob + Consul

ha_backend "consul" ...
storage "s3" ... 

(我建议你做一个 PoC 来确认你可以转换。)

注意: 在实践中,我发现我永远不会存储大于 0.375mb 的秘密,所以 Consul 本身就很好。这是一个更简单的设置,您可以进行时间点实时快照。另外,如果您发现将来需要空间,您可以迁移您的存储后端。

此外,由于以下不便/开销原因,您仍应避免使用大文件: Vault 是一个使用以下语法的键值存储:

vault kv put secret/KEY key=value
vault kv put secret/dev config.json=base64'dstring

如果要存储二进制文件或多行字符串,则需要对其进行 base64 以将其转换为 1 行字符串,并将其存储为值。好吧,如果你最终得到一个 300mb 的文件,你就必须制作一个 400mb 的 base64 编码字符串。 (因为 base64 编码增加了一致的 33% 开销)

如果您真的想以可扩展的方式做到这一点: 我认为理想的方法是将对称加密/解密密钥 + 加密文件位置存储在 Vault 中。 使用 Consul 作为您的 Vault 后端。 使用 S3 作为您的文件存储。

如果我要这样做,我会在 Kubernetes 上托管 Consul + Minio/Rook/Ceph(自托管 S3)+ Kubernetes 上的 2-3 个保管库服务器,或者在启用英特尔 SGX 的盒子上实现最高安全性Vault SCONE Secure Enclaves(加密 ram)可防止 Spectre/Meltdown/0 天 root 访问内存转储漏洞利用。并将对称加密的文件存储在您的 DIY S3 上,并将解密密钥 + 文件位置引用存储在 Vault 中,然后使用一些中间件将其抽象出来。 (我只建议自托管 S3,这样您就可以成为多云 + 100% 基础架构即代码,但是可以根据您的要求混合和匹配部分设计。)

【讨论】:

现在我注意到了,您还可以将多行字符串复制并粘贴为 Web UI 中的值。 更多详细信息,例如有关如何从保管库存储和检索二进制文件的代码:***.com/questions/53710132/… github.com/adobe/cryptr 这是一个非常不错的上传文件的 GUI。不过这有点奇怪,因为在 Hashi Web GUI 中您会说 KVv2/path 在 adobe cryptr 中,您会说 KVv2/data/path。请注意,您还根据 KVv2/data/path 编写策略 Vault HTTP API 规定最大请求大小为 32MB,以防止拒绝服务攻击。这可以在 Vault 服务器配置中针对每个侦听器块进行调整。【参考方案2】:

您可以使用Transit backend 加密您的文件并将它们存储在外部,而不是使用 Vault 来实际存储文件。

这将允许您将文件存储在通常存储它们的任何位置,同时获得对 Vault 的秘密管理功能的访问权限。

【讨论】:

以上是关于Hashicorp Vault 用于文件存储?的主要内容,如果未能解决你的问题,请参考以下文章

ruby 示例Chef扩展,用于从HashiCorp的Vault中提取秘密

在 Azure Key Vault 中存储 MySQL Enterprise 加密密钥

突发!HashiCorp禁止在中国使用企业版VAULT软件

突发!HashiCorp禁止在中国使用企业版VAULT软件

HashiCorp Vault介绍

HashiCorp Vault 学习平台上线啦!