什么是保险柜?
Vault 保护和保护对多种类型的机密数据的访问。 它存储和管理存在于低信任环境中的敏感密码信息、API 密钥和访问令牌,并生成动态访问以对用户进行身份验证,以确保他们已授权进入文件、位置、服务或应用程序并对其可用。
Vault 通过使用安全生成的临时令牌,为严格控制的环境提供更细粒度的清除。 在本教程中,我们将探索 HashiCorp 的 Vault 软件。 使用 HashiCorp 配置语言(或 HCL)编写的安全策略来确定哪些用户可以访问内部框架。
保险柜如何工作?
下面,我们将简要介绍 Vault 的运作方式。 本质上,我们只有两个面向外部的元素:
- HTTP(s) API – 此网关或通道由 Vault 服务器在开始允许用户与其交互时启动。
- 后端存储环境 – 该存储位置被认为是不受信任的,仅用于由 Vault 可靠地存放加密数据。
其他所有组件都被锁定在 Vault 受保护的安全边界内。
Vault 软件一旦启动,就被认为处于密封状态。 在执行任何功能之前,用户或 API 进程必须解封 Vault。 此任务通过开封密钥完成。 创建 Vault 时,会生成一个加密密钥来保护 Vault 中的信息。 主密钥进一步保护该加密密钥。 此主密钥是使用称为 Shamir 的秘密共享算法的技术创建的。

这种加密算法将主密钥分成多个部分或多个部分。 为了重建原始主密钥,需要最少数量的这些组件共享。 Vault 将主密钥分成五份。 要重建主密钥,需要五个共享中的三个。
让我们提供一个 example. LW 银行有一个保险库。 这个保险库包含 Liquid Web 的所有秘密。 这个保险库有五个钥匙孔。 向其中五位高管发放了一把钥匙。 要解锁保险库,保险库必须至少插入三个执行密钥。 使用五个执行密钥中的哪三个无关紧要,因为任何三个执行密钥都将打开保险库。 如果一两个执行密钥丢失或被盗,保险柜仍然可以访问。

一旦使用了加密密钥,Vault 就可以解密后端存储位置中包含的数据。 当 Vault 启封时,它会加载所有已配置的审核设备、身份验证方法和机密引擎。
这些组件必须存储在 Vault 中,因为它们被视为敏感信息。 只有具有正确权限级别的用户才能修改它们,这意味着当屏障被锁定时,它们不能在屏障之外使用。 通过将它们存储在 Vault 中,对这些元素的任何更改都会被拒绝,因为它们受到访问控制列表 (ACL) 系统的保护并由审计日志进行跟踪。 ACL 列表只是用户创建的策略。 策略由内部策略库保存和维护。
Vault 仅在零信任模型和身份驱动的访问控制上运行。 这意味着除非通过 ACL(策略)明确授予访问权限,否则不允许该操作。 Vault 解封后,请求通过 HTTP API 处理到 Core。 Core 本身用于调节通过系统的查询流,实施 ACL 列表,并确保保留审计日志。 默认的“根”ACL 是内置的,允许完全访问所有资源。
如何安装保险柜
客户可以跨多个平台使用 Vault,包括独立服务器、AWS、Kubernetes 和其他基于容器的系统。
在这里,我们演示了如何在独立服务器上或作为服务器集群的一部分安装 Vault。 要使用 Vault,管理员必须首先使用以下三种安装方法之一将其安装在服务器上:
- 源代码 – 这是软件的典型 git 安装。
- 预编译的二进制文件。
- 预打包格式。
我们在下面提供了在 Linux(CentOS 和 Ubuntu)、macOS 和 Windows 上安装 Vault 的说明。
CentOS/Ubuntu
与往常一样,我们首先要确保我们的系统使用两个命令之一是最新的。 下面是一个命令选项。
[root@host ~]# yum update -y && yum upgrade -y
下面是替代命令。
[root@host ~]# apt-get update && apt-get upgrade
创建并移入目录
[root@host2 ~]# mkdir -p /usr/src/vault
[root@host2 ~]# cd /usr/src/vault/
下载保险柜
[root@host2 vault]# curl -sO https://releases.hashicorp.com/vault/1.6.3/vault_1.6.3_linux_amd64.zip
解压保险柜
[root@host2 vault]# unzip vault_1.6.3_linux_amd64.zip
Archive: vault_1.6.3_linux_amd64.zip
inflating: vault
将文件夹移动到路径
[root@host2 vault]# mv vault /usr/local/bin/
验证安装
要验证 Vault 是否已正确安装,请在终端中运行 vault -version 或 vault -h。 如果您从命令行执行它,请确保 Vault 命令在您的 PATH 中,否则您可能会收到 Vault not found 错误。
[root@host2 vault]# vault -version
Vault v1.6.3 (b540be4b7ec48d0dd7512c8d8df9399d6bf84d76)
Ubuntu
确保我们的系统是最新的。
[root@host ~]# apt-get update && apt-get upgrade
添加 GPG 密钥
首先,我们需要添加 HashiCorp GPG 密钥。
[root@host ~]# curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
添加存储库
接下来,我们将添加来自 HashiCorp 的官方 Linux 存储库。
[root@host ~]# apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
安装软件
最后,运行另一个 apt-get update 然后安装软件。
[root@host ~]# apt-get update && apt-get install vault
苹果系统
安装存储库
首先,我们应该安装 HashiCorp tap。 这是 Homebrew 软件包的存储库,包括 Vault。
[root@host ~]# brew tap hashicorp/tap
安装软件
接下来,我们将使用 hashcorp/tap/vault 安装 Vault。
[root@host ~]# brew install hashicorp/tap/vault
视窗
我们可以使用两种方法在 Windows 系统上安装 Vault:Chocolatey 和 Scoop。 Chocolatey 是 Windows 的开源包管理器。 在这里,我们使用终端安装 Vault。
[root@host ~]# choco install vault
Scoop 是另一个适用于 Windows 的开源包管理器。 要使用 Scoop 安装 Vault,我们在终端中运行以下命令。
[root@host ~]# scoop install vault
启动 Vault 服务器
以下命令启动默认的 Vault 开发服务器。 开发服务器是预先配置的内置服务器。 虽然不用于生产环境,但它对于在本地探索 Vault 服务器命令很有用。
[root@host ~]# vault server -dev
==> Vault server configuration:
Api Address: https://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='https://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:
配置保险柜
一旦服务器上线(非开发模式),就可以使用基于 HCL 或 JSON 的文件配置 Vault。 下面是一个 example 的配置文件。
storage "consul" {
address = "127.0.0.1:8500"
path = "vault"
}
listener "tcp" {
address = "127.0.0.1:8200"
tls_disable = 1
}
telemetry {
statsite_address = "127.0.0.1:8125"
disable_hostname = true
}
保存配置后,管理员将使用 vault server -config 命令来指示配置文件的位置。
验证运行服务器
要验证开发服务器是否正在运行,请运行 vault status 命令。 如果开发服务器已启动,用户应该会看到以下输出。
[root@host ~]# vault status
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed false
Total Shares 1
Threshold 1
Version 1.5.0
Cluster Name vault-cluster-4d862b44
Cluster ID 92143a5a-0566-be89-f229-5a9f9c47fb1a
HA Enabled false
Copy
If the output looks different, restart the dev server and try again.
添加秘密
要创建一个秘密,我们使用以下语法。 kv 标志代表 keyvault,而 put 标志表示我们正在向路径添加秘密。
vault kv put <path> <key>=<value> command.
[root@host ~]# vault kv put secret/hithere user=password
Key Value
--- -----
created_time 2021-03-12T21:40:01.635656Z
deletion_time n/a
destroyed false
version 1
此命令将 user=password 对写入路径 secret/hithere。
检索秘密
可以使用以下语法检索秘密。
[root@host ~]# vault kv get <path>
[root@host ~]# vault kv get secret/hithere
====== Metadata ======
Key Value
--- -----
created_time 2021-03-12T21:41:17.568155Z
deletion_time n/a
destroyed false
version 2
===== Data =====
Key Value
--- -----
user password
删除秘密
要删除机密,我们使用 vault kv delete 命令。
[root@host ~]# vault kv delete secret/hithere
Success! Data deleted (if it existed) at: secret/hithere
创建 Vault 用户
最佳实践要求我们创建一个非特权系统用户来使用 Vault。
[root@host ~]# useradd --system --home /etc/vault --shell /bin/false vault
[root@host ~]# chown -R vault:vault /etc/vault /var/lib/vault/
秘密引擎
秘密引擎的每条路径都与其他秘密引擎路径完全分离和隔离。 为了 example,在 /path/foo 处启用的 A 秘密引擎无法与在 /path/foo 处启用的 B 秘密引擎进行通信。
启用秘密引擎
[root@host ~]# vault secrets enable -path=A /path/foo
Success! Enabled the kv secrets engine at: kv/
禁用秘密引擎
禁用特定机密引擎后,使用该特定机密引擎生成的所有机密都会立即被撤销。 要禁用现有的秘密引擎,我们使用以下命令。
[root@host ~]# vault secrets disable
结论
Vault 是一种可靠且有效的软件,用于在动态基础架构中创建、管理和加密敏感的 API 密钥、数据库凭据或其他与身份验证相关的用户数据。 Vault 存储、保护和严格控制对许多平台类型的访问。 它是客户端可以扩展以跨独立操作系统版本和容器化设置使用的基本工具。 总体而言,它是任何客户都可以部署的卓越安全产品。
详细了解我们的产品以及它们如何为您提供帮助。