Vault 简介

Vault 是机密数据储存和管理解决方案,可将机密或敏感的资讯安全的储存,并且设定各个使用者可以获取的权限,每一个操作Vault的动作也都可以被audit记录下来,如有数据外泄的状况发生,可以即时查找问题。

安装指南在网络上已经有不少范例,大家可以参考官方文件或中文教学进行安装。

操作介面

当我们进入Vault GUI时,可以看到下列这个画面,上方的选单列就是常用的vault 功能,secret负责存放机密数据、Access 负责角色的权限、Policies 决定那些机密数据可以被角色读取或写入等操作,本篇文章要介绍的就是如何写一个ethereum HD wallet的plugin,此Plugin的类别归类在secrets下,利用此plugin可以产生注记词及相对应的derivation path 的Account。

Vault Web UI

Vault Plugin 简介

Vault Plugin是扩充功能的概念,就像乐高一样,你可以把不同的功能加入Vault,也能根据需求去建立客制化的功能。每个Plugin是完全是独立于Vault Core之外的,两者之间的沟通靠RPC,好处是Plugin如果出现问题,不会整个Vault都跟着当机,也因为它们是两个不同的process所以并不会共用存储器,外挂也只能取得Vault上特定的参数。

Vault Core 与Plugin的通讯靠的是Mutual TLS确保安全性及双方的身分,并且和Plugin的RPC 服务沟通,在执行Plugin时Vault 会传wrapping token 给外挂,解开token 之后就会得到给Plugin使用的TLS证书跟私钥,用以跟Vault沟通。从下图注册Plugin的流程,就可看出Vault 跟Plugin之间的互动关系。

Vault Plugin注册的流程图

Vault Plugin 安装步骤

安装Plugin主要分为两个步骤: 注册及启用,以下将会介绍如何安装。

建立Plugin 注册Plugin 启用Plugin

建立Plugin

Plugin用Golang撰写,用go build指令就可以建立可执行档了

go build -o <输出路径> *.go

可参考官方的Sample Plugin

注册Plugin

当我们把Plugin建立完成,打包成Plugin Binary档案后,要将该Plugin放到Vault设定中指定的资料夹,Vault只认定这个资料夹的里面的Plugin,只有资料夹中的Plugin才可以被Vault注册,资料夹路径可在Vault config中设定。(设定档官方文件)

# Config file (HCL format)plugin_directory = "/vault/plugins"

将Plugin放到设定的资料夹后,我们要将Plugin加入到Plugin catalog,也就是注册,Vault会去确认Plugin的杂凑值是不是跟Plugin是一样的,避免Plugin Binary是被骇客窜改过的,注册成功后就可以在列表中找Plugin

$ vault write sys/plugins/catalog/database/ \\ sha256= \\ command="" Success! Data written to: sys/plugins/catalog/ database/

查找Secret Plugin,以下会列出已经注册的Plugin名称

vault plugin list secret vault plugin list auth

启用Plugin

这时Plugin已经在Vault的列表上了,接着启用该Plugin,Vault会给Plugin一组mutual TLS加密的证书及金钥,现在Vault 跟Plugin就可以开始沟通了。

vault secrets enable

使用Plugin

vault write / =

结语

Vault近期越来越火红,也有人使用Plugin进行私钥的管理,例如、vault-etheruem和vault-blockchain,我也写了一份用HD Wallet管理私钥的Vault Plugin ,原始代码已经在GitHub上,下一篇文章会以此当作范例讲解Plugin的架构。