Hashicorp Vault 用于文件存储?

Hashicorp Vault for file storage?

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

有没有人用大秘密对 Vault 进行过基准测试?我假设我不会为保险库中的秘密数量而烦恼?

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

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

性能完全取决于您使用的存储后端。如果你正在做一些类似于具有细粒度访问控制的秘密的回购,那么你可能不需要 HA 所以文件存储后端会很好,你可以使用 SSD 来获得良好的性能。

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

1.) 从 1 个存储后端迁移到另一个(如文件存储到 HA 后端)相对 easy/straight 如果你只使用 KV,当你使用 vault 的高级功能时,它是并不总是 easy/possible。 (顺便说一句,后端之间的迁移是一个相对较新的功能,我在 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 本身就可以了。这是一个更简单的设置,您可以进行时间点实时快照。另外,如果您发现以后需要 space,您可以迁移存储后端。


此外,由于 inconvenience/overhead 的以下原因,您仍应避免使用大文件:
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 中存储对称 encryption/decryption 密钥 + 加密文件位置。 使用 Consul 作为您的 Vault 后端。 使用 S3 作为您的文件存储。

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