开源密码存储引擎 Vault 的安装与使用

2022-09-02 17:39:19   最后更新: 2022-09-02 17:39:19   访问数量:79




 

vault 是一款 HCP 推出的密钥管理引擎,用来集中存储集群运行过程中所需要的秘密信息,例如数据库的访问凭证、密码、密钥等。它保证了存储与通信过程的保密性,这对于我们无处不在的敏感信息的数据安全显然是十分必要的。

 

与此同时,vault 拥有一系列可插拔功能扩展,可以支持将 vault 的实际数据存储到内存、文件系统、google cloud、AWS、etcd 等多种存储介质中,满足不同的集群部署需求,可谓是非常灵活。

 

本文我们就来初步介绍一下 vault 这款存储的搭建和使用。

 

 

 

 

在不同的平台上,vault 安装略有不同,可以参考实际的文档:

 

https://www.vaultproject.io/downloads

 

例如在 centos 上,可以通过下面的命令来进行安装:

 

sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo sudo yum -y install vault

 

 

 

3.1 测试环境

 

如果仅用于测试,只需要执行下面的命令即可:

 

vault server -dev

 

 

命令执行后的返回文本中会有 Unseal Key 和 Root Token 两个参数:

 

==> Vault server configuration:

   Api Address: http://127.0.0.1:8200

   Cgo: disabled

   Cluster Address: https://127.0.0.1:8201

Listener 1: tcp (addr: "127.0.0.1:8200", cluster address: "127.0.0.1:8201", max_request_duration: "1m30s", max_request_size: "33554432", tls: "disabled")

 Log Level: info

 Mlock: supported: false, enabled: false

 Recovery Mode: false

   Storage: inmem

   Version: Vault v1.4.1

WARNING! dev mode is enabled! In this mode, Vault runs entirely in-memory

and starts unsealed with a single unseal key. The root token is already

authenticated to the CLI, so you can immediately begin using Vault.

You may need to set the following environment variable:

$ export VAULT_ADDR='http://127.0.0.1:8200'

The unseal key and root token are displayed below in case you want to

seal/unseal the Vault or re-authenticate.

==Unseal Key: 1+yv+v5mz+aSCK67X6slL3ECxb4UDL8ujWZU/ONBpn0==

==Root Token: s.XmpNPoi9sRhYtdKHaQhkHP6x==

Development mode should NOT be used in production installations!

==> Vault server started! Log data will stream in below:

 

接下来,按照上述指引,需要 export 两个环境变量:

 

export VAULT_ADDR='http://127.0.0.1:8200' export VAULT_TOKEN="s.XmpNPoi9sRhYtdKHaQhkHP6x"

 

 

通过 vault status 命令可以查看 vault 状态:

 

$ vault status Key Value --- ----- Seal Type shamir Initialized true Sealed false Total Shares 1 Threshold 1 Version 1.7.0 Storage Type inmem Cluster Name vault-cluster-4d862b44 Cluster ID 92143a5a-0566-be89-f229-5a9f9c47fb1a HA Enabled false

 

 

3.2 正式环境

 

3.2.1 启动 server

 

上述测试环境部署的 vault 使用了用于测试的一系列默认配置,如果我们要用于正式环境,我们自然需要进行一系列必要的配置,例如 vault 的数据具体存储在哪里,http 端口与 tls 协议支持等。

 

vault 支持通过 json、linux config、hcl 等多种配置方式,例如下面这个 config.hcl 配置:

 

storage "raft" { path = "./vault/data" node_id = "node1" } listener "tcp" { address = "127.0.0.1:8200" tls_disable = "true" } api_addr = "http://127.0.0.1:8200" cluster_addr = "https://127.0.0.1:8201" ui = true

 

 

接下来就可以启动 server 了:

 

mkdir -p ./vault/data vault server -config=config.hcl

 

 

3.2.2 server 的初始化

 

对于单机模式的 server 来说,每个 server 都需要进行一次且只能进行一次初始化操作,用来应用上述配置。对于 HA 模式的 vault 来说,则每个 cluster 需要执行一次初始化操作。

 

执行下面的命令对 vault 进行初始化操作:

 

export VAULT_ADDR='http://127.0.0.1:8200' vault operator init

 

 

会打印出下列信息:

 

==Unseal Key 1: 4jYbl2CBIv6SpkKj6Hos9iD32k5RfGkLzlosrrq/JgOm

Unseal Key 2: B05G1DRtfYckFV5BbdBvXq0wkK5HFqB9g2jcDmNfTQiS

Unseal Key 3: Arig0N9rN9ezkTRo7qTB7gsIZDaonOcc53EHo83F5chA

Unseal Key 4: 0cZE0C/gEk3YHaKjIWxhyyfs8REhqkRW/CSXTnmTilv+

Unseal Key 5: fYhZOseRgzxmJCmIqUdxEm9C3jB5Q27AowER9w4FC2Ck==

==Initial Root Token: s.KkNJYWF5g0pomcCLEmDdOVCW==

Vault initialized with 5 key shares and a key threshold of 3. Please securely

distribute the key shares printed above. When the Vault is re-sealed,

restarted, or stopped, you must supply at least 3 of these keys to unseal it

before it can start servicing requests.

Vault does not store the generated root key (previously known as master key).

Without at least 3 key to reconstruct the root key, Vault will remain

permanently sealed!

It is possible to generate new unseal keys, provided you have a quorum of

existing unseal keys shares. See "vault operator rekey" for more information.

 

3.2.3 对 key 解封

 

初始化后,vault 还不知道如何使用具体的存储,因此处于封锁状态,在上面的 output 内容中有这样一句话:

 

Vault initialized with 5 key shares and a key threshold of 3.

 

说明 threshold 为 3,也就是说,我们至少要对 3 个 key 执行解封操作后,server 才可以使用。

 

执行下面的命令即可:

 

vault operator unseal <key>

 

 

3.2.4 创建 path

 

和其他数据存储一样,要使用 vault 我们同样需要创建 database,但在 vault 中,数据是按照类似文件系统的 path 来组织的:

 

vault secrets enable -path=secret kv

 

 

我们创建了一个 path secret,并且以 kv 类型进行存储。

 

 

4.1 数据写入

 

使用下面的命令就可以写入数据了:

 

vault kv put -mount=secret hello foo=world

 

 

他表示在 path 为 secret 的子 path hello 中写入 kv 对 foo=world。

 

你也可以一次写入多个数据:

 

vault kv put -mount=secret hello foo=world excited=yes

 

 

4.2 数据读取

 

我们可以直接读取 secret path 下 hello 子 path 的所有数据:

 

vault kv get -mount=secret hello

 

 

会打印出:

 

== Secret Path == secret/data/hello ======= Metadata ======= Key Value --- ----- created_time 2022-01-15T01:40:09.888293Z custom_metadata <nil> deletion_time n/a destroyed false version 2 ===== Data ===== Key Value --- ----- excited yes foo world

 

 

我们也可以指定 path 下具体的 field 来获取某个值:

 

vault kv get -mount=secret -field=excited hello

 

 

这样就会直接打印出值:

 

yes

 

4.3 删除数据

 

把上述查询语句中的 get 关键字改成 delete 关键字就可以删除对应数据:

 

vault kv delete -mount=secret -field=excited hello

 

 

但是,如果你是误删除的话,vault 是支持误删恢复的,前提是你需要将 destroyed 配置为 false。

 

通过下面的命令,可以将已删除数据进行恢复:

 

vault kv undelete -mount=secret -versions=2 hello

 

 

 

 

 

欢迎关注微信公众号,以技术为主,涉及历史、人文等多领域的学习与感悟,每周三到七篇推文,只有全部原创,只有干货没有鸡汤

 

linux 使用及配置相关






database      数据库      密码      技术贴      path      kubernetes      vault     


京ICP备2021035038号