vault是一個密碼/證書集中式管理工具,經過HTTP-API對外提供統一的密碼訪問入口,而且提供權限控制以及詳細的日誌審計功能。linux
一個系統可能須要訪問多個帶密碼的後端:例如數據庫、經過API keys對外部系統進行調用,面向服務的架構通訊等等。要將衆多系統中的用戶和權限對應起來已經很是困難,加上提供密鑰滾動功能、安全的存儲後端還要有詳細的審計日誌,自定義解決方案几乎不太可能。這也就是vault存在的意義。git
(1)安全的存儲後端:任意的鍵值對密碼都能存儲在vault。vault在把數據寫入存儲後端以前會先將數據加密,因此即便你直接讀取存儲後端數據也沒法拿到真正的數據。vault的存儲後端能夠是文件、Consul、etcd等等github
(2)動態密碼生成:vault可以按需生成某些後端的密碼,例如:AWS、SQL數據庫等等。例如當一個應用須要訪問AWS的S3 bucket,應用向vault請求訪問S3 bucket的證書,vault能按需生成一個指定權限的AWS密鑰,而且可以根據租期自動銷燬這個密鑰。數據庫
(3)數據加密:vault能夠在不對數據存儲的狀況下,對數據進行加密和解密。安全團隊只需定義好加密方法,開發將加密後的數據存儲在例如SQL之類的後端便可,而無需設計本身的加密方式。後端
(4)租期和續租:在vualt裏面,所有的密碼均可以跟租期聯繫起來。在租期結束時,vault會自動銷燬對應的密碼。客戶端可以經過renew-API進行續租。安全
(5) 銷燬:vault自己支持對密碼進行銷燬,不只支持銷燬單個密碼,還支持銷燬與之關聯的密碼。好比指定某個用戶讀取的所有密碼,或者特定類型的密碼。銷燬功能可以在密碼被泄露的時候輔助鎖定系統。bash
(1) 做爲集中存儲各個服務器帳號密碼的服務器。目前咱們有服務器須要訪問到有密碼的後端的時候,有幾種方案:服務器
第一種方案帶來的問題是使用麻煩,後兩種方案帶來的問題是維護和變動麻煩。好比DB密碼泄露,須要修改密碼,首先DBA修改密碼,而後通知到應用,應用再作代碼上的變動。若是使用vault的話,DBA只要在vault上面修改好密碼以後通知應用從新從vault拉取最新密碼就好了。架構
(2)爲每個操做單位動態分配帳號工具
好比過去咱們想要對某些敏感操做進行審計,可是因爲生成帳號比較麻煩,因此存在公用帳號的狀況。vault支持爲某些後端動態生成帳號的功能,好比SQL,當某個應用向vault請求帳號密碼的時候,vault可以爲每次請求生成一個獨一無二的SQL帳號密碼。
(3) 做爲證書服務器
vault可以做爲CA服務器,根據請求信息自動頒發證書。而且提供在線CA和CRL的功能。不過目前只能在vault裏面新生成ROOT-CA,不能導入原有的ROOT-CA。
(4)做爲OAUTH服務器
vault支持多種認證後端,好比github、kubernetes、帳號密碼等等。vault可以將這些帳號關聯成一個用戶,在用戶認證以後返回一個token供用戶使用。
以Linux-64bit系統爲例
# 下載 vault wget https://releases.hashicorp.com/vault/0.9.1/vault_0.9.1_linux_amd64.zip unzip vault_0.9.1_linux_amd64.zip # 啓動dev模式,此模式下任何改動都在內存中進行,數據不會保存 ./vault server -dev # 啓動信息 # ==> Vault server configuration: # ... # Unseal Key: 0Gg1yc/qY2W3f82DnxcZTEjdvMuxpjOV5nzNnVrMy4U= # Root Token: eb45cfe5-9cca-3b23-5416-49f2febeb59c # ... # 咱們能看到vault自動監聽在了127.0.0.1:8200,並自動爲咱們生成了unseal-key以及root-token # 啓封 vault,在使用vault以前首先要對vault進行啓封,才能對vault進行後續操做。使用上面生成的uneal-key,其實dev模式下默認是已經啓封狀態 vault unseal 0Gg1yc/qY2W3f82DnxcZTEjdvMuxpjOV5nzNnVrMy4U= # 認證,使用上面的Root Token vault auth eb45cfe5-9cca-3b23-5416-49f2febeb59c # 將vault地址寫入環境變量 export VAULT_ADDR='http://127.0.0.1:8200'
# 使用vault-cli操做vault,實際上後臺是調用經過HTTP-API來操做vault # 寫入密碼,在此你能夠寫入任意的鍵值對 vault write secret/vault host=127.0.0.1 password=123456
# 讀取剛剛寫入的密碼 vault read secret/vault
固然vault能作的遠遠不止上面的鍵值對存儲和讀取,這裏主要對vault的使用作一個大概的介紹,以及簡單使用,後面會深刻講解vault的各個組件以及高級用法。