Skip to content

Vault简介和本地运行

Posted on:2023年9月26日 at 11:25

Table of contents

Open Table of contents

简介

HashiCorp Vault是一个基于身份的秘密和加密管理系统。秘密是您希望严格控制访问的任何内容,例如API加密密钥、密码和证书。Vault提供通过身份验证和授权方法进行门控的加密服务。使用Vault的UI、CLI或HTTP API,可以安全地存储和管理对机密和其他敏感数据的访问、严格控制(限制)和可审计。

工作流四阶段

核心Vault工作流由四个阶段组成:

身份验证

Vault中的身份验证是客户提供信息的过程,Vault使用该信息来确定他们是否就是他们所说的人。一旦客户端根据验证方法进行了身份验证,就会生成令牌并将其关联到策略。

验证

Vault根据第三方可信源(如Github、LDAP、apple等)验证客户端。

授权

根据Vault安全策略匹配客户端。此策略是一组规则,定义客户端可以使用其Vault令牌访问哪些API端点。策略提供了一种声明性的方式来授予或禁止对Vault中的某些路径和操作的访问。

访问

Vault通过基于与客户端身份关联的策略发出令牌,授予对秘密、密钥和加密功能的访问权。然后,客户端可以将其Vault令牌用于将来的操作。

特色

安全的机密存储

任意键/值秘密可以存储在Vault中。 Vault 在将这些机密写入持久存储之前对其进行加密,因此获得对原始存储的访问权限不足以访问您的机密。 Vault 可以写入磁盘、Consul 等。

动态机密

Vault 可以为某些系统(例如 AWS 或 SQL 数据库)按需生成机密。 例如,当应用程序需要访问 S3 存储桶时,它会向 Vault 请求凭证,Vault 将按需生成具有有效权限的 AWS 密钥对。 创建这些动态机密后,Vault 还将在租约到期后自动撤销它们。

数据加密

Vault可以在不存储数据的情况下加密和解密数据。 这使得安全团队可以定义加密参数,并且开发人员可以将加密数据存储在 SQL 数据库等位置,而无需设计自己的加密方法。

租赁和续订

Vault 中的所有机密都有与其关联的租约。 租约结束时,Vault 将自动撤销该秘密。 客户可以通过内置的更新 API 更新租约。

撤销

Vault 内置了对秘密撤销的支持。 Vault 不仅可以撤销单个机密,还可以撤销一棵机密,例如特定用户读取的所有机密或特定类型的所有机密。 撤销有助于密钥滚动以及在发生入侵时锁定系统。


本地配置和运行

mkdir -p /opt/vault/data
cd /opt/vault

tee config.hcl <<EOF
ui = true
disable_mlock = true

storage "raft" {
  path    = "/opt/vault/data"
  node_id = "node1"
}

listener "tcp" {
  address     = "0.0.0.0:8200"
  tls_disable = "true"
}

api_addr = "http://127.0.0.1:8200"
cluster_addr = "https://127.0.0.1:8201"
EOF

vault server -config=config.hcl &
lsof -i :8200
ss -ntulp | grep 820

解封-Unseal Vault

启动时,保险库是密封的,我们需要进行解封操作。这个解封动作可能涉及到多个解封密钥持有人。例如,初次启动保险库UI时,你创建了新的Raft存储作为服务后端存储,你需要配置密钥共享数量(Key shares)和密钥阈值(Key threshold)。共享数量表明一共有多少把密钥,密钥阈值表明解封保险库所需的最少密钥数量。

Unseal Vault by entering portions of the unseal key. This can be done via multiple mechanisms on multiple computers. Once all portions are entered, the root key will be decrypted and Vault will unseal.

例如下图,我设置了Key shares=5,Key threshold=3。那么解封时,我需要连续输入3次解封密钥,注意是不同的解封密钥,可以是5把解封密钥的任意3把。然后再输入根密钥,就可以完成解封以及登录。 image.png

image.png

这个机制使用了Shamir’s Secret Sharing算法。实现了只需部分密钥即可解封。我记得国内有个新闻报道,某个地方某个组织把公章分成六瓣,分别交给不同的人保管。每次办事都要找齐6个人才能盖公章。如果现实中也能实现部分密钥即可解封那就更加方便了。

密封-Seal this Vault

完成所有机密操作时,可以将保险库密封起来,不再对外提供服务。可以在左侧导航栏最下方找到密封入口。

Sealing a vault tells the Vault server to stop responding to any access operations until it is unsealed again. A sealed vault throws away its root key to unlock the data, so it physically is blocked from responding to operations again until the Vault is unsealed again with the “unseal” command or via the API.

image.png