Hashicorp Vault用于文件存储?

问题描述 投票:4回答:2

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

有没有人用大秘密对Vault进行任何基准测试?我假设我不会遇到保险库中的秘密数量问题?

file-management app-secret hashicorp-vault secret-manager
2个回答
1
投票

性能完全取决于您使用的存储后端。如果您使用精细粒度访问控制的秘密回购,那么您可能不需要HA,因此文件存储后端会很好,您可以使用SSD来获得良好的性能。

我建议不要使用Transit后端来加密和存储文件,原因如下:

1.)如果您只使用KV,从1个存储后端迁移到另一个(如文件存储到HA后端)相对容易/直接,当您使用Vault的高级功能时,并不总是容易/可能。 (后端之间的BTW迁移是我在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

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

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

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


1
投票

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

这样您就可以将文件存储在通常存储的位置,同时可以访问Vault的秘密管理功能。

© www.soinside.com 2019 - 2024. All rights reserved.