TranslateProject/translated/tech/20150506 How to Securely Store Passwords and Api Keys Using Vault.md

5.9 KiB
Raw Blame History

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

Vault是用于安全的获取保密信息的工具。他可以保存密码、API密钥、证书等信息。Vault通过强访问控制机制和高扩展性的事件日志提供了一个统一的接口来访问保密信息。

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

突出特点

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

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

动态密码Vault为类似AWS和SQL数据库的系统按需产生密码。如果应用需要获得AWS S3的桶例如它向Vault请求AWS密钥对即请求需要的保密信息一段租用期。这个保密信息在租用时间过期后将变得不可用。

租赁和更新Vault以租用期为限制授予保密信息一旦租用期过期它便立刻收回保密信息如果应用仍需要保密信息则可以通过API更新租用期。

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

安装Vault

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

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

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

wget binary

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

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

有一个API来密封Vault。它将丢掉加密密钥并需要其他解密过程来恢复它。密封仅需要一个拥有root权限的单独操作。这通常是一种罕见的"打破玻璃过程"的一部分。 这种方式中如果有一个检测到的入侵Vault数据将会立刻被锁住以便最小化损失。如果没有获取到主密钥碎片它不会被再次获取。

vault seal

Seal Vault SSH

这便是入门教程的结尾。

总结

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


via: http://linoxide.com/how-tos/secure-secret-store-vault/

作者:Aun Raza 译者:译者ID 校对:校对者ID

本文由 LCTT 原创翻译,Linux中国 荣誉推出