从hashicorp保险库服务器部署证书的系统

vault-certificate-deplo的Python项目详细描述


保险库证书部署

从Hashicorp的保管库机密服务器部署SSL证书 脚本能够部署来自金库的kv存储的证书。

由于使用auth方法Approle,您需要角色和机密id 从不同的系统/位置部署到服务器。更多 关于这个在用例部分。

乍一看,可能有点奇怪 配置文件和cli选项。你可以把它们组合成不同的 支持各种类型的部署以满足 安全概念。

为什么我需要保险库服务器?

我们对几乎所有的ssl/tls证书都使用了let-s-encrypt。 我们还有复杂的基础设施,所以我们必须检索 证书在中心位置,然后我们将它们分发到 数据中心、云或任何其他应用程序。

如何部署工作?

它将证书部署到指定目录并创建 两个目录certsprivate

  • 证书具有模式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时,请始终设置正确的权限(例如04000600
  • 在保险库中,将策略设置为只允许使用read功能,就足够了
  • 为了获得最高的安全性,请为每台服务器设置单独的许可,并为每台服务器和证书设置单独的策略

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在JSP中添加自定义隐式对象   java MasterMindResource泄漏?   不同的c#java结果加密   java为什么安卓 studio显示“constraintlayout中缺少约束”错误?   java Make Logback将日志打印到文件中   java如何在Google应用程序引擎中设置日期时间?   jeditorpane如何阻止java HTMLEditorKit自动关闭我的标记   返回到Activity onCreate()时,不会调用java函数   java为什么我在这个对象上得到一个NullPointerException?   在java中,如何使用包含数组的参数调用图形方法?   java如何在Play framework 2应用程序中存储Akka参与者列表?   ssh使用java将文件从一个solaris 9复制到另一个solaris 9   网络Java服务器正在等待客户端响应   java Spring mvc从formBackingObject()重定向到页面   java Spark:JavaRDD<Tuple2>到javapairdd<>   java如何动态调用基类中由字符串值指定的子类方法?