如何使用保管箱安全地存储密码和Api密钥
保险柜是用于安全访问机密信息的工具,它可以是密码,API密钥,证书或者其他任何东西。
保管箱通过强大的访问控制机制和广泛的事件记录功能,为机密信息提供了统一的界面。
当我们有多个角色以及跨不同角色的个人需要各种关键信息,例如,具有不同特权的数据库登录详细信息,用于外部服务的API密钥,用于面向服务的体系结构通信的凭据等时,授予对关键信息的访问权限是一个非常困难的问题。
当使用自定义设置跨不同平台管理对秘密信息的访问时,情况甚至更糟,因此,几乎不可能进行滚动,安全的存储和管理审核日志。
但是,保管箱为这种复杂情况提供了解决方案。
显着特征
数据加密:保险柜可以加密和解密数据,而无需存储。
开发人员现在可以存储加密的数据而无需开发自己的加密技术,并且它允许安全团队定义安全参数。
安全秘密存储:保险柜先将秘密信息(API密钥,密码或者证书)加密,然后再存储到持久性(辅助)存储中。
因此,即使有Puppet然访问存储的信息,在解密之前它也没有用。
动态机密:按需机密会为AWS和SQL数据库之类的系统生成。
例如,如果应用程序需要访问S3存储桶,则它会从Vault请求AWS密钥对,该密钥对将授予所需的机密信息以及租用时间。
租约时间到期后,机密信息将无法使用。
租赁和续约:保险柜授予具有租约限制的机密,一旦租约到期,它就会撤消机密,如果需要,可以通过API进一步续订。
吊销:在租约期满后,保险柜可以吊销单个机密或者一棵机密树。
安装Vault
有两种使用Vault的方法。
1.可以从以下来源下载适用于所有Linux版本的预编译的Vault Binary,完成后,将其解压缩并将其放置在保留其他二进制文件的系统PATH上,以便可以轻松地对其进行访问/调用。
下载预编译的Vault二进制文件(32位)
下载预编译的Vault二进制文件(64位)
下载预编译的Vault二进制文件(ARM)
下载所需的预编译的Vault二进制文件。
https://dl.bintray.com/mitchellh/vault/vault_0.1.0_linux_386.zip
解压缩下载的二进制文件。
恭喜你!保管箱已准备就绪,可以使用。
2.从源代码进行编译是在系统上安装Vault的另一种方法。
开始安装过程之前,必须在系统上正确安装和配置GO和GIT。
要在Redhat系统上安装GO,请使用以下命令。
sudo yum install go
要在Debian系统上安装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的安装过程。
- 将以下保管库存储库克隆到GOPATH中
https://github.com/hashicorp/vault
- 验证以下克隆文件是否存在,如果不存在,则表明保险柜未克隆到正确的路径。
$GOPATH/src/github.com/hashicorp/vault/main.go
- 运行以下命令以在当前系统中构建Vault,并将二进制文件放入bin目录。
make dev
Vault入门教程
我们已经编译了Vault的官方交互式教程以及它在SSH上的输出。
初始化Vault
首先,我们需要初始化一个Vault实例供我们使用。
初始化时,我们可以配置Vault的密封行为。
立即使用以下命令使用1个解封密钥初始化Vault:
vault init -key-shares=1 -key-threshold=1
我们会注意到Vault在这里打印出了几个键。
不要清除终端,因为在接下来的几个步骤中将需要这些。
开启Vault
启动Vault服务器时,它将以密封状态启动。
在这种状态下,Vault已配置为知道在何处以及如何访问物理存储,但是不知道如何对其进行解密。
保管箱使用加密密钥加密数据。
此密钥使用未存储的“主密钥”加密。
解密主密钥需要分片阈值。
在此示例中,我们使用一个分片对该主密钥进行解密。
vault unseal <key 1>
授权请求
使用Vault执行任何操作之前,必须先验证连接的客户端。
身份验证是验证人员或者机器的身份的过程,并为其分配身份。
向Vault提出请求时,将使用此身份。
为简单起见,我们将使用在步骤2中在init上生成的根令牌。
此输出应在滚动显示中可用。
使用客户令牌授权:
vault auth <root token>
读写机密
现在已经设置了Vault,我们可以开始使用默认的已安装机密后端读取和写入机密了。
写入Vault的机密会先加密,然后再写入后端存储。
后端存储机制永远不会看到未加密的值,并且没有在没有保管箱的情况下解密该未加密值的必要手段。
vault write secret/hello value=world
当然,我们也可以读取以下数据:
vault read secret/hello
密封Vault
还有一个用于密封保险柜的API。
这将丢弃加密密钥,并需要另一个解封过程来还原它。
密封只需要一个具有root特权的运算符。
这通常是罕见的“碎玻璃程序”的一部分。
这样,如果检测到入侵,则可以快速锁定Vault数据以尝试最大程度地减少损坏。
如果没有访问主密钥分片,就无法再次访问它。
vault seal