使用HashiCorp保管库的凭证存储

  • 以纯文本格式存储和传输的凭据
  • 证书一旦颁发或手动续签,几乎几乎不会续签
  • 没有PKI证书管理
  • API密钥是手工生成的,永远不会更新
  • 没有SSH密钥存储
  • 没有审核控制
  • 无杀死开关
  • 缺乏用于秘密部署的自动化
  • 还有很多 …

在Cloud Native分布式基础架构中管理凭据的解决方案是什么?

按预算进行安全的凭据管理


保管箱功能:

  • 安全秘密存储
  • 动态秘密(秘密即服务)
  • 数据加密
  • 租赁和续订(密钥轮换)
  • 吊销
  • 审计控制
  • 与各种数据库和工具集成
  • 自定义插件
  • 还有更多可用功能……

安全的秘密存储

  • 基本凭证
  • 令牌,TOTP
  • PKI证书管理(很容易成为您自己的证书颁发机构)
  • LDAP
  • SSH密钥:
  • —处理整个组织的SSH登录。
  • —一次SSH访问
  • —它提高了事件响应过程中审核日志的有用性

动态秘密

  • AWS
  • 卡桑德拉
  • 领事
  • 哈娜
  • 玛丽亚数据库
  • MongoDB
  • 微软SQL
  • 的MySQL
  • 甲骨文
  • PKI证书
  • PostgreSQL的
  • 兔子MQ
  • SSH传输
  • 自定义…

为什么要动态机密?

动态密码有很多好处:

  • 无需写下,存储或共享密码
  • 启用寿命很短的密码,如果遭到破坏,则可以减少暴露
  • 对于分布式应用程序,每个实例都获得唯一的凭据
  • 不断更改和过期的用户名/密码更难于暴力破解
  • 自动密码轮换/过期
  • 更好的审计追踪

收益:

  • 特权任务自动化
  • DevOps(支持容器)
  • IaaS / PaaS和虚拟化环境
  • 特权使用分析
  • 云交付的PAM解决方案
  • 系统和特权帐户发现
  • 特权身份治理和管理

建议部署:

随意使用下面的Docker Swarm示例开始您的旅程。 请注意,它尚未准备好投入生产。 请遵循Vaultproject.io提供的生产强化指南以及您的组织或个人要求。

生产应至少使用具有两个领事代理的三个节点的领事服务器群集。 至少一个主动和被动被动保管库实例。 区域复制也应始终作为考虑因素。

保管箱支持存储后端:

  • 蔚蓝
  • 蟑螂数据库
  • 领事(强烈建议获取HA,服务注册发现等)
  • DynamoDB
  • 文件系统
  • 基础数据库
  • 谷歌云存储
  • Google Cloud Spanner
  • 在记忆中
  • 曼塔
  • 的MySQL
  • PostgreSQL的
  • 卡桑德拉
  • S3
  • 迅速
  • 动物园管理员

您可以对Vault和Consul使用JSON或HCL(HashiCorp配置语言)。

部署

  docker-compose up -d 

去掉

 码头工人组成 

保管库配置样本:

  { 
“ ui”:是的,
“后端”:{
“领事”:{
“ address”:“ http:// consulserver:8500”,
“路径”:“金库/”
}
},
“ default_lease_ttl”:“ 168h”,
“ max_lease_ttl”:“ 720h”,
“ plugin_directory”:“ / vault / plugins”,
“侦听器”:{
“ tcp”:{
“ address”:“ 0.0.0.0:8200”,
“ tls_disable”:是
}
},
“ disable_mlock”:是
}

领事服务器配置:

  { 
“ bootstrap”:是的,
“服务器”:是的,
“数据中心”:“ us-east-1”,
“ data_dir”:“ / consul / data”,
“ client_addr”:“ 0.0.0.0”,
“ bind_addr”:“ {{GetInterfaceIP \” eth0 \“}}”,
“ advertise_addr”:“ {{GetInterfaceIP \” eth0 \“}}”,
“ bootstrap_expect”:1
“ ui”:是的,
“ leave_on_terminate”:是的,
“ skip_leave_on_interrupt”:是的,
“ disable_update_check”:是的,
“地址”:{
“ http”:“ 0.0.0.0”
},
“端口”:{
“ http”:8500
},
“ log_level”:“ DEBUG”,
“ acl_enforce_version_8”:否,
“ acl_datacenter”:“ us-east-1”,
“ acl_master_token”:“ w94RIMKUtQH1a4VJGN + t + vn1Y0nErc / ch93E1F1ZcHU =”,
“ acl_default_policy”:“允许”,
“连接”:{
“已启用”:true
},
“ dns_config”:{
“ allow_stale”:false
},
“自动驾驶仪”:{
“ cleanup_dead_servers”:是
},
“ retry_join”:[
“ tasks.consulserver”
]
}

领事代理配置:

  { 
“服务器”:false,
“数据中心”:“ us-east-1”,
“ data_dir”:“ / consul / data”,
“ client_addr”:“ 0.0.0.0”,
“ bind_addr”:“ {{GetInterfaceIP \” eth0 \“}}”,
“ advertise_addr”:“ {{GetInterfaceIP \” eth0 \“}}”,
“ ui”:错误,
“ leave_on_terminate”:是的,
“ skip_leave_on_interrupt”:否,
“ disable_update_check”:是的,
“地址”:{
“ http”:“ 0.0.0.0”
},
“端口”:{
“ http”:8500
},
“ log_level”:“ DEBUG”,
“ acl_enforce_version_8”:否,
“ acl_datacenter”:“ us-east-1”,
“ acl_master_token”:“ w94RIMKUtQH1a4VJGN + t + vn1Y0nErc / ch93E1F1ZcHU =”,
“ acl_default_policy”:“允许”,
“连接”:{
“ enabled”:是
},
“ dns_config”:{
“ allow_stale”:false
},
“ retry_join”:[
“ tasks.consulserver”
]
}

部署堆栈

  env $(cat .env | grep ^ [AZ] | xargs)docker stack deploy -c stack.yml devops 

删除堆栈

  docker stack rm devops 

列出Docker服务

 码头工人服务ls 

访问保险柜用户界面

 打开http:// localhost:8200 

Vault UI在0.10之前的版本中是一项巨大的企业功能。 战略性地在OpenSource中提供了该功能。 上面的屏幕截图显示了在初始部署后将看到的第一件事。 密钥共享基本上是您想要多少个密钥,而阈值是需要输入多少个密钥才能解开保管库。 建议至少使用5个Key Share和2个Key Threshold,以提高安全性。 另外,请确保将内容安全地下载到某处。 它还提供了根身份验证令牌。

保险柜具有密封开封的基础 。 自动解封功能当前仅在企业版中可用。 如果您的资源被盗用,这也被视为您的“杀手开关”,然后密封您的保险库,一切将受到限制。

当前可以使用不同的ACL令牌和该令牌的策略来实现多租户。 Vault Enterprise将于2018年8月底发布名为Namespace的功能。这是真正的多租户的理想选择。

访问领事UI

 打开http:// localhost:8500 

使用CLI将静态凭据写入Vault:

 保管库写入密钥/静态密码/用户名my-value = N7OVkOH6yQGfkGciySsek9knZfSzKjHUtQfdzd4s44 

使用CLI通过键名从Vault中读取静态凭证:

 保管库读取密码/静态密码/用户名 

首先使用以下命令启用数据库秘密引擎:

 保管库秘密启用数据库 

在MongoDB中为Vault创建用户,以使用以下查询生成动态凭据( 请勿使用常见的用户名/密码 ):

  db.createUser({user:'user',pwd:'pass',角色:[{角色:“ userAdminAnyDatabase”,db:“ admin”}]})); 

现在,在Vault中为给定的MongoDB设置查询,并允许角色使用mongodv-database-plugin使用以下命令来生成凭据:

 保管库写入数据库/ config / my-mongodb-database \ 
plugin_name = mongodb-database-plugin \
allowed_roles =“ my-role” \
connection_url =“ mongodb:// user:pass @ mongo / admin?ssl = false”

最后,使用User Creation和Permission语句设置Role:

 保险库写入数据库/角色/ my-role \ 
db_name = my-mongodb-database \
creation_statements ='{“ db”:“ admin”,“ roles”:[{“ role”:“ readWrite”},{“ role”:“ read”,“ db”:“ foo”}]}''\
default_ttl =“ 1h” \
max_ttl =“ 24h”

建议使用角色,以便您可以配置特定的策略。 现在,您可以从服务中即时向保险柜查询新的Mongo凭据:

 保管库读取数据库/信条/我的角色 


  • 领事模板
  • Envconsul
  • HashiCorp Vault Jenkins插件
  • 本机客户端库
  • 与Ansible,Chef,Puppet,Salt等集成
  • 第三方工具


maxyermayank /保险库示例

保管库示例–保管库领事群集

github.com

DHUG-VAULT-TALK

丹佛HashiCorp用户组保管箱谈话

maxyermayank.github.io

特长/真棒库工具

awesome-vault-tools –关于HashiCorp Vault的出色工具

github.com

HashiCorp的保险柜

保管箱可保护,存储和严格控制对令牌,密码,证书,API密钥以及其他机密信息的访问。

www.vaultproject.io

hashicorp /领事模板

consul-template – @HashiCorp Consul和Vault数据的模板呈现,通知程序和主管。

github.com


希望这篇文章对您有所帮助。 如果您喜欢这篇文章,请别忘了鼓掌👏! 我很想知道您的想法,并希望您对此主题的想法。 您也可以在MediumGitHubTwitter上关注我以获取更多更新。

如果需要为您的组织制定计划,我也可以提供咨询。