如何使用 Vault 安全的存储密码和 API 密钥

发布于 2025-02-14 18:16:39 字数 5306 浏览 7 评论 0

Vault 是用来安全的获取秘密信息的工具,它可以保存密码、API 密钥、证书等信息。Vault 提供了一个统一的接口来访问秘密信息,其具有健壮的访问控制机制和丰富的事件日志。

对关键信息的授权访问是一个困难的问题,尤其是当有许多用户角色,并且用户请求不同的关键信息时,例如用不同权限登录数据库的登录配置,用于外部服务的 API 密钥,SOA 通信的证书等。当保密信息由不同的平台进行管理,并使用一些自定义的配置时,情况变得更糟,因此,安全的存储、管理审计日志几乎是不可能的。但 Vault 为这种复杂情况提供了一个解决方案。

突出特点

数据加密 :Vault 能够在不存储数据的情况下对数据进行加密、解密。开发者们便可以存储加密后的数据而无需开发自己的加密技术,Vault 还允许安全团队自定义安全参数。

安全密码存储 :Vault 在将秘密信息(API 密钥、密码、证书)存储到持久化存储之前对数据进行加密。因此,如果有人偶尔拿到了存储的数据,这也没有任何意义,除非加密后的信息能被解密。

动态密码 :Vault 可以随时为 AWS、SQL 数据库等类似的系统产生密码。比如,如果应用需要访问 AWS S3 桶,它向 Vault 请求 AWS 密钥对,Vault 将给出带有租期的所需秘密信息。一旦租用期过期,这个秘密信息就不再存储。

租赁和更新 :Vault 给出的秘密信息带有租期,一旦租用期过期,它便立刻收回秘密信息,如果应用仍需要该秘密信息,则可以通过 API 更新租用期。

撤销 :在租用期到期之前,Vault 可以撤销一个秘密信息或者一个秘密信息树。

安装 Vault

有两种方式来安装使用 Vault。

1. 预编译的 Vault 二进制 能用于所有的 Linux 发行版,下载地址如下,下载之后,解压并将它放在系统 PATH 路径下,以方便调用。

wget binary

下载相应的预编译的 Vault 二进制版本。

vault

解压下载到本地的二进制版本。

祝贺你!您现在可以使用 Vault 了。

2. 从源代码编译 是另一种在系统中安装 Vault 的方式。在安装 Vault 之前需要安装 GO 和 GIT。

Redhat 系统中安装 GO 使用下面的指令:

sudo yum install go

Debin 系统中安装 GO 使用下面的指令:

sudo apt-get install golang

或者

sudo add-apt-repository ppa:gophers/go

sudo apt-get update

sudo apt-get install golang-stable

Redhat 系统中安装 GIT 使用下面的命令:

sudo yum install git

Debian 系统中安装 GIT 使用下面的命令:

sudo apt-get install git

一旦 GO 和 GIT 都已被安装好,我们便可以开始从源码编译安装 Vault。

将下列的 Vault 仓库拷贝至 GOPATH

https://github.com/hashicorp/vault

测试下面的文件是否存在,如果它不存在,那么 Vault 没有被克隆到合适的路径。

$GOPATH/src/github.com/hashicorp/vault/main.go

执行下面的指令来编译 Vault,并将二进制文件放到系统 bin 目录下。

make dev

path

一份 Vault 入门教程

我们已经编制了一份 Vault 的官方交互式教程,并带有它在 SSH 上的输出信息。

概述

这份教程包括下列步骤:

  • 初始化并启封您的 Vault
  • 在 Vault 中对您的请求授权
  • 读写秘密信息
  • 密封您的 Vault

初始化您的 Vault

首先,我们需要为您初始化一个 Vault 的工作实例。在初始化过程中,您可以配置 Vault 的密封行为。简单起见,现在使用一个启封密钥来初始化 Vault,命令如下:

vault init -key-shares=1 -key-threshold=1

您会注意到 Vault 在这里输出了几个密钥。不要清除您的终端,这些密钥在后面的步骤中会使用到。

Initializing SSH

启封您的 Vault

当一个 Vault 服务器启动时,它是密封的状态。在这种状态下,Vault 被配置为知道物理存储在哪里及如何存取它,但不知道如何对其进行解密。Vault 使用加密密钥来加密数据。这个密钥由"主密钥"加密,主密钥不保存。解密主密钥需要入口密钥。在这个例子中,我们使用了一个入口密钥来解密这个主密钥。

vault unseal <key 1>

Unsealing SSH

为您的请求授权

在执行任何操作之前,连接的客户端必须是被授权的。授权的过程是检验一个人或者机器是否如其所申明的那样具有正确的身份。这个身份用在向 Vault 发送请求时。为简单起见,我们将使用在步骤 2 中生成的 root 令牌,这个信息可以回滚终端屏幕看到。使用一个客户端令牌进行授权:

vault auth <root token>

Authorize SSH

读写保密信息

现在 Vault 已经被设置妥当,我们可以开始读写默认挂载的秘密后端里面的秘密信息了。写在 Vault 中的秘密信息首先被加密,然后被写入后端存储中。后端存储机制绝不会看到未加密的信息,并且也没有在 Vault 之外解密的需要。

vault write secret/hello value=world

当然,您接下来便可以读这个保密信息了:

vault read secret/hello

RW_SSH

密封您的 Vault

还有一个用 I 来密封 Vault 的 API。它将丢掉现在的加密密钥并需要另一个启封过程来恢复它。密封仅需要一个拥有 root 权限的操作者。这是一种罕见的"打破玻璃过程"的典型部分。

这种方式中,如果检测到一个入侵,Vault 数据将会立刻被锁住,以便最小化损失。如果不能访问到主密钥碎片的话,就不能再次获取数据。

vault seal

Seal Vault SSH

这便是入门教程的结尾。

总结

Vault 是一个非常有用的应用,它提供了一个可靠且安全的存储关键信息的方式。另外,它在存储前加密关键信息、审计日志维护、以租期的方式获取秘密信息,且一旦租用期过期它将立刻收回秘密信息。Vault 是平台无关的,并且可以免费下载和安装。要发掘 Vault 的更多信息,请访问其 官方网站

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

窗影残

暂无简介

文章
评论
27 人气
更多

推荐作者

夢野间

文章 0 评论 0

百度③文鱼

文章 0 评论 0

小草泠泠

文章 0 评论 0

zhuwenyan

文章 0 评论 0

weirdo

文章 0 评论 0

坚持沉默

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文