存储和检索hashicorp保险库中的文件

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

我无法弄清楚如何在hashicorp保险库中存储文件。我们用于PoC的用例是在特定路径上存储SSL证书,然后通过HTTP API下载它。

我尝试使用kv秘密引擎,这似乎是最合适的。

hashicorp-vault
2个回答
1
投票

您似乎可以指定一个包含数据的文件,以存储为HashiCorp保险库中的密钥值。

您可以使用

vault write <path> -value=@filefile的内容写入路径中指定的密钥。

因此,如果你想存储crt的内容,你可以这样做:

vault write secret/ssl-certs/prod-1 [email protected]

要记住的一件事是,您不是保存文件而是保存文件的内容。


0
投票

所以Vault的默认产品没有这个,但是有一个桌面GUI程序以用户友好的方式添加这个功能。 https://github.com/adobe/cryptr 使用它时我确实遇到了一些困惑: 如果您有KVv2,则HC Web UI和Cryptr Desktop GUI将使用不同的约定。 编写Vault策略时,您将使用/ KVv2 / data / path / 使用Cryptr时你会使用/ KVv2 / data / path / 使用HC WebUI时,你会使用/ kvv2 / path /

事实:您可以使用base64编码在任何KV存储中存储原始二进制文件。 因此,您也可以使用该技术存储在Hashicorp Vault中。 因此,base64编码是一个可逆函数,允许您获取任何二进制文件,将其转换为1行字符串,然后获取生成的1行字符串并将其转换回任何二进制文件。由于您可以在任何KV商店中存储1行字符串,因此您可以在任何KV商店中存储任意二进制文件! :)(*)

这里有一些代码可以满足您的要求:

CMD:\> vault server -dev
WindowsSubsystemForLinuxBash:/mnt/c# curl -L https://releases.hashicorp.com/vault/1.0.2/vault_1.0.2_linux_amd64.zip > vault.zip
Bash# apt-get update
Bash# apt-get install unzip
Bash# unzip vault.zip -d /bin
Bash# chmod +x /bin/vault
Bash# export VAULT_ADDR=http://127.0.0.1:8200
Bash# vault login s.aO8ustaAV4Ot1OxzBe94vi3J
Bash# cat excelfile.xlsx | md5sum
fb6b4eaa2be1c8c410645a5f0819539e  -
Bash# cat excelfile.xlsx | base64 | base64 --decode > x.xlsx
Bash# cat x.xlsx | md5sum
fb6b4eaa2be1c8c410645a5f0819539e  -
Bash:/mnt/c# cat excelfile.xlsx | base64 | vault kv put secret/excelfile.xlsx base64dfile=-
(=- means assign value from standard in, which in this case is the piped output of the cat file command)
Chrome: localhost:8200
(login with dev root token, and you'll see the value is characters in a 1 line string)
Bash# rm excelfile.xlsx
Bash# vault kv get -field=base64dfile secret/excelfile.xlsx | tr -d '\n' | base64 --decode > excelfile.xlsx
(or)
Bash# vault kv get -field=base64dfile secret/excelfile.xlsx | sed 's/\r//' | base64 --decode > excelfile.xlsx
Bash# cat excelfile.xlsx | md5sum
fb6b4eaa2be1c8c410645a5f0819539e  -

(*注意Vault和其他KV存储通常具有文件大小限制,带有Consul后端的Vault将具有约375kb的秘密文件大小限制,因为base64编码将文件大小膨胀4 / 3rds,使大小达到500kb并且Consul有一个键值对限制为0.5mb ish。) (注意透视,因为证书文件的空间足够大~8KB /如果它大于375kb,它可能不是秘密。) 让我们说你需要存储更大的秘密: (如Kubernetes etcd快照) 由于Vault是1.0,因此内置了迁移存储后端的功能,因此您可以从“Consul存储后端”切换到“使用Consul的AWS S3存储的混合存储后端”(在多服务器设置中,HA仍然需要HA一致性锁定) “有一个更大的限制。选择一个不同的存储后端会给你一个更大的KV大小限制。注意Vault可能会施加一个合理的限制,如10mb。因为即使你有一个支持1TB键值大小的Vault后端,你肯定会想要在存储库中存储大文件时要三思而后行,因为base64进程会增加计算开销,并使文件膨胀4 / 3rds,因此一旦30064文件占用400mb的空间,一旦base64'd。(据说它可以使因为为了保持一致性,一致性有利于自动化和可维护性以及计算/存储资源。) 如果我需要支持大秘密,我就是如何使用Vault的: 我写了一个包装python脚本来获取和获取保险库的秘密,我有3个场景,2个保留关键字,以及以下命名约定/逻辑:

  1. 对于> 375kb的秘密 secret / filename bigfile:包含对称加密密钥的json,以及存储在用于存储大文件的点的加密文件的位置。 包装器脚本将“bigfile”识别为保留关键字,并执行逻辑以解析json,从文件存储区下载加密文件(Torrent / TFP服务器/ CephFS路径/ Azure Blob / AWS S3 / GCP云存储),并解密文件对我来说,我目前的背景。
  2. 对于秘密二进制文件<375kb secret / filename base64dfile:1行字符串,表示二进制文件的base64编码版本 包装器脚本将“base64dfile”识别为保留关键字,并执行逻辑以unbase64并在获取时转换为文件。
  3. 对于文本文件(带有秘密的.json,带有秘密的.yamls,.pem证书等)<375 secret / filename filename:允许使用filecontents作为多行字符串
© www.soinside.com 2019 - 2024. All rights reserved.