tre*_*son 5 file-management app-secret secret-manager hashicorp-vault
我希望保存许多相当大的文档,从1M到可能更大的多个数量级。我知道Hashicorp的保险柜非常适合秘密密钥和较小的值。我很乐意从中获得“玻璃休息”功能和关键滚动功能。
有没有人对带有大型秘密的保险柜进行基准测试?我以为我不会在Vault中的秘密数量上遇到麻烦?
性能完全取决于您使用的存储后端。如果您正在执行诸如具有细粒度访问控制的机密存储库之类的操作,那么您可能不需要 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" }
Run Code Online (Sandbox Code Playgroud)
然后在需要 HA 时过渡到 S3/Azure Blob + Consul
ha_backend "consul" {...}
storage "s3" {...}
Run Code Online (Sandbox Code Playgroud)
(我建议您进行 PoC 以确认您可以进行转换。)
注意:在实践中,我发现我永远不会存储大于 0.375mb 的秘密,因此 Consul 本身就可以了。这是一个更简单的设置,您可以进行时间点实时快照。另外,如果您发现将来需要空间,您可以迁移存储后端。
此外,由于以下不便/开销的原因,您仍然应该避免使用大文件:
Vault 是一个使用以下语法的键值存储:
vault kv put secret/KEY key=value
vault kv put secret/dev config.json=base64'dstring
Run Code Online (Sandbox Code Playgroud)
如果要存储二进制文件或多行字符串,则需要对其进行 base64 以将其转换为 1 行字符串,并将其存储为值。如果您最终得到一个 300mb 的文件,则必须创建一个 400mb 的 base64 编码字符串。(因为 base64 编码增加了一致的 33% 开销)
如果您确实想以可扩展的方式执行此操作:
我认为执行此操作的理想方法是将对称加密/解密密钥+加密文件位置存储在Vault中。使用 Consul 作为您的 Vault 后端。使用 S3 作为文件存储。
如果我打算这样做,我会在 Kubernetes 上托管 Consul + Minio/Rook/Ceph(自托管 S3)+ 2-3 个保管库服务器,或者在 Kubernetes 上,或者在启用 Intel SGX 的盒子上使用 Vault SCONE Secure 来实现最高安全性Enclave(加密 RAM)可防止 Spectre/Meltdown/0 天根访问内存转储漏洞。并将对称加密的文件存储在您的 DIY S3 上,并将解密密钥 + 文件位置引用存储在 Vault 中,然后使用一些中间件将其抽象出来。(我只建议自托管 S3,这样您就可以实现多云 + 100% 基础设施即代码,但是可以根据您的要求混合和匹配部分设计。)