是什么
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提供服务支持。
快速体验
安装
# 安装 yumconfigmanager 来管理存储库。sudo yum Install y yumutils# 使用 yumconfigmanager 添加官方的 HashiCorp Linux 存储库。sudo yumconfigmanager # 安装sudo yum y install vault# 或者安装企业版sudo yum y install vaultenterprise # 验证vault
启动
# 查看启动帮助vault server help# 以开发模式启动,数据仍然加密,但保存在内存中,使用http侦听,仅用于快速体验,不能用于生产vault server dev# 记录日志中输出的VAULT_ADDR、Unseal Key、Root Token# 在一个新终端中进行如下操作# 留存Unseal Key到某个地方echo unseal# 根据server启动日志中的信息设置环境变量VAULT_ADDR,表示server的访问地址export VAULT_ADDR# 根据server启动日志中的信息设置环境变量VAULT_TOKEN,表示root访问令牌export VAULT_TOKEN# 查看服务状态vault status
处理键值对secret
# 查看处理键值对的命令帮助vault kv help # 查看put键值对命令帮助vault kv put help# 创建一个名为hell、包含foo、excited两个Key的键值对secret。# 每针对同名secret put一次,其元数据中的version就会递增vault kv put mountsecret hello fooworld excitedyes# 读取名为hello的键值对secret,响应中会显示其元数据和键值数据vault kv get mountsecret hello# 读取kv中excited键的值vault kv get mountsecret fieldexcited hello# 以json格式输出,并使用jq命令提取excited这个key的数据vault kv get mountsecret formatjson hello jq r # 删除名为hello的键值对secretvault kv mountsecret hello# 恢复无意删除的名为hello的secret到第2个版本vault kv undelete mountsecret versions hello
引擎
秘密引擎是 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 secrets disable kv/
生产模式安装
建立配置文件
Vault使用HCL文件进行配置,首先创建一个HCL配置文件,可以命名为config.hcl。
storage pathnode_id listener addresscluster_address tls_cert_file tls_key_fileapi_addr cluster_addr ui
storage 指示后端存储方式,raft 是一种适合生产模式的后端存储。
listener 用于配置侦听 API 请求的地址,生产环境应启用 TLS 。
api_addr 用于备用 服务器 向主服务器重定向客户端的地址。
cluster_addr 为同一集群下各node互相通信的地址,用于备用服务器forward客户端请求到主服务器,必须使用TLS。
ui用于启用默认不启用的Web UI。
不支持内存锁定时,需要添加配置:disable_mlock = true
建立raft工作目录
mkdir p .vaultdata
启动服务器
vault server configconfig
初始化
启动一个新的终端,并执行如下命令以初始化服务器。
# 设置服务API地址export VAULT_ADDR# 初始化服务vault operator init
初始化过程会输出5个解封密钥和1个root初始Token,需要安全的分发密钥,避免一个人持有所有密钥,以便当Vault密封时,至少需要3个密钥才能解封。
解封
Vault在初始化后,以及每次重启后,都需要解封才能读取秘密数据。需要在不同的计算机上,分别执行如下命令,并各提供一个不同的密钥,才能完成解封。
vault operator unseal
登录
使用初始化后获得的Root令牌登录Vault服务。
vault login
其它运维命令
任一运维人员可通过执行命令再次密封Vault,可以通过执行命令终止 Vault 进程,通过执行命令清除 Vault 数据。
使用Transit引擎进行加解密
以下演示使用Vault Transit引擎进行数据加解密(不存储)的过程,涉及管理员和客户端两个角色。
# 管理员 以开发模式及root token启动 Vault# 注:生产环境中,应使用具有某些安全策略的其它Token执行本任务vault server dev devroottokenid root# 管理员 使用环境变量声明Vault服务的地址,方便后续操作export VAULT_ADDR$VAULT_ADDR# 管理员 使用环境变量声明要使用的令牌,方便后续操作export VAULT_TOKENroot# 管理员 启用transit引擎vault secrets enable transit# (管理员 启用名为orders的加密环vault write f transitkeysorders# (管理员 为客户端创建名为apporders的安全策略vault policy write apporders EOFpath capabilities path capabilities EOF# (管理员)为apporders安全策略创建一个令牌vault token policyapporders# (客户端)使用环境变量存储管理员分配的令牌export APP_ORDER_TOKEN# (客户端)对明文base64编码后,再调用Vault服务进行加密VAULT_TOKEN$APP_ORDER_TOKEN vault write transitencryptorders \plaintext$base64 # (客户端)调用Vault服务对密文进行解密VAULT_TOKEN$APP_ORDER_TOKEN vault write transitdecryptorders \ciphertext# (客户端)对解密后的文本进行base64解码base64 # (管理员)执行如下命令进行密钥轮换vault write f transitkeysordersrotate# (客户端)再次调用加密服务,此时密文开头会变为vaultv2vault write transitencryptorders \plaintext$base64 # (客户端)使用新密钥包装旧密文。Vault会自行先解密再用新密钥加密。vault write transitrewraporders \ciphertext# (管理员)启用密钥的24小时自动轮换vault write transitkeysordersconfig \auto_rotate_periodh# 管理员 查看密钥信息,其中 auto_rotate_period 为轮换设置,默认值0s表示禁用。vault read transitkeysorders# 管理员 设置最小可解密密钥版本,默认从1开始所有版本的密钥均可以解密vault write transitkeysordersconfig \min_decryption_version# (管理员)导出密钥(包括明文和密文),密文可以保存到Vault的键值引擎,#用于在Vault外对大文件进行加解密vault write f transitdatakeyplaintextorders# (管理员)导入一个已有的外部密钥vault read fieldpublic_key transitwrapping_key
使用数据库引擎获得动态凭证
以下演示使用Vault的数据库引擎来管理数据库访问凭证,涉及管理员和应用程序两个角色。
# 首先做一些准备工作,本例中使用docker方式启动一个postgres数据库实例# 拉取postgres的docker镜像docker pull postgreslatest# 启动 postgres 容器docker run \e POSTGRES_USERroot \e POSTGRES_PASSWORDrootpassword \p \postgres# 通过docker在名为learnpostgres的容器中执行psql命令,# 来创建一个名为 ro 的角色,用于完成示例docker exec i \learnpostgres \psql U root c # 为 ro 角色授予一些权限docker exec i \learnpostgres \psql U root c ## (管理员)以dev模式启动一个Vault服务,方便演示vault server dev devroottokenid root# (管理员)设置环境变量,方便后续操作export VAULT_ADDRhttpexport VAULT_TOKENrootexport POSTGRES_URL# (管理员)在Vault中启用数据库引擎vault secrets enable>-Databaseplugin,包括连接信息# connection_url支持以分割的多个实例,插件将依次尝试连接vault write>/configpostgresql \plugin_namepostgresqldatabaseplugin \connection_url \allowed_rolesreadonly \username \password# (管理员)创建一个可在postgres中建立角色的sql模板tee readonlyEOF ROLE WITH LOGIN PASSWORD VALID UNTIL INHERITGRANT ro TO EOF# (管理员)创建名为readonly的数据库角色,创建语句将使用上面的sql模板vault write>/rolesreadonly \db_namepostgresql \creation_statements@readonly \default_ttlh \max_ttlh# 应用程序 从Vault获取一个只读角色# 返回结果中包括username、password,以及租约id和租期等信息vault read>/credsreadonly# 可使用如下命令验证获得的角色是否存在docker exec i \learnpostgres \psql U root c # (管理员)列出所有租约vault list sysleaseslookupdatabasecredsreadonly#(管理员)使用环境变量保存第一份租约的idLEASE_ID$vault list formatjson sysleaseslookupdatabasecredsreadonly jq r # (管理员)续约vault lease renew>/credsreadonly$LEASE_ID# (管理员)在租约到期前主动撤销vault lease revoke>/credsreadonly$LEASE_ID# (管理员)按照前缀撤销所有符合条件的租约vault lease revoke prefix>/credsreadonly
Vault还提供数据库用户名模板、密码策略等功能。
linux系统如何才能学通呢?
没什么重点之类的,你上网需要网络配置需要安全配置 需要等等这些不就是重点吗?都是需要命令!linux就是命令加命令一句话 多练命令就学会了 我学的时候都学的脑袋疼了 全命令 还都是英文,多练再练 不连要不多长时间就会忘掉
做c语言开发,都要掌握些什么?
1.要非常了解微机原理,这是基础。2.编译原理,知道C语言是如何编译成汇编的.各种变量是如何分配,存放.函数调用是怎样回事.3.数据结构.数据结构直接反应了你解决现实问题的能力.暂时想不到更多,本人工作是用freescale的汇编和C混合编程.
如何进行系统地学习电脑知识呢?
学习电脑四个阶段 第一阶段:鼠标和键盘操作鼠标操作主要是:移动、拖动、单击、双击和右击。 掌握键盘操作可以通过打字练习来完成。 第二阶段:操作系统基础知识学习首先是Windows98学习。 找一本相关书或者相关学习光盘系统地学习一下。 并且一定要做到边学习边操作。 其次,学习一些基本地DOS命令,比如:dir、copy、md、del等等。 学习这些DOS命令时,最好把这些DOS命令功能和相应Windows98基本操作相连系,以便加深印象。 最后,我们知道WindowsXP越来越受到更多用户青睐。 之所以选择WindowsXP是因为WindowsXP在驱动程序方面优势。 如果你熟悉Windows98,那么可以说你已经掌握WindowsXP,只要你再上机操作操作就可以。 第三阶段:学习系统工具、简单应用软件最好系统学习一下Word。 当你掌握Word以后,那么在学习其他应用软件方面,你就有一种触类旁通感觉。 你就会发现应用软件有很多相同地方。 就拿Word和Excel来比较吧;他们窗口结构基本相同,都是由标题栏、菜单栏、工具栏、工作区和状态栏构成;它们有很多功能相同菜单命令和快捷工具等。 在打好以上基础以后,你在学习应用软件方面就会感到得心应手。 在此推荐一些应用软件类型:杀毒软件、解压软件、媒体播放软件、系统维护软件、文字处理软件、图象处理软件等。 第四阶段:学习并能熟练掌握一些与你工作有密切关系软件如果你是一名教师,那么应该学会如下软件:文字处理软件[如word]、表格处理软件[如Excel]、课件制作相关软件[如Powerpoint、Flash、Authorware]等。 如果你是一名美术工作者,你可以学习图形处理、动画制作方面软件[如:Firework、Photoshop、Flashdeng等]。 回
发表评论