Hashicorp Vault用于文件存储?

7

我希望保存大量文件,大小从1M到可能是更大的数量级。我知道Hashicorp的Vault非常适合密钥和较小的值。我希望能够获得“玻璃破碎”功能和密钥滚动功能。

有人对使用Vault保存大型秘密进行过基准测试吗?我预计不会在vault中存储的秘密数量上出现问题?


如果您想避免向金库进行大量IO并将数据存储在外部,您还可以考虑将一些加密密钥保存在Hashicorp Vault中,但使用Ansible Vault在磁盘上加密数据(密钥存储在Hashicorp Vault中)。 - openCivilisation
2个回答

5
性能完全取决于您使用的存储后端。如果您正在使用细粒度访问控制的秘密存储库,则可能不需要HA,因此文件存储后端就可以了,并且您可以使用SSD来实现较好的性能。
我建议不要使用Transit后端加密和存储文件,原因如下: 1.) 如果您只使用KV,则从1个存储后端迁移到另一个存储后端(例如从文件存储迁移到HA后端)相对容易/直接;当您使用Vault的高级功能时,它并不总是容易/可能。(顺便说一下,从后端间进行迁移是Vault 1.0 ++中的一个相对较新的功能) 2.) 您可以列出存储在KV存储库中的所有秘密,并进行版本控制。如果您选择Transit,则需要自己编写代码。 3.) Transit并不是为此而设计的,对于您的需求,KV才是正确的工具。
如果您想在Vault中存储大型文件: 不要仅使用Consul(否则最大尺寸将限制为0.5mb) 可以尝试先使用:
storage "file" { path = "C:/Vault" }

当需要高可用时,可以将数据从原先的存储方式转移到 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编码以将其转换为单行字符串,并将其作为值存储。如果最终得到的是300MB文件,则必须生成400MB的base64编码字符串。(因为base64编码会增加33%的开销) 如果您真的希望以可扩展的方式完成此操作: 我认为理想的方法是在Vault中存储对称加密/解密密钥+加密文件位置。 使用Consul作为Vault后端。 使用S3作为文件存储。
如果我要这样做,我会在Kubernetes上托管Consul + Minio / Rook / Ceph(自托管S3)+ 2-3个Vault服务器,无论是在Kubernetes上还是在Intel SGX启用的Vault SCONE Secure Enclaves上,都可以获得顶级安全性(加密内存),以防止Spectre / Meltdown / 0日根访问内存转储攻击。并将文件对称加密存储在DIY S3上,并将解密密钥+文件位置引用存储在Vault中,然后使用一些中间件来抽象出来。(我建议自托管S3,以便您可以实现多云和100%基础设施即代码,但是您可以根据自己的要求混合和匹配设计的部分。)

现在我注意到,您还可以将多行字符串直接复制粘贴到Web UI中作为值。 - neokyle
更多细节,例如如何从保险库中存储和检索二进制文件的代码: https://dev59.com/3FQJ5IYBdhLWcg3wf2Ed#54624667 - neokyle
这里有一个上传文件的非常漂亮的GUI:https://github.com/adobe/cryptr。但是它有一点奇怪,因为在Hashi Web GUI中,你会说KVv2/path,在adobe cryptr中,你需要说KVv2/data/path。请注意,你还可以根据KVv2/data/path编写策略。 - neokyle
Vault HTTP API 强制实施最大请求大小为32MB,以防止拒绝服务攻击。这可以在 Vault 服务器配置中的每个监听器块中进行调整。 - neokyle

2

您可以使用Transit后端加密文件并将其存储在外部,而不是使用Vault实际存储文件。

这样,您就可以将文件存储在通常存储它们的任何位置,并获得Vault的秘密管理功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接