当前位置: 首页 > 科技观察

一篇文章了解什么是HashiCorpVault系统

时间:2023-03-18 20:28:31 科技观察

HashiCorpVault是一个管理密码、密钥、证书等秘密的系统,还可以提供受身份认证和授权保护的加密服务。利用Vault提供的UI、CLI或HTTPAPI,可以在严格的控制和审计下安全地存储和管理敏感数据。为什么在现代系统中,需要大量的数据库访问凭证、外部API访问密钥、服务间调用凭证等秘密信息,这些信息分散存储在明文、配置文件、源代码中,或其他位置。如果没有专门的解决方案,仅靠分散在各个平台上的机制很难判断谁在访问哪些密钥,也很难做好安全存储、密钥轮换和安全审计等工作。通过将所有这些凭据集中在一个地方定义,Vault减少了不必要的暴露并提供了访问安全性和易于审计。工作原理Vault主要通过与安全策略关联的令牌来控制客户端对机密的访问。安全策略由一组描述路径及其操作可访问性的安全规则组成。令牌可以手动创建并授予客户,也可以由客户通过登录自行获取。。Vault的核心工作流程是:客户端提供身份信息。Vault通过LDAP、GitHub、AppRole和其他受信任的第三方对客户端进行身份验证。Vault将定义的安全策略与令牌相关联,并通过令牌授予客户端访问权限。秘密功能SecureStorageVault在永久存储秘密数据之前对其进行加密,因此其原始存储也是安全的。DynamicSecretVault提供对AWS、SQL数据库等系统的临时访问凭证,过期。加密服务Vault也可以根据安全团队定义的加密参数提供公共数据加解密服务,不存储加解密后的数据。LeasingandRenewingVault使用租约来管理存储在其中的各种秘密,到期前未续订的秘密将被丢弃。RetirementVault允许主动撤销个人的、相关的、特定类型的秘密,启用密钥轮换或锁定系统以防止入侵。VersionVault有开源版、云主机版和企业版三个版本。开源版本需要自托管,提供动态密文管理、加密、数据保护等基础功能,需要社区支持。云托管版本称为HCPVault(HashiCorpCloudPlatformVault),具有与自托管Vault相同的二进制文件,允许组织快速使用Vault,同时保持一致的用户体验。企业版需要自托管。与开源版本相比,增加了扩容、容灾等企业级特性,得到了HashiCorp的支持。快速体验安装#安装yum-config-manager来管理版本库。sudoyuminstall-yyum-utils#使用yum-config-manager添加官方HashiCorpLinux存储库。sudoyum-config-manager--add-repohttps://rpm.releases.hashicorp.com/RHEL/hashicorp.repo#安装sudoyum-yinstallvault#或者安装企业版sudoyum-yinstallvault-enterprise#verifyvaultstartup#查看启动帮助vaultserver-help#以开发模式启动,数据仍然是加密的,但存储在内存中,使用http监听,仅供快速体验,不适用于生产vaultserver-dev#recordlogOutputVAULT_ADDR,UnsealKey,RootToken#在新终端执行以下操作#SaveUnsealKeytosomewhereecho"ReplacethistextwithUnsealKey">unseal.key#根据服务器启动日志中的信息设置环境变量VAULT_ADDR表示访问addressoftheserverexportVAULT_ADDR='http://127.0.0.1:8200'#根据服务器启动日志中的信息设置环境变量VAULT_TOKEN,表示rootaccesstokenexportVAULT_TOKEN="ReplacethiswithRootTokenParagraphtext"#查看服务状态usvaultstatusprocesskey-valuepairsecret#查看键值对处理的命令帮助vaultkv-help#查看put键值对命令helpvaultkvput-help#创建一个名为hell的文件,包括foo,key-值对兴奋的两个密钥的秘密。#每次放置同名的秘密时,其元数据中的版本都会递增。vaultkvput-mount=secrethellofoo=worldexcited=yes#读取名为hello的键值对secret,其元数据会显示在response中和key-valuedatavaultkvget-mount=secrethello#读取kvvault中excitedkey的值kvget-mount=secret-field=excitedhello#输出json格式,使用jq命令提取excitedkeyvault的数据kvget-mount=secret-format=jsonhello|jq-r.data.data.excited#删除名为hello的键值对secretvaultkvdelete-mount=secrethello#将无意删除的名为hello的secret恢复到前2个版本vaultkvundelete-mount=secret-versions=2helloenginesecretengine是Vault存储、生成和加解密的插件组件。键值只是其中之一。其他存储引擎包括数据库、Transit(加解密服务引擎)、SSH、Time-basedOTP、AWS、Consul等,也可以定制。#秘密引擎需要先启用才能使用。#可以在不同的路径上启用相同的存储引擎。#键值引擎在开发模式下默认开启。vaultsecretsenable-path=kvkv#启用秘密引擎的路径默认为秘密引擎的名字vaultsecretsenablekv#下面的命令用来列出所有的秘密引擎path/secretnametosetthenamehello'skey-valuedatavaultkvputkv/hellotarget=world#下面的命令可以禁用路径kv下的secret引擎,并删除关联的secrets并配置vaultsecretsdisablekv/productionmode安装以创建配置文件。Vault使用HCL文件进行Configuration,首先创建一个HCL配置文件,可以命名为config.hcl。存储“raft”{path=“./vault/data”node_id=“node1”}listener“tcp”{address=“[::]:8200”cluster_address=“[::]:8201”tls_cert_file=“/etc/certs/vault.crt"tls_key_file="/etc/certs/vault.key"}api_addr="https://127.0.0.1:8200"cluster_addr="https://127.0.0.1:8201"ui=truestorage指示后端存储方式,raft是一种适合生产模式的后端存储。listener用于配置监听API请求的地址,生产环境需要开启TLS。api_addr被备用服务器用来将客户端的地址重定向到主服务器。cluster_addr是同一个集群中各个节点的通信地址,用于备服务器转发客户端请求到主服务器,必须使用TLS。ui用于启用默认情况下未启用的WebUI。当不支持内存锁定时,需要添加配置:disable_mlock=true创建raft工作目录mkdir-p./vault/data启动服务器vaultserver-config=config.hclInitialize启动一个新终端,执行以下命令初始化服务器。#设置服务API地址exportVAULT_ADDR='http://127.0.0.1:8200'#初始化servicevaultoperatorinit初始化过程会输出5个未密封的key和1个rootinitialToken,需要安全分配key以避免一个拥有所有钥匙,因此当金库被密封时,至少需要3把钥匙才能打开它。UnsealVault在初始化后和每次重启后都需要解封才能读取机密数据。需要在不同的电脑上执行以下命令,并提供不同的密钥才能完成解包。Vaultoperatorunseallogin使用初始化后获得的Roottoken登录Vault服务。Vaultlogin其他运维命令任何运维人员都可以通过执行vaultoperatorseal命令重新封存vault,也可以通过执行pgrep-fvault|终止Vault进程xargskill命令,并通过执行rm-r./vault/data命令数据清除保险库。使用Transit引擎加解密下面演示使用VaultTransit引擎对数据(不存储)进行加解密的过程,涉及两个角色:管理员和客户端。#(管理员)以开发模式和根令牌启动Vault#注意:在生产环境中,应使用其他具有一定安全策略的令牌来执行此任务vaultserver-dev-dev-root-token-idroot#(管理员)使用环境变量声明Vault服务的地址,方便后续操作exportVAULT_ADDR=$VAULT_ADDR#(Administrator)使用环境变量声明后续操作使用的tokenexportVAULT_TOKEN=root#(Administrator)启用中转enginevaultsecretsenabletransit#(管理员)启用名为orders的加密环vaultwrite-ftransit/keys/orders#(管理员)为客户端创建名为app-orders的安全策略vaultpolicywriteapp-orders-<