是篇学什么 HashiCorp Vault 是一个用于管理密码
、密钥和证书等秘密的篇学系统,同时还可提供有身份认证和授权保护的篇学加密服务
。利用 Vault 提供的篇学UI
、CLI或HTTP API,篇学可以在严格的篇学控制和审计下安全地存储和管理敏感数据。 在现代系统中
,篇学需要诸如数据库访问凭证、篇学外部API访问密钥、篇学服务间调用凭证等多种大量秘密信息
,篇学这些信息分散存储在纯文本
、建站模板篇学配置文件、篇学源代码或其他位置。篇学如果没有专门的篇学解决方案,仅靠散落在各平台自身的篇学机制,很难弄清楚谁在访问哪些密钥
,很难做好安全存储、密钥轮换和安全审计等工作。 Vault 通过将所有这些凭据集中起来 ,在一个地方定义,减少了不必要的暴露 ,并提供了访问的安全性和审计的方便性 。云计算 Vault 主要通过与安全策略关联的令牌来控制客户端对秘密的访问。安全策略由一组描述路径及其操作可访问性的安全规则组成。令牌可以手动创建并授予客户端,也可以由客户端通过登录自行获取。
。 Vault 的核心工作流为: Vault 在对秘密数据持久存储之前会对其进行加密 ,因此其原始存储也是安全的模板下载。 Vault 可为 AWS、SQL 数据库等系统提供临时访问凭据,并在到期后作废 。 Vault 也可以根据安全团队定义的加密参数提供公共的数据的加密
、解密服务
,而不必存储加解密数据
。 Vault 使用租期管理存储其中的各种秘密,到期前没有被续租的秘密将废弃 。 Vault 允许主动废弃单个 、相关 、源码下载特定类型的秘密
,实现密钥轮换或锁定系统,以防范入侵。 Vault 共有开源版
、云托管版和企业版3种版本。 开源版需要自托管
,提供动态秘密管理、加密和数据保护等基本功能特性 ,需要通过社区获得支持 。 云托管版本,名为 HCP Vault(HashiCorp Cloud Platform Vault),与自托管 Vault 具有相同的二进制文件,在保证一致用户体验的同时,源码库允许组织快速使用 Vault。 企业版需要自托管,比开源版多了扩展 、容灾等企业特性
,并由HashiCorp提供服务支持。 manager 来管理存储库。 utils manager 添加官方的 HashiCorp Linux 存储库。 # 安装 y install vault # 或者安装企业版 enterprise # 验证 复制# 查看启动帮助 help # 以开发模式启动,数据仍然加密,但保存在内存中,使用http侦听,仅用于快速体验 ,不能用于生产 dev # 记录日志中输出的VAULT_ADDR、Unseal Key、免费模板Root Token # 在一个新终端中进行如下操作 # 留存Unseal Key到某个地方 # 根据server启动日志中的信息设置环境变量VAULT_ADDR,表示server的访问地址 # 根据server启动日志中的信息设置环境变量VAULT_TOKEN,表示root访问令牌 # 查看服务状态 复制# 查看处理键值对的命令帮助 help # 查看put键值对命令帮助 help # 创建一个名为hell
、包含foo 、excited两个Key的键值对secret。 # 每针对同名secret put一次
,其元数据中的version就会递增 yes # 读取名为hello的键值对secret ,响应中会显示其元数据和键值数据 secret hello # 读取kv中excited键的值 excited hello # 以json格式输出,并使用jq命令提取excited这个key的数据 # 删除名为hello的键值对secret secret hello # 恢复无意删除的名为hello的secret到第2个版本 秘密引擎是 Vault 用于储存 、生成和加解密的插件化的组件
,键值只是其中一种,其它存储引擎还有数据库、Transit(加解密服务引擎)、SSH、Time-baseed OTP
、AWS 、Consul等,也可以自定义 。 复制# 秘密引擎需要启用后才能使用。 # 同一种存储引擎可以在不同的路径(path)上启用。 # 开发模式预设启用了键值引擎。 vault secrets enable -path=kv kv # 启用秘密引擎的路径默认为秘密引擎的名称 vault secrets enable kv # 以下命令用于列出所有秘密引擎 vault secrets list # 以下命令使用 path/秘密名称 的形式设置名为hello的键值数据 vault kv put kv/hello target=world # 以下命令可禁用路径为kv下的秘密引擎,并删除关联的秘密和配置 Vault使用HCL文件进行配置,首先创建一个HCL配置文件,可以命名为config.hcl 。 storage 指示后端存储方式,raft 是一种适合生产模式的后端存储。 listener 用于配置侦听 API 请求的地址 ,生产环境应启用 TLS 。 api_addr 用于备用服务器向主服务器重定向客户端的地址。 cluster_addr 为同一集群下各node互相通信的地址 ,用于备用服务器forward客户端请求到主服务器,必须使用TLS。 ui用于启用默认不启用的Web UI。 不支持内存锁定时,需要添加配置 :disable_mlock = true 启动一个新的终端,并执行如下命令以初始化服务器
。 复制# 设置服务API地址 # 初始化服务 初始化过程会输出5个解封密钥和1个root初始Token
,需要安全的分发密钥,避免一个人持有所有密钥 ,以便当Vault密封时,至少需要3个密钥才能解封 。 Vault在初始化后 ,以及每次重启后,都需要解封才能读取秘密数据 。需要在不同的计算机上,分别执行如下命令,并各提供一个不同的密钥,才能完成解封。 使用初始化后获得的Root令牌登录Vault服务。 任一运维人员可通过执行 vault operator seal 命令再次密封Vault,可以通过执行 pgrep -f vault | xargs kill 命令终止 Vault 进程,通过执行 rm -r ./vault/data 命令清除 Vault 数据 。 使用Transit引擎进行加解密 以下演示使用Vault Transit引擎进行数据加解密(不存储)的过程
,涉及管理员和客户端两个角色。 以开发模式及root token启动 Vault # 注
:生产环境中,应使用具有某些安全策略的其它Token执行本任务 id root 使用环境变量声明Vault服务的地址 ,方便后续操作 $VAULT_ADDR 使用环境变量声明要使用的令牌,方便后续操作 root 启用transit引擎 vault secrets enable transit 启用名为orders的加密环 orders orders的安全策略 EOF EOF orders安全策略创建一个令牌 orders # (客户端)使用环境变量存储管理员分配的令牌 # (客户端)对明文base64编码后
,再调用Vault服务进行加密 orders \ # (客户端)调用Vault服务对密文进行解密 orders \ # (客户端)对解密后的文本进行base64解码 # (管理员)执行如下命令进行密钥轮换 rotate v2 orders \ # (客户端)使用新密钥包装旧密文 。Vault会自行先解密再用新密钥加密。 orders \ # (管理员)启用密钥的24小时自动轮换 config \ h 查看密钥信息 ,其中 auto_rotate_period 为轮换设置,默认值0s表示禁用
。 orders 设置最小可解密密钥版本,默认从1开始所有版本的密钥均可以解密 config \ # (管理员)导出密钥(包括明文和密文),密文可以保存到Vault的键值引擎
, # 用于在Vault外对大文件进行加解密 orders # (管理员)导入一个已有的外部密钥 以下演示使用Vault的数据库引擎来管理数据库访问凭证,涉及管理员和应用程序两个角色。 复制# 首先做一些准备工作,本例中使用docker方式启动一个postgres数据库实例 # 拉取postgres的docker镜像 latest # 启动 postgres 容器 docker run \ root \ rootpassword \ \ postgres postgres的容器中执行psql命令
, # 来创建一个名为 ro 的角色,用于完成示例 i \ postgres \ # 为 ro 角色授予一些权限 i \ postgres \ # (管理员)以dev模式启动一个Vault服务
,方便演示 id root # (管理员)设置环境变量,方便后续操作 root # (管理员)在Vault中启用数据库引擎 vault secrets enable database plugin,包括连接信息 分割的多个实例,插件将依次尝试连接 postgresql \ plugin \ \ readonly \ \ # (管理员)创建一个可在postgres中建立角色的sql模板 EOF EOF # (管理员)创建名为readonly的数据库角色
,创建语句将使用上面的sql模板 readonly \ postgresql \ \ h \ h 从Vault获取一个只读角色 # 返回结果中包括username
、password,以及租约id和租期等信息 readonly # 可使用如下命令验证获得的角色是否存在 i \ postgres \ # (管理员)列出所有租约 readonly #(管理员)使用环境变量保存第一份租约的id # (管理员)续约 $LEASE_ID # (管理员)在租约到期前主动撤销 $LEASE_ID # (管理员)按照前缀撤销所有符合条件的租约 Vault还提供数据库用户名模板、密码策略等功能
。

快速体验
安装 复制# 安装 yum-config- 引擎
生产模式安装
建立配置文件使用数据库引擎获得动态凭证