我不知道如何在hashicorp保管库中存储文件。 PoC的用例是将SSL证书存储在特定路径,然后通过HTTP API下载。
我尝试使用似乎最合适的kv secrets引擎。
答案 0 :(得分:2)
在库中加载kv对时,您还可以使用带有密钥之一作为证书的json文件进行加载。 以下是在https://www.digicert.com/order/sample-csr.php
生成的示例证书-----BEGIN CERTIFICATE REQUEST-----
MIICvDCCAaQCAQAwdzELMAkGA1UEBhMCVVMxDTALBgNVBAgMBFV0YWgxDzANBgNV
BAcMBkxpbmRvbjEWMBQGA1UECgwNRGlnaUNlcnQgSW5jLjERMA8GA1UECwwIRGln
aUNlcnQxHTAbBgNVBAMMFGV4YW1wbGUuZGlnaWNlcnQuY29tMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8+To7d+2kPWeBv/orU3LVbJwDrSQbeKamCmo
wp5bqDxIwV20zqRb7APUOKYoVEFFOEQs6T6gImnIolhbiH6m4zgZ/CPvWBOkZc+c
1Po2EmvBz+AD5sBdT5kzGQA6NbWyZGldxRthNLOs1efOhdnWFuhI162qmcflgpiI
WDuwq4C9f+YkeJhNn9dF5+owm8cOQmDrV8NNdiTqin8q3qYAHHJRW28glJUCZkTZ
wIaSR6crBQ8TbYNE0dc+Caa3DOIkz1EOsHWzTx+n0zKfqcbgXi4DJx+C1bjptYPR
BPZL8DAeWuA8ebudVT44yEp82G96/Ggcf7F33xMxe0yc+Xa6owIDAQABoAAwDQYJ
KoZIhvcNAQEFBQADggEBAB0kcrFccSmFDmxox0Ne01UIqSsDqHgL+XmHTXJwre6D
hJSZwbvEtOK0G3+dr4Fs11WuUNt5qcLsx5a8uk4G6AKHMzuhLsJ7XZjgmQXGECpY
Q4mC3yT3ZoCGpIXbw+iP3lmEEXgaQL0Tx5LFl/okKbKYwIqNiyKWOMj7ZR/wxWg/
ZDGRs55xuoeLDJ/ZRFf9bI+IaCUd1YrfYcHIl3G87Av+r49YVwqRDT0VDV7uLgqn
29XI1PpVUNCPQGn9p/eX6Qo7vpDaPybRtA2R7XLKjQaF9oXWeCUqy1hvJac9QFO2
97Ob1alpHPoZ7mWiEuJwjBPii6a9M9G30nUo39lBi1w=
-----END CERTIFICATE REQUEST-----
为了存储上述证书并将其保存为json文件中的键值对,必须用\ n替换换行符以将其保存为单个连续字符串 以下是json文件的内容(将相同的证书保存为value) vault_certfile_kv_stackoverflow.json
{
"sample.ssl.public.cert":"-----BEGIN CERTIFICATE REQUEST-----\nMIICvDCCAaQCAQAwdzELMAkGA1UEBhMCVVMxDTALBgNVBAgMBFV0YWgxDzANBgNV\nBAcMBkxpbmRvbjEWMBQGA1UECgwNRGlnaUNlcnQgSW5jLjERMA8GA1UECwwIRGln\naUNlcnQxHTAbBgNVBAMMFGV4YW1wbGUuZGlnaWNlcnQuY29tMIIBIjANBgkqhkiG\n9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8+To7d+2kPWeBv/orU3LVbJwDrSQbeKamCmo\nwp5bqDxIwV20zqRb7APUOKYoVEFFOEQs6T6gImnIolhbiH6m4zgZ/CPvWBOkZc+c\n1Po2EmvBz+AD5sBdT5kzGQA6NbWyZGldxRthNLOs1efOhdnWFuhI162qmcflgpiI\nWDuwq4C9f+YkeJhNn9dF5+owm8cOQmDrV8NNdiTqin8q3qYAHHJRW28glJUCZkTZ\nwIaSR6crBQ8TbYNE0dc+Caa3DOIkz1EOsHWzTx+n0zKfqcbgXi4DJx+C1bjptYPR\nBPZL8DAeWuA8ebudVT44yEp82G96/Ggcf7F33xMxe0yc+Xa6owIDAQABoAAwDQYJ\nKoZIhvcNAQEFBQADggEBAB0kcrFccSmFDmxox0Ne01UIqSsDqHgL+XmHTXJwre6D\nhJSZwbvEtOK0G3+dr4Fs11WuUNt5qcLsx5a8uk4G6AKHMzuhLsJ7XZjgmQXGECpY\nQ4mC3yT3ZoCGpIXbw+iP3lmEEXgaQL0Tx5LFl/okKbKYwIqNiyKWOMj7ZR/wxWg/\nZDGRs55xuoeLDJ/ZRFf9bI+IaCUd1YrfYcHIl3G87Av+r49YVwqRDT0VDV7uLgqn\n29XI1PpVUNCPQGn9p/eX6Qo7vpDaPybRtA2R7XLKjQaF9oXWeCUqy1hvJac9QFO2\n97Ob1alpHPoZ7mWiEuJwjBPii6a9M9G30nUo39lBi1w=\n-----END CERTIFICATE REQUEST-----"
}
最后是如何上传此json文件
vault write --address=https://<vaultdomain> secret/<path> @vault_certfile_kv_stackoverflow.json
答案 1 :(得分:1)
似乎您可以指定一个包含数据的文件,以将其存储为HashiCorp库中密钥的值。
您可以使用
vault write <path> -value=@file
将file
的内容写入路径中指定的键。
因此,如果要存储crt
的内容,可以执行以下操作:
vault write secret/ssl-certs/prod-1 -value=@ssl-cert.crt
要记住的一件事是,您保存的不是文件,而是文件的内容。
答案 2 :(得分:0)
因此Vault的默认产品未包含此功能,但是有一个Desktop GUI程序以用户友好的方式添加了此功能。
https://github.com/adobe/cryptr
使用它时,我确实有些困惑:
如果您有KVv2,则HC Web UI和Cryptr Desktop GUI将使用不同的约定。
编写保险柜策略时,您可以使用/ 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 -
(*请注意,保管箱和其他KV商店经常有文件大小限制,具有Consul后端的保管库的秘密文件大小限制约为375kb,因为base64编码会使文件大小膨胀4 / 3rds,大小上限为500kb,Consul的键值对限制为0.5mb ish。)
(请注意,证书文件有足够的空间,大约为8KB /如果大于375kb,则可能不是秘密。)
让我们一路走来,您需要存储更大的秘密:
(例如Kubernetes etcd快照)
自Vault版本1.0以来,内置的功能可以迁移您的存储后端,因此您可以从“ Consul存储后端”切换到“带有Consul的AWS S3存储的混合存储后端”(仍需要Consuls来锁定HA一致性多服务器设置)”来设置一个更大的限制。选择一个不同的存储后端将给您一个更大的KV大小限制。请注意,保管箱可能会施加一个合理的限制,例如10mb。因为即使您的保管库后端支持1TB键值大小,您肯定要对在Vault中存储大文件进行三思,因为base64进程会增加计算开销,并且会使文件膨胀4 / 3rds,因此,一次300mb的文件将在base64之后占用400mb的空间。表示可以这样做,因为出于一致性的考虑,一致性有利于自动化和可维护性以及计算/存储资源。)
如果我需要支持大型机密,请按以下方式使用保险柜:
我将编写一个包装器python脚本以从Vault中获取和获取秘密,并且我将具有3个方案,2个保留关键字和以下命名约定/逻辑: