Vault是用來安全的獲取秘密信息的工具押袍,它可以保存密碼甸饱、API密鑰联四、證書等信息撑碴。Vault提供了一個(gè)統(tǒng)一的接口來訪問秘密信息,其具有健壯的訪問控制機(jī)制和豐富的事件日志朝墩。
對(duì)關(guān)鍵信息的授權(quán)訪問是一個(gè)困難的問題醉拓,尤其是當(dāng)有許多用戶角色伟姐,并且用戶請(qǐng)求不同的關(guān)鍵信息時(shí),例如用不同權(quán)限登錄數(shù)據(jù)庫的登錄配置亿卤,用于外部服務(wù)的API密鑰愤兵,SOA通信的證書等。當(dāng)保密信息由不同的平臺(tái)進(jìn)行管理排吴,并使用一些自定義的配置時(shí)秆乳,情況變得更糟,因此钻哩,安全的存儲(chǔ)屹堰、管理審計(jì)日志幾乎是不可能的。但Vault為這種復(fù)雜情況提供了一個(gè)解決方案街氢。
突出特點(diǎn)
數(shù)據(jù)加密:Vault能夠在不存儲(chǔ)數(shù)據(jù)的情況下對(duì)數(shù)據(jù)進(jìn)行加密扯键、解密。開發(fā)者們便可以存儲(chǔ)加密后的數(shù)據(jù)而無需開發(fā)自己的加密技術(shù)珊肃,Vault還允許安全團(tuán)隊(duì)自定義安全參數(shù)荣刑。
安全密碼存儲(chǔ):Vault在將秘密信息(API密鑰、密碼伦乔、證書)存儲(chǔ)到持久化存儲(chǔ)之前對(duì)數(shù)據(jù)進(jìn)行加密厉亏。因此,如果有人偶爾拿到了存儲(chǔ)的數(shù)據(jù)烈和,這也沒有任何意義爱只,除非加密后的信息能被解密。
動(dòng)態(tài)密碼:Vault可以隨時(shí)為AWS斥杜、SQL數(shù)據(jù)庫等類似的系統(tǒng)產(chǎn)生密碼虱颗。比如沥匈,如果應(yīng)用需要訪問AWS S3 桶蔗喂,它向Vault請(qǐng)求AWS密鑰對(duì),Vault將給出帶有租期的所需秘密信息高帖。一旦租用期過期缰儿,這個(gè)秘密信息就不再存儲(chǔ)。
租賃和更新:Vault給出的秘密信息帶有租期散址,一旦租用期過期乖阵,它便立刻收回秘密信息,如果應(yīng)用仍需要該秘密信息预麸,則可以通過API更新租用期瞪浸。
撤銷:在租用期到期之前,Vault可以撤銷一個(gè)秘密信息或者一個(gè)秘密信息樹吏祸。
安裝Vault
有兩種方式來安裝使用Vault对蒲。
1. 預(yù)編譯的Vault二進(jìn)制 能用于所有的Linux發(fā)行版,下載地址如下,下載之后蹈矮,解壓并將它放在系統(tǒng)PATH路徑下砰逻,以方便調(diào)用。

下載相應(yīng)的預(yù)編譯的Vault二進(jìn)制版本泛鸟。

解壓下載到本地的二進(jìn)制版本蝠咆。
祝賀你!您現(xiàn)在可以使用Vault了北滥。

2. 從源代碼編譯是另一種在系統(tǒng)中安裝Vault的方式刚操。在安裝Vault之前需要安裝GO和GIT。
在 Redhat系統(tǒng)中安裝GO 使用下面的指令:
sudo yum install go
在 Debin系統(tǒng)中安裝GO 使用下面的指令:
sudo apt-get install golang
或者
sudo add-apt-repository ppa:gophers/go
sudo apt-get update
sudo apt-get install golang-stable
在 Redhat系統(tǒng)中安裝GIT 使用下面的命令:
sudo yum install git
在 Debian系統(tǒng)中安裝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
執(zhí)行下面的指令來編譯Vault,并將二進(jìn)制文件放到系統(tǒng)bin目錄下联喘。
make dev

一份Vault入門教程
我們已經(jīng)編制了一份Vault的官方交互式教程华蜒,并帶有它在SSH上的輸出信息。
概述
這份教程包括下列步驟:
- 初始化并啟封您的Vault
- 在Vault中對(duì)您的請(qǐng)求授權(quán)
- 讀寫秘密信息
- 密封您的Vault
初始化您的Vault
首先豁遭,我們需要為您初始化一個(gè)Vault的工作實(shí)例叭喜。在初始化過程中,您可以配置Vault的密封行為蓖谢。簡單起見捂蕴,現(xiàn)在使用一個(gè)啟封密鑰來初始化Vault,命令如下:
vault init -key-shares=1 -key-threshold=1
您會(huì)注意到Vault在這里輸出了幾個(gè)密鑰闪幽。不要清除您的終端啥辨,這些密鑰在后面的步驟中會(huì)使用到。

啟封您的Vault
當(dāng)一個(gè)Vault服務(wù)器啟動(dòng)時(shí)盯腌,它是密封的狀態(tài)溉知。在這種狀態(tài)下,Vault被配置為知道物理存儲(chǔ)在哪里及如何存取它腕够,但不知道如何對(duì)其進(jìn)行解密级乍。Vault使用加密密鑰來加密數(shù)據(jù)。這個(gè)密鑰由"主密鑰"加密帚湘,主密鑰不保存玫荣。解密主密鑰需要入口密鑰。在這個(gè)例子中大诸,我們使用了一個(gè)入口密鑰來解密這個(gè)主密鑰捅厂。
vault unseal <key 1>

為您的請(qǐng)求授權(quán)
在執(zhí)行任何操作之前材诽,連接的客戶端必須是被授權(quán)的。授權(quán)的過程是檢驗(yàn)一個(gè)人或者機(jī)器是否如其所申明的那樣具有正確的身份恒傻。這個(gè)身份用在向Vault發(fā)送請(qǐng)求時(shí)脸侥。為簡單起見,我們將使用在步驟2中生成的root令牌盈厘,這個(gè)信息可以回滾終端屏幕看到睁枕。使用一個(gè)客戶端令牌進(jìn)行授權(quán):
vault auth <root token>

讀寫保密信息
現(xiàn)在Vault已經(jīng)被設(shè)置妥當(dāng),我們可以開始讀寫默認(rèn)掛載的秘密后端里面的秘密信息了沸手。寫在Vault中的秘密信息首先被加密外遇,然后被寫入后端存儲(chǔ)中。后端存儲(chǔ)機(jī)制絕不會(huì)看到未加密的信息,并且也沒有在Vault之外解密的需要。
vault write secret/hello value=world
當(dāng)然瑞驱,您接下來便可以讀這個(gè)保密信息了:
vault read secret/hello

密封您的Vault
還有一個(gè)用I來密封Vault的API。它將丟掉現(xiàn)在的加密密鑰并需要另一個(gè)啟封過程來恢復(fù)它菲语。密封僅需要一個(gè)擁有root權(quán)限的操作者。這是一種罕見的"打破玻璃過程"的典型部分惑灵。
這種方式中山上,如果檢測到一個(gè)入侵,Vault數(shù)據(jù)將會(huì)立刻被鎖住英支,以便最小化損失佩憾。如果不能訪問到主密鑰碎片的話,就不能再次獲取數(shù)據(jù)干花。
vault seal

這便是入門教程的結(jié)尾妄帘。
總結(jié)
Vault是一個(gè)非常有用的應(yīng)用,它提供了一個(gè)可靠且安全的存儲(chǔ)關(guān)鍵信息的方式池凄。另外抡驼,它在存儲(chǔ)前加密關(guān)鍵信息、審計(jì)日志維護(hù)修赞、以租期的方式獲取秘密信息婶恼,且一旦租用期過期它將立刻收回秘密信息桑阶。Vault是平臺(tái)無關(guān)的柏副,并且可以免費(fèi)下載和安裝。要發(fā)掘Vault的更多信息蚣录,請(qǐng)?jiān)L問其官方網(wǎng)站割择。
via: http://linoxide.com/how-tos/secure-secret-store-vault/