从hashicorp保险库服务器部署证书的系统
vault-certificate-deplo的Python项目详细描述
保险库证书部署
从Hashicorp的保管库机密服务器部署SSL证书 脚本能够部署来自金库的kv存储的证书。
由于使用auth方法Approle,您需要角色和机密id 从不同的系统/位置部署到服务器。更多 关于这个在用例部分。
乍一看,可能有点奇怪 配置文件和cli选项。你可以把它们组合成不同的 支持各种类型的部署以满足 安全概念。
为什么我需要保险库服务器?
我们对几乎所有的ssl/tls证书都使用了let-s-encrypt。 我们还有复杂的基础设施,所以我们必须检索 证书在中心位置,然后我们将它们分发到 数据中心、云或任何其他应用程序。
如何部署工作?
它将证书部署到指定目录并创建
两个目录certs
和private
。
- 证书具有模式0644
- 私钥具有模式0640
- 它部署来自保险库的所有机密内容,密钥作为具有适当扩展名的文件<;secretname>;<;secretkey>;
安装
python pypi
pip install vault-cert-deploy
手动
手动安装
git clone https://github.com/rvojcik/vault-certificate-deploy
cd vault-certificate-deploy
sudo python ./setup.py install
最后
vault-cert-deploy --help
示例配置
可在config.example
中找到。
可以从脚本参数传递角色和机密ID。
您可以组合-n
和--cert-list
参数。
在配置的vault
部分中,可以
在保险库中设置秘密的mount_point
。
默认情况下是cert
。
您还可以在参数中更改此选项
保险库配置
脚本使用Approle身份验证。
如果未启用approle auth,请首先启用它
vault auth enable approle
您必须先创建策略。 在策略周围使用保险库documentation,然后在此处继续。
具有基本介质安全性的示例策略可以是
# Cert Deploy Policy
# Give ability to
# - read all certificates
# - don't permit list certificates
#
path "/certs/*" {
capabilities = ["read"]
}
配置您的角色
vault write auth/approle/role/my-role \
secret_id_ttl=0 \
token_num_uses=0 \
token_ttl=20m \
token_max_ttl=30m \
policies="my-policy,default"
检索您的认可ID
vault read auth/approle/role/my-role/role-id
获取机密ID(一次性操作)
vault write -f auth/approle/role/my-role/secret-id
用例
重要的是不要将角色ID和机密ID放在一起 在一个存储库或配置管理中。
木偶
我使用创建文件/etc/vault_role_id
的安装程序部署服务器
包含role-id
的方法。
然后我使用puppet配置管理来部署这个系统
所有文件和配置文件(/etc/vault-deploy/config.conf
)中的secret-id
。
puppet还创建带有证书/机密名称的文件/etc/ssl-deploy-certs.conf
然后您可以这样运行deploy:
vault-certificate-deploy.py -c /etc/vault-deploy/config.conf \
--cert-list /etc/ssl-deploy-certs.conf \
--role-id $(cat /etc/vault_role_id)
为什么?
我将puppet配置存储在git中,因此没有
角色ID和机密ID在我的存储库中。
我选择使用puppet部署secret-id
,因为需要时
rotate secret id它由puppet自动部署到基础设施。
安全最佳实践
- 切勿将角色ID和机密ID一起存储在存储库中
- 以方便快速旋转/更改的方式部署机密ID
- 在生产中始终使用
verify_tls=yes
- 在文件/配置中部署机密ID和角色ID时,请始终设置正确的权限(例如
0400
,0600
) - 在保险库中,将策略设置为只允许使用
read
功能,就足够了 - 为了获得最高的安全性,请为每台服务器设置单独的许可,并为每台服务器和证书设置单独的策略