HashiCorp Vault使用說明

概述

在深入了解Vault之前,讓我們試著了解它試圖解決的問題:機密信息管理。

大多數(shù)應(yīng)用程序都需要存儲一些機密信息八毯,如數(shù)據(jù)庫的賬號密碼,其他供應(yīng)商的api秘鑰等瞄桨。之前我們一般將這些數(shù)據(jù)存儲在配置文件中宪彩。但是這樣并不安全,只要有服務(wù)器訪問權(quán)限的人讲婚,都能隨時查看并訪問這些信息尿孔。這樣會帶來極大的安全風險。

而且隨著項目的成長,復(fù)雜度不斷上升活合,各種分布式及微服務(wù)的興起雏婶,敏感信息會分布在各個機器上,同時不斷在服務(wù)器之間傳播白指,大大增加了安全隱患留晚。

這時候就需要一個統(tǒng)一的機密信息管理服務(wù),vault就在這樣的背景下誕生了告嘲。

使用說明

安裝

下載軟件:https://www.vaultproject.io/downloads

解壓后得到可執(zhí)行文件错维,該文件是同時使服務(wù)器也是客戶端。

啟動

vault 使用HCL格式的配置文件橄唬。新建 config.hcl并填入以下內(nèi)容:

# 開啟web界面赋焕,http://127.0.0.1:8200/ui。不需要可以去掉
ui = true

# 使用文件存儲
storage "file" {
  path    = "data"
}

# 此處不開啟tls仰楚,正式環(huán)境下請配置證書
listener "tcp" {
  address     = "127.0.0.1:8200" 
  tls_disable = 1
}

更多配置請查看:https://www.vaultproject.io/docs/configuration

啟動服務(wù)器

$ vault server -config=config.hcl

==> Vault server configuration:

                     Cgo: disabled
              Listener 1: tcp (addr: "127.0.0.1:8200", cluster address: "127.0.0.1:8201", max_request_duration: "1m30s", max_request_size: "33554432", tls: "disabled")
               Log Level: info
                   Mlock: supported: false, enabled: false
           Recovery Mode: false
                 Storage: file
                 Version: Vault v1.4.2

==> Vault server started! Log data will stream in below:

如果出現(xiàn)以下提示:

Error initializing core: Failed to lock memory: cannot allocate memory

This usually means that the mlock syscall is not available.
Vault uses mlock to prevent memory from being swapped to
disk. This requires root privileges as well as a machine
that supports mlock. Please enable mlock on your system or
disable Vault from using it. To disable Vault from using it,
set the `disable_mlock` configuration option in your configuration
file.

可以根據(jù)提示內(nèi)容隆判,將 disable_mlock 設(shè)為true。線上環(huán)境建議使用支持mlock的系統(tǒng)

初始化

在第一次使用的時候僧界,需要初始化vault侨嘀。之后再啟動將不需要進行該操作。

$ vault operator init

Unseal Key 1: 9t43suWPep3s7z1vOS0RmowPm22Iu2NQg7WilKdrCm6c
Unseal Key 2: R9uaDFGzIoBEAgd15MQAbAxXXz8PslPJNId6SU7urDL6
Unseal Key 3: u2i5zcldyFLxh4I3uZ64aIxKSO0nu/jv3xaIqtZj7k9C
Unseal Key 4: BQ0Zcvz1/HboAmAXEtLfCiiW+8UOimCL6PyP9a1WITLR
Unseal Key 5: ByBsXsY1He6xfFCrZYaFnSsBANqoiKdHcp0YITLbEGF0

Initial Root Token: s.QIysbqxb4We3k9QBZmXf2e4g

Vault initialized with 5 key shares and a key threshold of 3. Please securely
distribute the key shares printed above. When the Vault is re-sealed,
restarted, or stopped, you must supply at least 3 of these keys to unseal it
before it can start servicing requests.

Vault does not store the generated master key. Without at least 3 key to
reconstruct the master key, Vault will remain permanently sealed!

It is possible to generate new unseal keys, provided you have a quorum of
existing unseal keys shares. See "vault operator rekey" for more information.

上面最重要的數(shù)據(jù)是
Unseal Key
Initial Root Token
這些數(shù)據(jù)只會在第一次初始化的時候顯示捂襟,之后再也不會顯示了咬腕,如果丟失該數(shù)據(jù),以后將無法使用系統(tǒng)葬荷,所以請妥善保管這些數(shù)據(jù)郎汪。

seal / unseal

當前服務(wù)為seal狀態(tài),也就是“密封”狀態(tài)闯狱,無法進行任何操作煞赢。我們需要先進行unseal,然后才能進行后續(xù)操作哄孤。注意:服務(wù)重啟后默認為seal狀態(tài)照筑。每次重啟服務(wù)都需要unseal。

輸入以下命令:

$ vault operator unseal

Unseal Key (will be hidden):
Key                Value
---                -----
Seal Type          shamir
Initialized        true
Sealed             true
Total Shares       5
Threshold          3
Unseal Progress    1/3
Unseal Nonce       c767af4b-6faa-893b-0a87-234113fba0af
Version            1.4.2
HA Enabled         false

提示輸入unseal key瘦陈,輸完之后凝危,發(fā)現(xiàn)Sealed 還是true,其中Unseal Progress 1/3晨逝。

我們需要輸入之前給的5個unseal key 中的3個不同的key才能解鎖蛾默。繼續(xù)輸入之前的命令,直到輸入第三次出現(xiàn)如下提示:

$ vault operator unseal

Unseal Key (will be hidden):
Key             Value
---             -----
Seal Type       shamir
Initialized     true
Sealed          false
Total Shares    5
Threshold       3
Version         1.4.2
Cluster Name    vault-cluster-02ad08de
Cluster ID      9224f28f-f454-93bf-db06-0d0f88a8da76
HA Enabled      false

這時候系統(tǒng)已經(jīng)解鎖捉貌,可以進行后續(xù)操作

登錄

使用之前init的時候得到的Initial Root Token進行登錄

$ vault login s.QIysbqxb4We3k9QBZmXf2e4g

Success! You are now authenticated. The token information displayed below
is already stored in the token helper. You do NOT need to run "vault login"
again. Future Vault requests will automatically use this token.

Key                  Value
---                  -----
token                s.QIysbqxb4We3k9QBZmXf2e4g
token_accessor       LQjYKYNbD9K6qffjaFQvDF9l
token_duration       ∞
token_renewable      false
token_policies       ["root"]
identity_policies    []
policies             ["root"]

作為一個root user鼓择。我們可以重新seal服務(wù),命令為:vault operator seal支竹。該命令可以在緊急情況鎖定整個系統(tǒng),禁止其他人使用急前。

創(chuàng)建secrets

在vault中,我們具體的數(shù)據(jù)保存在secrets中瀑构,產(chǎn)看當前所擁有的secrets:

$ vault secrets list

Path          Type         Accessor              Description
----          ----         --------              -----------
cubbyhole/    cubbyhole    cubbyhole_607ffff0    per-token private secret storage
identity/     identity     identity_c728700b     identity store
sys/          system       system_f9998969       system endpoints used for control, policy and debugging

創(chuàng)建我們需要的secrets:

$ vault secrets enable -path=my-secret kv

Success! Enabled the kv secrets engine at: my-secret/

上面的kv代表類型Secrets Engine裆针。更多Engine類型查看:https://www.vaultproject.io/docs/secrets

添加policy并創(chuàng)建token

接下來會創(chuàng)建兩個Policy,一個是admin寺晌,一個是reader世吨。admin可以進行任何操作,用于管理數(shù)據(jù)呻征。而reader則只能進行讀操作耘婚。

首先創(chuàng)建文件admin.hcl:

# my-secret是之前創(chuàng)建的secrets
path "my-secret/*" {
  capabilities = ["create", "read", "update", "delete", "list"]
}

接著創(chuàng)建文件reader.hcl:

# my-secret是之前創(chuàng)建的secrets
path "my-secret/*" {
  capabilities = ["create", "read", "update", "delete", "list"]
}

然后再命令行執(zhí)行:

$ vault policy write admin-policy admin.hcl

Success! Uploaded policy: admin-policy
$ vault policy write reader-policy reader.hcl

Success! Uploaded policy: reader-policy

creaete token

$ vault token create -policy=admin-policy
Key                  Value
---                  -----
token                s.aZUepwj4AL2vsC5bHIfkN15U
token_accessor       pGg98pa7i9SnqaZg1Q3yjMu8
token_duration       768h
token_renewable      true
token_policies       ["admin-policy" "default"]
identity_policies    []
policies             ["admin-policy" "default"]
$ vault token create -policy=reader-policy
Key                  Value
---                  -----
token                s.5mTr03zVlAlrDim9jEwud5nF
token_accessor       f4oYLlEVkkb5HL3PzH6yk3rF
token_duration       768h
token_renewable      true
token_policies       ["default" "reader-policy"]
identity_policies    []
policies             ["default" "reader-policy"]

請將上面創(chuàng)建的兩個token妥善保存,后續(xù)讀寫操作都用這兩個token來完成怕犁。

到目前為止,我們已經(jīng)完成了初始工作己莺,考慮到線上環(huán)境一般都是通過接口方式對數(shù)據(jù)進行讀寫奏甫,接下來會用http api的方式進行操作。

為了便于區(qū)分兩個token凌受,同時方便后續(xù)調(diào)用阵子,將兩個token寫入環(huán)境變量:

# admin的token
$ export VAULT_TOKEN_ADMIN = s.aZUepwj4AL2vsC5bHIfkN15U

# reader的token
$ export VAULT_TOKEN_READER = s.5mTr03zVlAlrDim9jEwud5nF

寫入

通過admin的token寫入數(shù)據(jù):

$  curl \
    --header "X-Vault-Token: $VAULT_TOKEN_ADMIN" \
    --request POST \
    --data '{ "mysql": {"username":"myname","password": "my-long-password"} }' \
    http://127.0.0.1:8200/v1/my-secret/data/creds

其中v1是前綴,my-secret 是之前創(chuàng)建的secrets胜蛉,data/creds 是后面的path挠进,可以任意創(chuàng)建。

這次試用reader的token來寫入數(shù)據(jù):

$  curl \
    --header "X-Vault-Token: $VAULT_TOKEN_READER" \
    --request POST \
    --data '{ "mysql": {"username":"myname","password": "my-long-password"} }' \
    http://127.0.0.1:8200/v1/my-secret/data/creds

提示無權(quán)限誊册,表示之前創(chuàng)建的policy正式起效:

{
    "errors": [
        "1 error occurred:\n\t* permission denied\n\n"
    ]
}

這次試用reader token來獲取數(shù)據(jù):

$  curl \
    --header "X-Vault-Token: $VAULT_TOKEN_READER" \
    --request GET \
    http://127.0.0.1:8200/v1/my-secret/data/creds
{
    "request_id": "33dc39a8-b64d-14f7-2512-88a8806131bb",
    "lease_id": "",
    "renewable": false,
    "lease_duration": 2764800,
    "data": {
        "mysql": {
            "password": "my-long-password",
            "username": "myname"
        }
    },
    "wrap_info": null,
    "warnings": null,
    "auth": null
}

其中的data字段就是之前存入的數(shù)據(jù)领突。
到目前為止,vault的基本試用方式以及介紹完畢案怯。想要了解更多可查看官方資料:
基本教程:https://www.vaultproject.io/docs
api教程:https://www.vaultproject.io/api-docs

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末君旦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子嘲碱,更是在濱河造成了極大的恐慌金砍,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件麦锯,死亡現(xiàn)場離奇詭異恕稠,居然都是意外死亡,警方通過查閱死者的電腦和手機扶欣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門鹅巍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來千扶,“玉大人,你說我怎么就攤上這事昆著∠孛玻” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵凑懂,是天一觀的道長煤痕。 經(jīng)常有香客問我,道長接谨,這世上最難降的妖魔是什么摆碉? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮脓豪,結(jié)果婚禮上巷帝,老公的妹妹穿的比我還像新娘。我一直安慰自己扫夜,他們只是感情好楞泼,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著笤闯,像睡著了一般堕阔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上颗味,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天超陆,我揣著相機與錄音,去河邊找鬼浦马。 笑死时呀,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的晶默。 我是一名探鬼主播谨娜,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼磺陡!你這毒婦竟也來了瞧预?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤仅政,失蹤者是張志新(化名)和其女友劉穎垢油,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體圆丹,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡滩愁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了辫封。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片硝枉。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡廉丽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出妻味,到底是詐尸還是另有隱情正压,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布责球,位于F島的核電站焦履,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏雏逾。R本人自食惡果不足惜嘉裤,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望栖博。 院中可真熱鬧屑宠,春花似錦、人聲如沸仇让。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丧叽。三九已至,卻和暖如春蠢正,著一層夾襖步出監(jiān)牢的瞬間骇笔,已是汗流浹背省店。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工嚣崭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人懦傍。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓雹舀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親粗俱。 傳聞我的和親對象是個殘疾皇子说榆,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355