如何使用Vault安全的儲存密碼和API金鑰

linux.cn發表於2015-05-11

Vault是用來安全的獲取祕密資訊的工具,它可以儲存密碼、API金鑰、證書等資訊。Vault提供了一個統一的介面來訪問祕密資訊,其具有健壯的訪問控制機制和豐富的事件日誌。

對關鍵資訊的授權訪問是一個困難的問題,尤其是當有許多使用者角色,並且使用者請求不同的關鍵資訊時,例如用不同許可權登入資料庫的登入配置,用於外部服務的API金鑰,SOA通訊的證書等。當保密資訊由不同的平臺進行管理,並使用一些自定義的配置時,情況變得更糟,因此,安全的儲存、管理審計日誌幾乎是不可能的。但Vault為這種複雜情況提供了一個解決方案。

如何使用Vault安全的儲存密碼和API金鑰

突出特點

資料加密:Vault能夠在不儲存資料的情況下對資料進行加密、解密。開發者們便可以儲存加密後的資料而無需開發自己的加密技術,Vault還允許安全團隊自定義安全引數。

安全密碼儲存:Vault在將祕密資訊(API金鑰、密碼、證書)儲存到持久化儲存之前對資料進行加密。因此,如果有人偶爾拿到了儲存的資料,這也沒有任何意義,除非加密後的資訊能被解密。

動態密碼:Vault可以隨時為AWS、SQL資料庫等類似的系統產生密碼。比如,如果應用需要訪問AWS S3 桶,它向Vault請求AWS金鑰對,Vault將給出帶有租期的所需祕密資訊。一旦租用期過期,這個祕密資訊就不再儲存。

租賃和更新:Vault給出的祕密資訊帶有租期,一旦租用期過期,它便立刻收回祕密資訊,如果應用仍需要該祕密資訊,則可以通過API更新租用期。

撤銷:在租用期到期之前,Vault可以撤銷一個祕密資訊或者一個祕密資訊樹。

安裝Vault

有兩種方式來安裝使用Vault。

1. 預編譯的Vault二進位制 能用於所有的Linux發行版,下載地址如下,下載之後,解壓並將它放在系統PATH路徑下,以方便呼叫。

如何使用Vault安全的儲存密碼和API金鑰

下載相應的預編譯的Vault二進位制版本。

如何使用Vault安全的儲存密碼和API金鑰

解壓下載到本地的二進位制版本。

祝賀你!您現在可以使用Vault了。

如何使用Vault安全的儲存密碼和API金鑰

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

如何使用Vault安全的儲存密碼和API金鑰

一份Vault入門教程

我們已經編制了一份Vault的官方互動式教程,並帶有它在SSH上的輸出資訊。

概述

這份教程包括下列步驟:

  • 初始化並啟封您的Vault
  • 在Vault中對您的請求授權
  • 讀寫祕密資訊
  • 密封您的Vault

初始化您的Vault

首先,我們需要為您初始化一個Vault的工作例項。在初始化過程中,您可以配置Vault的密封行為。簡單起見,現在使用一個啟封金鑰來初始化Vault,命令如下:

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

您會注意到Vault在這裡輸出了幾個金鑰。不要清除您的終端,這些金鑰在後面的步驟中會使用到。

如何使用Vault安全的儲存密碼和API金鑰

啟封您的Vault

當一個Vault伺服器啟動時,它是密封的狀態。在這種狀態下,Vault被配置為知道物理儲存在哪裡及如何存取它,但不知道如何對其進行解密。Vault使用加密金鑰來加密資料。這個金鑰由”主金鑰”加密,主金鑰不儲存。解密主金鑰需要入口金鑰。在這個例子中,我們使用了一個入口金鑰來解密這個主金鑰。

vault unseal <key 1>

如何使用Vault安全的儲存密碼和API金鑰

為您的請求授權

在執行任何操作之前,連線的客戶端必須是被授權的。授權的過程是檢驗一個人或者機器是否如其所申明的那樣具有正確的身份。這個身份用在向Vault傳送請求時。為簡單起見,我們將使用在步驟2中生成的root令牌,這個資訊可以回滾終端螢幕看到。使用一個客戶端令牌進行授權:

vault auth <root token>

如何使用Vault安全的儲存密碼和API金鑰

讀寫保密資訊

現在Vault已經被設定妥當,我們可以開始讀寫預設掛載的祕密後端裡面的祕密資訊了。寫在Vault中的祕密資訊首先被加密,然後被寫入後端儲存中。後端儲存機制絕不會看到未加密的資訊,並且也沒有在Vault之外解密的需要。

vault write secret/hello value=world

當然,您接下來便可以讀這個保密資訊了:

vault read secret/hello

如何使用Vault安全的儲存密碼和API金鑰

密封您的Vault

還有一個用I來密封Vault的API。它將丟掉現在的加密金鑰並需要另一個啟封過程來恢復它。密封僅需要一個擁有root許可權的操作者。這是一種罕見的”打破玻璃過程”的典型部分。

這種方式中,如果檢測到一個入侵,Vault資料將會立刻被鎖住,以便最小化損失。如果不能訪問到主金鑰碎片的話,就不能再次獲取資料。

vault seal

如何使用Vault安全的儲存密碼和API金鑰

這便是入門教程的結尾。

總結

Vault是一個非常有用的應用,它提供了一個可靠且安全的儲存關鍵資訊的方式。另外,它在儲存前加密關鍵資訊、審計日誌維護、以租期的方式獲取祕密資訊,且一旦租用期過期它將立刻收回祕密資訊。Vault是平臺無關的,並且可以免費下載和安裝。要發掘Vault的更多資訊,請訪問其官方網站

相關文章