私密信息管理工具 Vault 快速入門 - 知乎切換模式寫文章登錄/注冊私密信息管理工具 Vault 快速入門INFINI Labs?已認證賬號什么是 VaultVault 是一個基于身份的秘密和加密管理系統(tǒng)。秘密是您想要嚴格控制訪問的任何內(nèi)容,例如 API 加密密鑰、密碼和證書。 Vault 提供由身份驗證和授權(quán)方法控制的加密服務(wù)。使用 Vault 的 UI、CLI 或 HTTP API,可以安全地存儲和管理、嚴格控制(限制)和審核對機密和其他敏感數(shù)據(jù)的訪問。為什么需要 Vault執(zhí)行密碼輪換策略很痛苦掌握機密的員工離職后可能泄密或是惡意報復開發(fā)者不小心把機密信息隨著代碼上傳到公網(wǎng)的源碼倉庫造成泄密管理多個系統(tǒng)的機密非常麻煩需要將機密信息安全地加密后存儲,但又不想將密鑰暴露給應(yīng)用程序,以防止應(yīng)用程序被入侵后連帶密鑰一起泄漏Vault 架構(gòu)圖Vault 只暴漏了存儲后端(Storage Backend) 和 API,其他部分都被保護起來了。Vault 并不信任后端存儲,存放的都是密文。安裝此處以 Mac 為例,其他平臺參考官方文檔Vault 安裝向?qū)? brew tap hashicorp/tap
? brew install hashicorp/tap/vault
啟動 Vault(Dev 模式)? vault server -dev
WARNING! dev mode is enabled! In this mode, Vault runs entirely in-memory
and starts unsealed with a single unseal key. The root token is already
authenticated to the CLI, so you can immediately begin using Vault.
You may need to set the following environment variables:
$ export VAULT_ADDR='http://127.0.0.1:8200'
The unseal key and root token are displayed below in case you want to
seal/unseal the Vault or re-authenticate.
Unseal Key: QNqS6xZOnJKsbcz60PThJE2O070F2+9b7LLrGGgI7os=
Root Token: hvs.IKbh5pTGI0Qn08G5QNJb4jPY
Development mode should NOT be used in production installations!
查看服務(wù)狀態(tài)? vault status
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed false
Total Shares 1
Threshold 1
Version 1.12.1
Build Date 2022-10-27T12:32:05Z
Storage Type inmem
Cluster Name vault-cluster-c5c1f8a4
Cluster ID 60514532-959b-9540-ea21-5d9c968a21ba
HA Enabled false
寫入第一個密碼? vault write kv/infini value=infinilabs
Success! Data written to: kv/infini
如果報這個錯誤:vault write kv/infini value=infinilabsError writing data to kv/cheng: Error making API request.URL: PUT http://127.0.0.1:8200/v1/kv/chengCode: 404. Errors:no handler for route 'kv/cheng'是因為 kv 存儲沒有啟動(不同版本默認初始設(shè)置不同),執(zhí)行:? vault secrets enable kv
讀取一條數(shù)據(jù)? vault read kv/infini
Key Value
--- -----
refresh_interval 768h
value labs
使用 Consul 作為數(shù)據(jù)存儲的 BackendVault 自身不存儲數(shù)據(jù),需要提供存儲后臺。 支持多種后臺。? brew tap hashicorp/tap
? brew install hashicorp/tap/consul
啟動 Consul? consul agent -dev
==> Starting Consul agent...
Version: '1.14.1'
Build Date: '2022-11-21 16:56:07 +0000 UTC'
Node ID: '6d9bcfc4-60cf-5d9b-c4fa-764127a94af6'
Node name: 'ChengKai-MacBook.local'
Datacenter: 'dc1' (Segment: '
Server: true (Bootstrap: false)
Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, gRPC-TLS: 8503, DNS: 8600)
Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
Gossip Encryption: false
Auto-Encrypt-TLS: false
HTTPS TLS: Verify Incoming: false, Verify Outgoing: false, Min Version: TLSv1_2
gRPC TLS: Verify Incoming: false, Min Version: TLSv1_2
Internal RPC TLS: Verify Incoming: false, Verify Outgoing: false (Verify Hostname: false), Min Version: TLSv1_2
==> Log data will now stream in as it occurs:
2022-11-30T16:34:52.604+0800 [WARN] agent: Node name "ChengKai-MacBook.local" will not be discoverable via DNS due to invalid characters. Valid characters include all alpha-numerics and dashes.
2022-11-30T16:34:52.609+0800 [WARN] agent.auto_config: Node name "ChengKai-MacBook.local" will not be discoverable via DNS due to invalid characters. Valid characters include all alpha-numerics and dashes.
2022-11-30T16:34:52.613+0800 [INFO] agent.server.raft: initial configuration: index=1 servers="[{Suffrage:Voter ID:6d9bcfc4-60cf-5d9b-c4fa-764127a94af6 Address:127.0.0.1:8300}]"
2022-11-30T16:34:52.614+0800 [INFO] agent.server.raft: entering follower state: follower="Node at 127.0.0.1:8300 [Follower]" leader-address= leader-id=
啟動 Vault(生產(chǎn)模式)創(chuàng)建配置文件,使用剛剛啟動的 Consul 作為存儲后臺。注意: 這種方式啟動,為生產(chǎn)模式,需要手動配置和管理秘鑰。storage "consul"{
address = "127.0.0.1:8500"
path = "vault/"
}
listener "tcp"{
address = "127.0.0.1:8200"
tls_disable = 1
}執(zhí)行命令,啟動? vault server -config=config.hcl
WARNING! mlock is not supported on this system! An mlockall(2)-like syscall to
prevent memory from being swapped to disk is not supported on this system. For
better security, only run Vault on systems where this call is supported. If
you are running Vault in a Docker container, provide the IPC_LOCK cap to the
container.
==> Vault server configuration:
Api Address: http://127.0.0.1:8200
Cgo: disabled
Cluster Address: https://127.0.0.1:8201
Go Version: go1.19.2
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: consul (HA available)
Version: Vault v1.12.1, built 2022-10-27T12:32:05Z
Version Sha: e34f8a14fb7a88af4640b09f3ddbb5646b946d9c
==> Vault server started! Log data will stream in below:
2022-11-30T16:42:59.995+0800 [INFO] proxy environment: http_proxy="" https_proxy="" no_proxy=""
2022-11-30T16:43:00.006+0800 [WARN] no `api_addr` value specified in config or in VAULT_API_ADDR; falling back to detection if possible, but this value should be manually set
注意: 此時雖然服務(wù)啟動了,但是 Vault 處于封印狀態(tài)(sealed), 不可用。此時我們執(zhí)行操作,會看到如下提示:? vault read kv/cheng
Error reading kv/cheng: Error making API request.
URL: GET http://127.0.0.1:8200/v1/kv/cheng
Code: 503. Errors:
* Vault is sealed
上面 Dev 模式啟動的 Vault 實際上幫助我們自動地把創(chuàng)建主密鑰、解封的步驟都完成了。生產(chǎn)模式,則需要手動配置后續(xù)步驟。補充點小知識Vault 保存在 Backend 中的數(shù)據(jù)都是加密的Vault 密鑰稱為 Master Key 主密鑰,Vault 默認使用 Shamir 算法,把主密鑰切分成 M 份,管理員必須至少提供其中的 N 份才能還原出主密鑰(這里的 M 和 N 都是可配置的,M>=N)理想狀態(tài)下,我們必須把這 M 份密鑰分配給公司內(nèi) M 個不同的人,只有在獲取其中 N 個人的授權(quán)后,Vault 才可以成功解密主密鑰。Vault 初始化(生產(chǎn)模式)注意看,接下來的步驟,會生成 5 個秘鑰,一個 Root 用戶的 Token。真實場景下,這 5 個秘鑰會分配給 5 個不同的人員管理。 至少正確輸入 3 個秘鑰,才能解封 Vault。熱知識: Vault 每次啟動/重啟,都會進入封印狀態(tài),未解封時,幾乎無法執(zhí)行任何操作。> vault operator init
Unseal Key 1: IDcHr5kT7hhgYKiDxF6Qlp2g11UVXNu+f5VX51+3jpeD
Unseal Key 2: dfjqn++KcqLDIDnBcE8B0fIvicI7T9TQCxBSI7b1oE12
Unseal Key 3: DaFtgnYsm0rTQcPpLTPaDTNW338BHhyhezct+ySTT45L
Unseal Key 4: Z1vmlLm/KBydeLrmVf9ELqlJoaUgwzNvzx6ddXttc4Nk
Unseal Key 5: x2lIwJiCz3lNqzBPzkryrnatfZT9mahj3yfW4qxT3eMZ
Initial Root Token: s.o7NjzR6qXEvJEwPYpmVFOt4P
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 keys 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.Vault 默認訪問 https 的地址,所以如果執(zhí)行初始化報如下錯誤:Error authenticating: error looking up token: Get "https://127.0.0.1:8200/v1/auth/token/lookup-self": http: server gave HTTP response to HTTPS client設(shè)置一下 Vault 地址即可,執(zhí)行:export VAULT_ADDR='http://127.0.0.1:8200'查看 Vault 狀態(tài)此時 Vault 處于封印狀態(tài)(Sealed 為 true)? vault status
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed true
Total Shares 5
Threshold 3
Unseal Progress 0/3
Unseal Nonce n/a
Version 1.9.2
Storage Type consul
HA Enabled true
解封 Vault使用需要 vault operator unseal 命令來執(zhí)行解封。至少需要 3 個秘鑰來解封。? vault operator unseal IDcHr5kT7hhgYKiDxF6Qlp2g11UVXNu+f5VX51+3jpeD
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed true
Total Shares 5
Threshold 3
Unseal Progress 1/3
Unseal Nonce 9eeaaa92-d673-51d3-b993-d3affe68b5a3
Version 1.9.2
Storage Type consul
HA Enabled true
注意: 每次輸入一個秘鑰,會看到如上提示"Unseal Progress 1/3"。 但是,這里僅僅表示已經(jīng)輸入多少個秘鑰,并不代表輸入的秘鑰都是正確的!!如何使用 Vault 保存秘密進入下一步之前,先來看看 Vault 提供了哪些措施,用來保護我們的秘密?秘鑰的保護機制: 秘鑰被拆分成 5 份,至少正確輸入 3 個才能解封。策略控制(權(quán)限控制): 可以針對每個 Path 設(shè)置策略。有效期: Vault 生成的每個令牌(Token)都有有效期。開始前,我們先寫入 2 條測試數(shù)據(jù):? vault write kv/infini value=infinilabs
Success! Data written to: kv/infini
? vault write kv/ck value=chengkai
Success! Data written to: kv/ck
熱知識:"kv/infini" 是一個 Path(路徑), 可以簡單理解為數(shù)據(jù)庫中的一個表。并不是 kv 數(shù)據(jù)庫 當中的 key。你可以試試這樣存數(shù)據(jù)并讀取:? vault write kv/infini ck=chengkai c=cheng k=kai
Success! Data written to: kv/infini
? vault read kv/infini
Key Value
--- -----
refresh_interval 768h
c cheng
ck chengkai
k kai
制定策略新建策略文件輸入以下內(nèi)容path "kv/infini" {
capabilities = ["read"]
}
解釋: 以上策略,是指在 infini 這個路徑(path)下,具有只讀權(quán)限。創(chuàng)建策略先登錄已經(jīng)解封的 Vault(使用初始化生成的 root token 登錄)? vault login s.o7NjzR6qXEvJEwPYpmVFOt4P
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.o7NjzR6qXEvJEwPYpmVFOt4P
token_accessor tKZyxkkFvrmhQeTsoDOogcoV
token_duration ∞
token_renewable false
token_policies ["root"]
identity_policies []
policies ["root"]
? vault policy write infini-readonly policy.hcl
Success! Uploaded policy: infini-readonly
"infini-readonly" 是策略的名稱,這個可以自定義生成 Token 并指定策略生成對"kv/infini"具有只讀權(quán)限的 Token, 執(zhí)行:? vault token create -policy="infini-readonly"
Key Value
--- -----
token s.bHzsfREs9MGirYO8yZ2TbAzq
token_accessor nPuAQzNTn28vMMUKcDu0mN8g
token_duration 768h
token_renewable true
token_policies ["infini-readonly" "default"]
identity_policies []
policies ["infini-readonly" "default"]
此處生成了新的 Token: s.bHzsfREs9MGirYO8yZ2TbAzq, 有效期 768 小時(別拿計算器了,我算過了,32 天)使用新生成的 Token 登錄(別找退出操作了,直接再執(zhí)行 login 即可):? vault login s.bHzsfREs9MGirYO8yZ2TbAzq
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.bHzsfREs9MGirYO8yZ2TbAzq
token_accessor nPuAQzNTn28vMMUKcDu0mN8g
token_duration 767h56m19s
token_renewable true
token_policies ["infini-readonly" "default"]
identity_policies []
policies ["infini-readonly" "default"]
驗證新生成的 Token嘗試讀 kv/infini 的秘密:? vault read kv/infini
Key Value
--- -----
refresh_interval 768h
value infinilabs
Wow!成功讀取!試試寫入操作? vault write kv/infini value=c1
Error writing data to kv/cheng: Error making API request.
URL: PUT http://127.0.0.1:8200/v1/kv/infini
Code: 403. Errors:
* 1 error occurred:
* permission denied
有個疑問,你說當前這個 Token,可以讀取 kv/ck 的秘密嗎?? vault read kv/ck
Error reading kv/ck: Error making API request.
URL: GET http://127.0.0.1:8200/v1/kv/ck
Code: 403. Errors:
* 1 error occurred:
* permission denied
啊歐! 不行~OK, 到這里了,簡單的對 Vault 做了個入門。 Vault 的功能點還有很多,去看看下面的文檔吧~~參考文檔[1]: Vault 官方文檔[2]: Vault 教程(中文)[3]: How To Securely Manage Secrets with HashiCorp Vault on Ubuntu 20.04發(fā)布于 2023-08-23 15:06?IP 屬地湖南工具軟件加密?贊同 1??添加評論?分享?喜歡?收藏?申請
私密信息管理利器 HashiCorp Vault——簡介 - 掘金
首頁 首頁
沸點
課程
直播
活動
競賽
商城
APP
插件 搜索歷史
清空
創(chuàng)作者中心
寫文章 發(fā)沸點 寫筆記 寫代碼 草稿箱 創(chuàng)作靈感
查看更多
會員
登錄
注冊
私密信息管理利器 HashiCorp Vault——簡介
shuhari
2018-02-08
5,849
最近,由于項目中需要使用保存和管理的加密配置,并且我相信自己發(fā)明加密方法并不是一個合理的選擇,所以開始尋找相關(guān)的方案。經(jīng)過選型,確定了 HashCorp Valut。
目前,在網(wǎng)絡(luò)上除了官方文檔之外,能找到的相關(guān)資料非常至少。這或許是因為 Vault 尚未得到大規(guī)模使用,不過也有可能是因為涉及到私密性的信息,所以不方便公開講。不論原因為何,本文和后續(xù)的文章希望把使用 HashiCorp Vault 的經(jīng)驗和心得記錄下來,為后來人提供一點方便。
關(guān)于 HashiCorp
HashiCorp 是一家專注于基礎(chǔ)設(shè)施解決方案的公司,業(yè)務(wù)范圍涵蓋軟件開發(fā)中的部署、運維、安全等方面。下圖是該公司的主要產(chǎn)品線,其中大部分知名度不算高,但大名鼎鼎的 Vagrant 相信很多人都聽說過。
什么是 HashiCorp Vault
HashiCorp Vault 的 Slogan 是 A Tool for Managing Secrets,這個口號很好的描述了該產(chǎn)品的定位。大多數(shù)軟件項目都會不同程度的用到諸如 登錄密碼/Token/證書/API Key 等私密信息,這些信息用明碼保存顯然是很不安全的,如果不小心簽入到版本控制系統(tǒng),還會造成重大的安全問題(這方面的事故我們已經(jīng)聽到過很多次了)。
Vault 就是為了解決這一問題而創(chuàng)立的。它提供了這些功能:
集中管理各種私密信息;
為私密信息設(shè)置租期(Lease),到期后自動失效;
密鑰的動態(tài)生成、注銷和滾動更新;
動態(tài)創(chuàng)建無需保存的一次性登錄密鑰;
作為數(shù)據(jù)加密/解密接口;
完整的審計記錄;
命令行 以及 RESTful API 訪問接口;
此外,Vault 設(shè)計為靈活的可插拔架構(gòu),允許靈活的設(shè)置各種后端引擎和安全策略。例如:
可以用內(nèi)置 Token、用戶/密碼、LDAP、Amazon IAM、Github 等作為認證授權(quán)機制;
可以使用內(nèi)存/本地文件/Etcd/Consul/ZooKeeper/RDBMS/NoSQL/云平臺等作為數(shù)據(jù)存儲;
可以為數(shù)據(jù)庫/SSH/Consul/AWS/Nomad/PKI/RabbitMQ 等多種平臺生成和管理訪問密鑰;
可以與 Cousul、Chef、Ansible 等運維工具集成起來共同使用;
使用場景和比較
由于私密信息的管理是一個帶有普遍性的需求,所以業(yè)界對該問題也已經(jīng)有多種處理辦法。這里簡單描述 Vault 和其他私密管理方案的對比,以便你有一個更好的理解。
需要說明的是,這里的描述部分來自官方文檔中的 Vault vs Other Software。官方的描述更加完整,而我按照自己的理解做了整理和簡化。如果你英文比較好的話,我建議直接閱讀原文。
運維工具(Chef,Puppet,Consul等) 由于經(jīng)常需要記錄各種連接信息,這些運維工具也有自己的加密機制,例如 Chef data bag/Puppet Hiera。如果重點在于運維,對安全性要求不是很高,那么使用這些工具來處理私密信息也是完全可行的。它們的問題在于安全性不夠高,容易發(fā)生泄露問題,此外也缺乏像 Vault 那樣完整的審核記錄。另外,Vault 也能夠和這些運維工具結(jié)合起來使用。
硬件安全模塊(Hardware Security Model, HSM) 按照定義來說是基于硬件的,不過也有 Amazon CloudHSM 這樣的服務(wù)形式。HSM 的安全等級是足夠高的,不過它們通常價格昂貴、管理麻煩,基于硬件的形式對云平臺通常不太友好,大多數(shù)中小企業(yè)一般不會考慮。如果你確實有 HSM 可用的話,那么用它來管理 Vault 的主密鑰也是一個合理的選擇,不過用 HSM 來管理所有私密信息通常是太過重量級了。
DropBox(及其他類似的網(wǎng)盤) 我們都明白:用這種方法來管理私密信息,在安全性的角度來講肯定是不合格的,但由于使用方便,事實上還真有很多不太注重安全的用戶走了這個路子。Vault 的作者當然是不鼓勵這種做法的,并且希望 Vault 相比其他更加重量級的解決方案來說能夠在使用上更加簡便。
Amazon KMS(Key Management Service) 從名字上就能看出,KMS 注重的是密鑰的管理,Vault 則更加靈活。KMS 和 Amazon 自身的云平臺集成更佳,并且是一個純粹的云端解決方案,而 Vault 既可以本地運行,也可以部署到云端(有官方的 Docker 鏡像可用)。
Square Keywhiz 我們知道 Square 主要是做網(wǎng)絡(luò)支付的公司,業(yè)務(wù)特點決定了他們對于安全也非常重視,Keywhize 就是他們開發(fā)的私密信息管理工具。我沒有用過 Keywhiz,不好評價。不過從官方介紹來看,Keywhiz 和 Vault 的功能特性非常相似,基本可以互相取代。目前, Vault 似乎受關(guān)注度更高一些,未來就看哪一個項目發(fā)展的更好了。為了方便比較,我在下面做了一個 Vault 和 Keywhiz 的簡單對比表,你可以按照自己的喜好來選擇。
1Password 1Password 等工具也是部分用戶喜歡的私密信息解決方案。盡管這是一個相當不錯的密碼管理工具,但它是存粹的客戶端程序,管理密碼基本靠人工,從專業(yè)的 DevOps 觀點來說,這種方式是不合理的。此外,它也缺乏密鑰生成和期限管理、審核記錄等高級功能。
商業(yè)解決方案 某些存儲平臺,例如 SQL Server,提供了自己的列加密機制。如果你的項目大量依賴于這些平臺、且遷移到其他平臺的可能性很小,那么使用內(nèi)置的機制也無可厚非。它的(潛在)問題是不開源、不透明,存在供應(yīng)商鎖定的風險。
自定義方案 有些用戶和項目可能已經(jīng)開發(fā)了自己的私密信息解決方案,通常是自己編寫的代碼。按照業(yè)界的普遍觀點,自己編碼處理加密問題是危險的,非安全專家編寫的安全代碼通常會有大量的潛在漏洞,而且這些漏洞通常比一般的業(yè)務(wù) bug 更加難以發(fā)現(xiàn)和解決??傊?,不要發(fā)明自己的密碼方案。
項目
Vault
Keywhiz
廠商
HashiCorp
Square
模式
開源
開源
開發(fā)語言
Golang
Java
代碼庫
Github
Github
Forks
1206
148
Stars
8449
1867
術(shù)語
由于是一個安全工具,HashiCorp Vault 使用中會涉及到不少有一定專業(yè)性的術(shù)語,如果不理解這些術(shù)語的話,在使用該平臺和閱讀文章時會收到一定影響。以下列出該工具使用中將會用到的一些術(shù)語,你可以先粗略瀏覽一下,有個大概印象,不完全理解也沒有關(guān)系,后面在使用過程中會結(jié)合具體用法詳細講述。
術(shù)語
中文
釋義
Lease
租期
私密信息的有效期/過期時間
Seal/Unseal
密封/解封
對私密信息存儲開啟/關(guān)閉客戶端訪問的過程
Token
憑據(jù)
Vault 驗證用戶的默認機制
Path
路徑
Vault 區(qū)分數(shù)據(jù)的保存位置
Secret Engine
加密引擎
支持不同渠道的加密方法
Auth Method
驗證方法
驗證登錄用戶信息
Policy
策略
實現(xiàn)用戶授權(quán)機制
相關(guān)問題
Vault 是一個英文常用詞。如果你把這個詞直接放到搜索引擎里面去的話,可能會找到一大堆不相干的內(nèi)容。所以你最好是搜索產(chǎn)品的全稱:HashiCorp Vault。
系列文章
本文是該系列的第一篇,講述 HashiCorp Vault 的總體概念和功能。接下來將介紹該工具的安裝和使用。
私密信息管理利器 HashiCorp Vault——簡介
私密信息管理利器 HashiCorp Vault——啟動和讀寫
私密信息管理利器 HashiCorp Vault——加密引擎
私密信息管理利器 HashiCorp Vault——驗證和授權(quán)
私密信息管理利器 HashiCorp Vault——部署
私密信息管理利器 HashiCorp Vault——REST API
shuhari
后端 @自由職業(yè)
35
文章
47k
閱讀
27
粉絲 目錄 收起
關(guān)于 HashiCorp
什么是 HashiCorp Vault
使用場景和比較
術(shù)語
相關(guān)問題
系列文章
友情鏈接:
杜月笙家譜關(guān)系圖
沈先生的心頭寶無彈窗
快穿女主小三心機綠茶pop文
ajax數(shù)據(jù)庫javascript
redis集群三種方式cor
天醫(yī)風水師的五個媳婦
GitHub - hashicorp/vault: A tool for secrets management, encryption as a service, and privileged access management
Skip to content
Toggle navigation
Sign in
Product
Actions
Automate any workflow
Packages
Host and manage packages
Security
Find and fix vulnerabilities
Codespaces
Instant dev environments
Copilot
Write better code with AI
Code review
Manage code changes
Issues
Plan and track work
Discussions
Collaborate outside of code
Explore
All features
Documentation
GitHub Skills
Blog
Solutions
For
Enterprise
Teams
Startups
Education
By Solution
CI/CD & Automation
DevOps
DevSecOps
Resources
Learning Pathways
White papers, Ebooks, Webinars
Customer Stories
Partners
Open Source
GitHub Sponsors
Fund open source developers
The ReadME Project
GitHub community articles
Repositories
Topics
Trending
Collections
Pricing
Search or jump to...
Search code, repositories, users, issues, pull requests...
Search
Clear
Search syntax tips
Provide feedback
We read every piece of feedback, and take your input very seriously.
Include my email address so I can be contacted
Cancel
Submit feedback
Saved searches
Use saved searches to filter your results more quickly
Name
Query
To see all available qualifiers, see our documentation.
Cancel
Create saved search
Sign in
Sign up
You signed in with another tab or window. Reload to refresh your session.
You signed out in another tab or window. Reload to refresh your session.
You switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert
hashicorp
/
vault
Public
Notifications
Fork
4k
Star
29.4k
A tool for secrets management, encryption as a service, and privileged access management
www.vaultproject.io/
License
View license
29.4k
stars
4k
forks
Branches
Tags
Activity
Star
Notifications
Code
Issues
994
Pull requests
343
Actions
Security
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Security
Insights
hashicorp/vault
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
?mainBranchesTagsGo to fileCodeFolders and filesNameNameLast commit messageLast commit dateLatest commit?History19,197 Commits.github.github??.hooks.hooks??.release.release??META.dMETA.d??apiapi??auditaudit??builtinbuiltin??changelogchangelog??commandcommand??dependencies/2-25-21dependencies/2-25-21??enosenos??helperhelper??httphttp??internal/observability/eventinternal/observability/event??internalsharedinternalshared??limitslimits??physicalphysical??pluginsplugins??scriptsscripts??sdksdk??serviceregistrationserviceregistration??shamirshamir??terraformterraform??toolstools??uiui??vaultvault??versionversion??websitewebsite??.copywrite.hcl.copywrite.hcl??.gitattributes.gitattributes??.gitignore.gitignore??.go-version.go-version??.yamllint.yamllint??CHANGELOG-pre-v1.10.mdCHANGELOG-pre-v1.10.md??CHANGELOG-v0.mdCHANGELOG-v0.md??CHANGELOG.mdCHANGELOG.md??CODEOWNERSCODEOWNERS??CONTRIBUTING.mdCONTRIBUTING.md??DockerfileDockerfile??HCPV_badge.pngHCPV_badge.png??LICENSELICENSE??MakefileMakefile??README.mdREADME.md??buf.gen.yamlbuf.gen.yaml??buf.lockbuf.lock??buf.yamlbuf.yaml??go.modgo.mod??go.sumgo.sum??main.gomain.go??main_test.gomain_test.go??make.batmake.bat??scan.hclscan.hcl??View all filesRepository files navigationREADMECode of conductLicenseSecurityVault
Please note: We take Vault's security and our users' trust very seriously. If you believe you have found a security issue in Vault, please responsibly disclose by contacting us at [email protected].
Website: https://www.vaultproject.io
Announcement list: Google Groups
Discussion forum: Discuss
Documentation: https://developer.hashicorp.com/vault/docs
Tutorials: https://developer.hashicorp.com/vault/tutorials
Certification Exam: https://developer.hashicorp.com/certifications/security-automation
Vault is a tool for securely accessing secrets. A secret is anything that you want to tightly control access to, such as API keys, passwords, certificates, and more. Vault provides a unified interface to any secret, while providing tight access control and recording a detailed audit log.
A modern system requires access to a multitude of secrets: database credentials, API keys for external services, credentials for service-oriented architecture communication, etc. Understanding who is accessing what secrets is already very difficult and platform-specific. Adding on key rolling, secure storage, and detailed audit logs is almost impossible without a custom solution. This is where Vault steps in.
The key features of Vault are:
Secure Secret Storage: Arbitrary key/value secrets can be stored
in Vault. Vault encrypts these secrets prior to writing them to persistent
storage, so gaining access to the raw storage isn't enough to access
your secrets. Vault can write to disk, Consul,
and more.
Dynamic Secrets: Vault can generate secrets on-demand for some
systems, such as AWS or SQL databases. For example, when an application
needs to access an S3 bucket, it asks Vault for credentials, and Vault
will generate an AWS keypair with valid permissions on demand. After
creating these dynamic secrets, Vault will also automatically revoke them
after the lease is up.
Data Encryption: Vault can encrypt and decrypt data without storing
it. This allows security teams to define encryption parameters and
developers to store encrypted data in a location such as a SQL database without
having to design their own encryption methods.
Leasing and Renewal: All secrets in Vault have a lease associated
with them. At the end of the lease, Vault will automatically revoke that
secret. Clients are able to renew leases via built-in renew APIs.
Revocation: Vault has built-in support for secret revocation. Vault
can revoke not only single secrets, but a tree of secrets, for example,
all secrets read by a specific user, or all secrets of a particular type.
Revocation assists in key rolling as well as locking down systems in the
case of an intrusion.
Documentation, Getting Started, and Certification Exams
Documentation is available on the Vault website.
If you're new to Vault and want to get started with security automation, please
check out our Getting Started guides
on HashiCorp's learning platform. There are also additional guides
to continue your learning.
For examples of how to interact with Vault from inside your application in different programming languages, see the vault-examples repo. An out-of-the-box sample application is also available.
Show off your Vault knowledge by passing a certification exam. Visit the
certification page
for information about exams and find study materials
on HashiCorp's learning platform.
Developing Vault
If you wish to work on Vault itself or any of its built-in systems, you'll
first need Go installed on your machine.
For local dev first make sure Go is properly installed, including setting up a
GOPATH. Ensure that $GOPATH/bin is in
your path as some distributions bundle the old version of build tools. Next, clone this
repository. Vault uses Go Modules,
so it is recommended that you clone the repository outside of the GOPATH.
You can then download any required build tools by bootstrapping your environment:
$ make bootstrap
...
To compile a development version of Vault, run make or make dev. This will
put the Vault binary in the bin and $GOPATH/bin folders:
$ make dev
...
$ bin/vault
...
To compile a development version of Vault with the UI, run make static-dist dev-ui. This will
put the Vault binary in the bin and $GOPATH/bin folders:
$ make static-dist dev-ui
...
$ bin/vault
...
To run tests, type make test. Note: this requires Docker to be installed. If
this exits with exit status 0, then everything is working!
$ make test
...
If you're developing a specific package, you can run tests for just that
package by specifying the TEST variable. For example below, only
vault package tests will be run.
$ make test TEST=./vault
...
Importing Vault
This repository publishes two libraries that may be imported by other projects:
github.com/hashicorp/vault/api and github.com/hashicorp/vault/sdk.
Note that this repository also contains Vault (the product), and as with most Go
projects, Vault uses Go modules to manage its dependencies. The mechanism to do
that is the go.mod file. As it happens, the presence of that file
also makes it theoretically possible to import Vault as a dependency into other
projects. Some other projects have made a practice of doing so in order to take
advantage of testing tooling that was developed for testing Vault itself. This
is not, and has never been, a supported way to use the Vault project. We aren't
likely to fix bugs relating to failure to import github.com/hashicorp/vault
into your project.
See also the section "Docker-based tests" below.
Acceptance Tests
Vault has comprehensive acceptance tests
covering most of the features of the secret and auth methods.
If you're working on a feature of a secret or auth method and want to
verify it is functioning (and also hasn't broken anything else), we recommend
running the acceptance tests.
Warning: The acceptance tests create/destroy/modify real resources, which
may incur real costs in some cases. In the presence of a bug, it is technically
possible that broken backends could leave dangling data behind. Therefore,
please run the acceptance tests at your own risk. At the very least,
we recommend running them in their own private account for whatever backend
you're testing.
To run the acceptance tests, invoke make testacc:
$ make testacc TEST=./builtin/logical/consul
...
The TEST variable is required, and you should specify the folder where the
backend is. The TESTARGS variable is recommended to filter down to a specific
resource to test, since testing all of them at once can sometimes take a very
long time.
Acceptance tests typically require other environment variables to be set for
things such as access keys. The test itself should error early and tell
you what to set, so it is not documented here.
For more information on Vault Enterprise features, visit the Vault Enterprise site.
Docker-based Tests
We have created an experimental new testing mechanism inspired by NewTestCluster.
An example of how to use it:
import (
"testing"
"github.com/hashicorp/vault/sdk/helper/testcluster/docker"
)
func Test_Something_With_Docker(t *testing.T) {
opts := &docker.DockerClusterOptions{
ImageRepo: "hashicorp/vault", // or "hashicorp/vault-enterprise"
ImageTag: "latest",
}
cluster := docker.NewTestDockerCluster(t, opts)
defer cluster.Cleanup()
client := cluster.Nodes()[0].APIClient()
_, err := client.Logical().Read("sys/storage/raft/configuration")
if err != nil {
t.Fatal(err)
}
}
Or for Enterprise:
import (
"testing"
"github.com/hashicorp/vault/sdk/helper/testcluster/docker"
)
func Test_Something_With_Docker(t *testing.T) {
opts := &docker.DockerClusterOptions{
ImageRepo: "hashicorp/vault-enterprise",
ImageTag: "latest",
VaultLicense: licenseString, // not a path, the actual license bytes
}
cluster := docker.NewTestDockerCluster(t, opts)
defer cluster.Cleanup()
}
Here is a more realistic example of how we use it in practice. DefaultOptions uses
hashicorp/vault:latest as the repo and tag, but it also looks at the environment
variable VAULT_BINARY. If populated, it will copy the local file referenced by
VAULT_BINARY into the container. This is useful when testing local changes.
Instead of setting the VaultLicense option, you can set the VAULT_LICENSE_CI environment
variable, which is better than committing a license to version control.
Optionally you can set COMMIT_SHA, which will be appended to the image name we
build as a debugging convenience.
func Test_Custom_Build_With_Docker(t *testing.T) {
opts := docker.DefaultOptions(t)
cluster := docker.NewTestDockerCluster(t, opts)
defer cluster.Cleanup()
}
There are a variety of helpers in the github.com/hashicorp/vault/sdk/helper/testcluster
package, e.g. these tests below will create a pair of 3-node clusters and link them using
PR or DR replication respectively, and fail if the replication state doesn't become healthy
before the passed context expires.
Again, as written, these depend on having a Vault Enterprise binary locally and the env
var VAULT_BINARY set to point to it, as well as having VAULT_LICENSE_CI set.
func TestStandardPerfReplication_Docker(t *testing.T) {
opts := docker.DefaultOptions(t)
r, err := docker.NewReplicationSetDocker(t, opts)
if err != nil {
t.Fatal(err)
}
defer r.Cleanup()
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
defer cancel()
err = r.StandardPerfReplication(ctx)
if err != nil {
t.Fatal(err)
}
}
func TestStandardDRReplication_Docker(t *testing.T) {
opts := docker.DefaultOptions(t)
r, err := docker.NewReplicationSetDocker(t, opts)
if err != nil {
t.Fatal(err)
}
defer r.Cleanup()
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
defer cancel()
err = r.StandardDRReplication(ctx)
if err != nil {
t.Fatal(err)
}
}
Finally, here's an example of running an existing OSS docker test with a custom binary:
$ GOOS=linux make dev
$ VAULT_BINARY=$(pwd)/bin/vault go test -run 'TestRaft_Configuration_Docker' ./vault/external_tests/raft/raft_binary
ok github.com/hashicorp/vault/vault/external_tests/raft/raft_binary 20.960s
About
A tool for secrets management, encryption as a service, and privileged access management
www.vaultproject.io/
Topics
go
vault
secrets
Resources
Readme
License
View license
Code of conduct
Code of conduct
Security policy
Security policy
Activity
Custom properties
Stars
29.4k
stars
Watchers
825
watching
Forks
4k
forks
Report repository
Releases
130
v1.15.6
Latest
Feb 29, 2024
+ 129 releases
Packages
0
No packages published
Used by 1.8k
+ 1,827
Contributors
1,293
+ 1,279 contributors
Languages
Go
58.9%
MDX
17.8%
JavaScript
15.8%
Handlebars
4.1%
HCL
1.6%
TypeScript
0.8%
Other
1.0%
Footer
? 2024 GitHub,?Inc.
Footer navigation
Terms
Privacy
Security
Status
Docs
Contact
Manage cookies
Do not share my personal information
You can’t perform that action at this time.
Vault從入門到精通系列之一:深入了解安全工具Vault、Vault根令牌和解封密鑰,詳細整理部署Vault的詳細步驟_如何配置一個vaultmount實例-CSDN博客
Vault從入門到精通系列之一:深入了解安全工具Vault、Vault根令牌和解封密鑰,詳細整理部署Vault的詳細步驟
最新推薦文章于?2023-12-22 14:16:05?發(fā)布
最笨的羊羊
最新推薦文章于?2023-12-22 14:16:05?發(fā)布
閱讀量2k
收藏
8
點贊數(shù)
1
分類專欄:
日常分享專欄
文章標簽:
Vault
Vault根令牌和解封密鑰
部署Vault的詳細步驟
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/zhengzaifeidelushang/article/details/131283430
版權(quán)
日常分享專欄
專欄收錄該內(nèi)容
421 篇文章
62 訂閱
訂閱專欄
Vault從入門到精通系列之一:深入了解安全工具Vault、Vault根令牌和解封密鑰,詳細整理部署Vault的詳細步驟
一、深入了解安全工具Vault二、Vault根令牌和解封密鑰的含義和作用三、centos7上部署和啟動Vault的流程四、vault下載地址五、安裝vault六、啟動Vault七、總結(jié)和延伸
一、深入了解安全工具Vault
Vault是一種開源工具,用于安全地存儲、管理和控制訪問各種機密信息,如密碼、API令牌、安全配置和其他敏感數(shù)據(jù)。Vault使用強大的加密和安全管理技術(shù)來保護這些機密信息,并為應(yīng)用程序和服務(wù)提供安全的訪問控制機制。該工具支持各種云平臺和技術(shù)堆棧,并提供多種API和CLI接口,使其易于集成和使用。Vault的主要特點包括中心化管理、角色分配和權(quán)限控制、審計和日志記錄、動態(tài)秘鑰持續(xù)更新等。這些功能使得Vault成為一款頗受開發(fā)者和企業(yè)信賴的安全工具。
二、Vault根令牌和解封密鑰的含義和作用
Vault 中的根令牌和解封密鑰是用于管理和保護 Vault 中加密數(shù)據(jù)的重要憑據(jù)。
根令牌是 Vault 中的最高權(quán)限憑據(jù),擁有此令牌的用戶可以在 Vault 中進行任何操作,包括創(chuàng)建和刪除機密、管理策略、配置身份驗證等。因此,根令牌需要嚴格保密,并只在必要時進行使用。解封密鑰則是用于解密 Vault 中加密數(shù)據(jù)的重要憑據(jù),可以用于解密 Vault 的存儲密鑰,解密后可以訪問存儲在 Vault 中的機密信息。因此,解封密鑰也需要嚴格保密,通常會將其存儲在冷存儲中,以防止未經(jīng)授權(quán)的訪問和泄露。只有在必要時才使用解封密鑰,例如在進行恢復操作或在創(chuàng)建新的存儲密鑰時。
三、centos7上部署和啟動Vault的流程
在CentOS 7上部署和啟動Vault可以按照以下步驟進行:
下載Vault二進制文件:可以從官網(wǎng)下載,也可以使用wget命令從Vault的GitHub頁面下載。 安裝Vault:將Vault二進制文件移到/usr/local/bin目錄下,并添加執(zhí)行權(quán)限。 配置Vault:可以在/etc目錄下創(chuàng)建一個Vault配置文件,指定Vault的監(jiān)聽地址和端口,以及存儲Vault數(shù)據(jù)的路徑。 啟動Vault:使用vault server命令啟動Vault服務(wù),會自動讀取/etc目錄下的配置文件并啟動服務(wù)。 初始化Vault:使用vault init命令初始化Vault,生成一組Root Token和Unseal Key。 解封Vault:使用vault unseal命令輸入Unseal Key解封Vault服務(wù)。 登錄Vault:使用vault login命令輸入Root Token登錄Vault。
四、vault下載地址
vault下載地址:
vault官方下載地址選擇下載的版本
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install vault
五、安裝vault
執(zhí)行命令:
sudo yum install -y yum-utils
sudo yum install -y yum-utils
Loaded plugins: fastestmirror, langpacks, priorities, versionlock
Determining fastest mirrors
epel | 4.7 kB 00:00:00
extras | 2.9 kB 00:00:00
hashicorp | 1.4 kB 00:00:00
os | 3.6 kB 00:00:00
pgdg-common/7/x86_64/signature | 198 B 00:00:00
pgdg-common/7/x86_64/signature | 2.9 kB 00:00:00 !!!
pgdg11/7/x86_64/signature | 198 B 00:00:00
pgdg11/7/x86_64/signature | 3.6 kB 00:00:00 !!!
pgdg12/7/x86_64/signature | 198 B 00:00:00
pgdg12/7/x86_64/signature | 3.6 kB 00:00:00 !!!
pgdg13/7/x86_64/signature | 198 B 00:00:00
pgdg13/7/x86_64/signature | 3.6 kB 00:00:00 !!!
pgdg14/7/x86_64/signature | 198 B 00:00:00
pgdg14/7/x86_64/signature | 3.6 kB 00:00:00 !!!
pgdg15/7/x86_64/signature | 198 B 00:00:00
pgdg15/7/x86_64/signature | 3.6 kB 00:00:00 !!!
updates | 2.9 kB 00:00:00
(1/2): pgdg-common/7/x86_64/primary_db | 181 kB 00:00:02
(2/2): hashicorp/7/x86_64/primary | 165 kB 00:00:05
hashicorp 1196/1196
Package yum-utils-1.1.31-54.el7_8.noarch already installed and latest version
Nothing to do
執(zhí)行命令:sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
Loaded plugins: fastestmirror, langpacks, priorities, versionlock
adding repo from: https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
grabbing file https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo to /etc/yum.repos.d/hashicorp.repo
repo saved to /etc/yum.repos.d/hashicorp.repo
執(zhí)行命令:sudo yum -y install vault
sudo yum -y install vault
Loaded plugins: fastestmirror, langpacks, priorities, versionlock
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package vault.x86_64 0:1.13.3-1 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
==================================================================================================================================================
Package Arch Version Repository Size
==================================================================================================================================================
Installing:
vault x86_64 1.13.3-1 hashicorp 92 M
Transaction Summary
==================================================================================================================================================
Install 1 Package
Total download size: 92 M
Installed size: 234 M
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
warning: /var/cache/yum/x86_64/7/hashicorp/packages/vault-1.13.3-1.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID a621e701: NOKEY00:00:00 ETA
Public key for vault-1.13.3-1.x86_64.rpm is not installed
vault-1.13.3-1.x86_64.rpm | 92 MB 00:00:24
Retrieving key from https://rpm.releases.hashicorp.com/gpg
Importing GPG key 0xA621E701:
Userid : "HashiCorp Security (HashiCorp Package Signing)
Fingerprint: 798a ec65 4e5c 1542 8c8e 42ee aa16 fcbc a621 e701
From : https://rpm.releases.hashicorp.com/gpg
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : vault-1.13.3-1.x86_64 1/1Generating Vault TLS key and self-signed certificate...
Generating a 4096 bit RSA private key
.......................++
.................................................................................................++
writing new private key to 'tls.key'
-----
Vault TLS key and self-signed certificate have been generated in '/opt/vault/tls'.
Verifying : vault-1.13.3-1.x86_64 1/1
Installed:
vault.x86_64 0:1.13.3-1
Complete!
六、啟動Vault
執(zhí)行啟動命令:
vault server -dev -dev-root-token-id=“dev-only-token”
vault server -dev -dev-root-token-id="dev-only-token"
==> Vault server configuration:
Api Address: http://127.0.0.1:8200
Cgo: disabled
Cluster Address: https://127.0.0.1:8201
Environment Variables: CLASSPATH, FLINK_HOME, GODEBUG, HADOOP_HOME, HISTFILE, HISTSIZE, HISTTIMEFORMAT, HIVE_HOME, HOME, HOSTNAME, JAVA_HOME, LANG, LESSOPEN, LOGNAME, LS_COLORS, MAIL, MONGODB_HOME, MSSQL_HOME, PATH, PROMPT_COMMAND, PWD, PYTHON3_HOME, QT_GRAPHICSSYSTEM, QT_GRAPHICSSYSTEM_CHECKED, SHELL, SHLVL, SPARK_HOME, SUDO_COMMAND, SUDO_GID, SUDO_UID, SUDO_USER, TERM, TMOUT, USER, USERNAME, XDG_SESSION_ID, ZOOKEEP_HOME, _
Go Version: go1.20.4
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:
Mlock: supported: true, enabled: false
Recovery Mode: false
Storage: inmem
Version: Vault v1.13.3, built 2023-06-06T18:12:37Z
Version Sha: 3bedf816cbf851656ae9e6bd65dd4a67a9ddff5e
==> Vault server started! Log data will stream in below:
2023-06-19T10:38:19.735+0800 [INFO] proxy environment: http_proxy="" https_proxy="" no_proxy=""
2023-06-19T10:38:19.735+0800 [WARN] no `api_addr` value specified in config or in VAULT_API_ADDR; falling back to detection if possible, but this value should be manually set
2023-06-19T10:38:19.736+0800 [INFO] core: Initializing version history cache for core
2023-06-19T10:38:19.736+0800 [INFO] core: security barrier not initialized
2023-06-19T10:38:19.736+0800 [INFO] core: security barrier initialized: stored=1 shares=1 threshold=1
2023-06-19T10:38:19.737+0800 [INFO] core: post-unseal setup starting
2023-06-19T10:38:19.751+0800 [INFO] core: loaded wrapping token key
2023-06-19T10:38:19.751+0800 [INFO] core: successfully setup plugin catalog: plugin-directory=""
2023-06-19T10:38:19.751+0800 [INFO] core: no mounts; adding default mount table
2023-06-19T10:38:19.753+0800 [INFO] core: successfully mounted: type=cubbyhole version="v1.13.3+builtin.vault" path=cubbyhole/ namespace="ID: root. Path: "
2023-06-19T10:38:19.753+0800 [INFO] core: successfully mounted: type=system version="v1.13.3+builtin.vault" path=sys/ namespace="ID: root. Path: "
2023-06-19T10:38:19.754+0800 [INFO] core: successfully mounted: type=identity version="v1.13.3+builtin.vault" path=identity/ namespace="ID: root. Path: "
2023-06-19T10:38:19.755+0800 [INFO] core: successfully mounted: type=token version="v1.13.3+builtin.vault" path=token/ namespace="ID: root. Path: "
2023-06-19T10:38:19.756+0800 [INFO] rollback: starting rollback manager
2023-06-19T10:38:19.757+0800 [INFO] core: restoring leases
2023-06-19T10:38:19.758+0800 [INFO] expiration: lease restore complete
2023-06-19T10:38:19.758+0800 [INFO] identity: entities restored
2023-06-19T10:38:19.759+0800 [INFO] identity: groups restored
2023-06-19T10:38:19.759+0800 [INFO] core: Recorded vault version: vault version=1.13.3 upgrade time="2023-06-19 02:38:19.759135384 +0000 UTC" build date=2023-06-06T18:12:37Z
2023-06-19T10:38:19.981+0800 [INFO] core: post-unseal setup complete
2023-06-19T10:38:19.981+0800 [INFO] core: root token generated
2023-06-19T10:38:19.981+0800 [INFO] core: pre-seal teardown starting
2023-06-19T10:38:19.981+0800 [INFO] rollback: stopping rollback manager
2023-06-19T10:38:19.982+0800 [INFO] core: pre-seal teardown complete
2023-06-19T10:38:19.982+0800 [INFO] core.cluster-listener.tcp: starting listener: listener_address=127.0.0.1:8201
2023-06-19T10:38:19.982+0800 [INFO] core.cluster-listener: serving cluster requests: cluster_listen_address=127.0.0.1:8201
2023-06-19T10:38:19.982+0800 [INFO] core: post-unseal setup starting
2023-06-19T10:38:19.982+0800 [INFO] core: loaded wrapping token key
2023-06-19T10:38:19.982+0800 [INFO] core: successfully setup plugin catalog: plugin-directory=""
2023-06-19T10:38:19.983+0800 [INFO] core: successfully mounted: type=system version="v1.13.3+builtin.vault" path=sys/ namespace="ID: root. Path: "
2023-06-19T10:38:19.983+0800 [INFO] core: successfully mounted: type=identity version="v1.13.3+builtin.vault" path=identity/ namespace="ID: root. Path: "
2023-06-19T10:38:19.983+0800 [INFO] core: successfully mounted: type=cubbyhole version="v1.13.3+builtin.vault" path=cubbyhole/ namespace="ID: root. Path: "
2023-06-19T10:38:19.984+0800 [INFO] core: successfully mounted: type=token version="v1.13.3+builtin.vault" path=token/ namespace="ID: root. Path: "
2023-06-19T10:38:19.984+0800 [INFO] rollback: starting rollback manager
2023-06-19T10:38:19.984+0800 [INFO] core: restoring leases
2023-06-19T10:38:19.985+0800 [INFO] identity: entities restored
2023-06-19T10:38:19.985+0800 [INFO] identity: groups restored
2023-06-19T10:38:19.985+0800 [INFO] expiration: lease restore complete
2023-06-19T10:38:19.985+0800 [INFO] core: post-unseal setup complete
2023-06-19T10:38:19.985+0800 [INFO] core: vault is unsealed
2023-06-19T10:38:19.987+0800 [INFO] expiration: revoked lease: lease_id=auth/token/root/h272562f04a210e20b2b4d865e2a84db2d53929c149d30e4e06dcd93ebe88dbac
2023-06-19T10:38:19.989+0800 [INFO] core: successful mount: namespace="" path=secret/ type=kv version=""
WARNING! dev mode is enabled! In this mode, Vault runs entirely in-memory
and starts unsealed with a single unseal key. The root token is already
authenticated to the CLI, so you can immediately begin using Vault.
You may need to set the following environment variables:
$ export VAULT_ADDR='http://127.0.0.1:8200'
The unseal key and root token are displayed below in case you want to
seal/unseal the Vault or re-authenticate.
Unseal Key: DY/t5B7OSPzH1XZq5RJoEr0o7l4Ea5epNl9h0b/zaF4=
Root Token: dev-only-token
Development mode should NOT be used in production installations!
如上所示,成功啟動Vault,至此成功安裝部署Vault
注意命令行輸出的解封密鑰和根令牌,要妥善保存解封密鑰和根令牌:
Unseal Key: DY/t5B7OSPzH1XZq5RJoEr0o7l4Ea5epNl9h0b/zaF4=Root Token: dev-only-token
七、總結(jié)和延伸
總結(jié):
至此成功安裝部署Vault
延展:
下一篇詳細了解下如何應(yīng)用安全工具Vault
優(yōu)惠劵
最笨的羊羊
關(guān)注
關(guān)注
1
點贊
踩
8
收藏
覺得還不錯?
一鍵收藏
打賞
知道了
0
評論
Vault從入門到精通系列之一:深入了解安全工具Vault、Vault根令牌和解封密鑰,詳細整理部署Vault的詳細步驟
至此成功安裝部署Vault下一篇詳細了解下如何應(yīng)用安全工具Vault。
復制鏈接
掃一掃
專欄目錄
Vault部署保姆級教程
流浪法師的博客
06-27
1005
Vault部署教程,保姆級,
vault-cli:可配置的命令行界面工具(和python庫),可與Hashicorp Vault進行交互
05-23
vault-cli :Hashicorp Vault的面向12因子的命令行工具
vault-cli是Python 3.6+工具,可提供簡單的交互操作來操縱秘密。 使用vault-cli ,可以遵循原則將您的秘密保密。
一些功能
一次配置,由于級聯(lián)(本地,用戶,全局)YAML配置文件,可在任何地方使用
輕松閱讀,瀏覽,書寫,移動,刪除秘密
以YAML形式一次讀取多個機密
以您的秘密作為環(huán)境變量啟動進程
使用從庫中配置的ssh-agent啟動進程
編寫內(nèi)部包含機密的模板文件
將多個秘密組合為一個秘密(例如,來自組件的DSN字符串)
vault-cli試圖使訪問秘密變得既安全又輕松。
展示柜
您可以使用vault-cli做以下幾件事:
$ # Install:
$ pip install vault-cli
$ # Write a secret:
$ vault-cli set mysec
參與評論
您還未登錄,請先
登錄
后發(fā)表或查看評論
Vault從入門到精通系列之二:啟動Vault服務(wù)器
zhengzaifeidelushang的博客
06-19
1261
Vault 作為客戶端-服務(wù)器應(yīng)用程序運行。Vault 服務(wù)器是唯一與數(shù)據(jù)存儲和后端交互的 Vault 架構(gòu)。通過 Vault CLI 完成的所有操作都通過 TLS 連接與服務(wù)器交互。在本篇博客中,啟動以開發(fā)模式運行的 Vault 服務(wù)器并與之交互。
K8S使用helm部署vault集群
最新發(fā)布
ma_qi_chao的博客
12-22
1446
備注:為什么要進行vault初始化,如果不初始化,vault服務(wù)pod的READY會一直處于0/1狀態(tài),只有把vault的pod進行初始化生成初始token服務(wù)才會正常啟動運行。備注:安裝mysql只是測試vault加密的數(shù)據(jù)能否測試登錄mysql,并不是把mysql作為vault數(shù)據(jù)庫存儲使用。以上完成了vault部署到測試的全部流程。
Vault: 基礎(chǔ)教程之內(nèi)置幫助及認證
博客
08-11
2706
四、內(nèi)置幫助
現(xiàn)在你已經(jīng)使用過鍵值對的密碼引擎及AWS下的動態(tài)密碼生成了,在兩個例子之中,結(jié)構(gòu)是使用都是不一樣的,那么你要如何記住使用什么路徑呢,vault里面有內(nèi)置的幫助系統(tǒng),可以通過api或者命令行訪問,同時生成可讀的幫助信息。
首先我們還是啟用aws,通過vault secrets enable -path=aws aws來啟用,然后即可使用vault path-help aws來查看路...
zfs-keyvault:systemd服務(wù)可從Azure Key Vault安全地加載ZFS加密密鑰
02-02
zfs-keyvault
使用加密文件系統(tǒng)安全,自動解鎖工具。
它是如何工作的?
簡而言之,它等效于ZFS加密文件系統(tǒng)的network-online.target :
ZFS文件系統(tǒng)加密密鑰放置在本地加密的密鑰存儲庫中,該存儲庫自身的加密密鑰放置在Azure Key Vault中。
引導后,系統(tǒng)服務(wù)會到達一個名為ZFS密鑰網(wǎng)關(guān)的小型Flask Web應(yīng)用程序,并請求存儲庫加密密鑰。
ZFS密鑰網(wǎng)關(guān)Web服務(wù)從人員獲得授權(quán),以通過Twilio SMS釋放存儲在Key Vault中的密鑰存儲庫的加密密鑰。 如果所有者通過回復SMS來授權(quán)請求??,則會從Key Vault中檢索密鑰并將其發(fā)送回去。
系統(tǒng)現(xiàn)在可以解密本地存儲庫并安裝加密的ZFS文件系統(tǒng),而文件系統(tǒng)加密密鑰永遠不會離開設(shè)備。
產(chǎn)品特點
掛載ZFS加密的文件系統(tǒng),而文件系統(tǒng)密鑰不會離開設(shè)備
通過短信通知所有者,以批準任何關(guān)鍵請求
利用Azure Key Vault來安全存儲存儲庫加密密鑰
CLI工具,方便管理包含文件系統(tǒng)加密密鑰的安全本地存儲庫
通過pexpect(stdin)將密鑰安全地傳遞到ZFS
網(wǎng)關(guān)將關(guān)鍵請求
Vault: 基礎(chǔ)教程之入門及使用介紹
熱門推薦
博客
08-11
2萬+
vault介紹
vault 是一個強大的密碼管理工具,它基于命令行,是開源的。
vault是非常強大的,它具有如下特性:
1. 安全密碼存儲
2. 動態(tài)密碼生成
3. 數(shù)據(jù)加密
4. 租期及更新
5. 廢棄
下面來一步步介紹vault。
一、使用入門
首先我們使用vault server -dev開啟vault的開發(fā)服務(wù)器,此服務(wù)器僅僅用于開發(fā)環(huán)境,生產(chǎn)環(huán)境下使用會導致不安...
Linux(Centos)舊版本操作系統(tǒng)配置舊版yum源(vault 源)的方法
你好帥(上局上段)
07-21
1634
舊版Centos操作系統(tǒng)在生存周期結(jié)束、停止維護后,官方會將舊版系統(tǒng)的yum源移動到的https//vault.centos.org中,使得舊版系統(tǒng)中配置的原有yum源往往會變得無法使用。2、打開https//mirrors.aliyun.com/repo/,找到與系統(tǒng)版本對應(yīng)的源。curl-ohttps//mirrors.aliyun.com/repo/將系統(tǒng)的yum源改為為https//vault.centos.org中的源。...
Vault: 基礎(chǔ)教程之部署
博客
08-11
4742
七、部署vault
配置
vault使用HCL文件配置:
storage "consul" {
address = "127.0.0.1:8500"
path = "vault/"
}
listener "tcp" {
address = "127.0.0.1:8200"
tls_disa
MAC(m1)-Centos8建議切換centos-vault源
興趣是最好的老師
01-04
187
Centos8(centos8官方源已下線,建議切換centos-vault源)
Vault-如何與運維體系融合
咖啡男孩之SRE之路
11-07
1474
上一篇《Vault-敏感信息保護的一種大膽嘗試》介紹了解決運維體系中安全問題的一個基石地位的平臺Vault,本篇跟大家分享下Vault如何與運維體系集成和聯(lián)動。
vault-token-helper:適用于macOS,Linux和Windows的@Hashicorp Vault令牌幫助器,支持安全令牌存儲和多個Vault服務(wù)器:locked_with_key:
05-15
保管庫令牌幫助器
@hashicorp Vault,支持在macOS,Linux和Windows上的本機秘密存儲。
特征
存儲和檢索多個Vault( $VAULT_ADDR )實例的令牌,簡化了使用多個Vault時操作員的工作流程。
支持的后端:
macOS鑰匙串
Linux(兼容DBus Secret Service的后端,例如:Gnome Keyring)
Windows(WinCred)
(GPG)
快速入門(macOS)
安裝:
brew install joemiller/taps/vault-token-helper
配置Vault以使用令牌幫助器。 這將創(chuàng)建~/.vault配置文件:
vault-token-helper enable
向Vault實例進行身份驗證以在本地加密和存儲新令牌,例如使用Okta auth后端:
export VAULT_AD
aws-vault:用于在開發(fā)環(huán)境中安全存儲和訪問AWS憑證的保險庫
01-30
AWS保險柜
AWS Vault是在開發(fā)環(huán)境中安全存儲和訪問AWS憑證的工具。
AWS Vault會將IAM憑證存儲在操作系統(tǒng)的安全密鑰庫中,然后從這些憑證中生成臨時憑證,以暴露給您的Shell和應(yīng)用程序。 它被設(shè)計為對AWS CLI工具的補充,并且了解。
查看更多信息。
正在安裝
您可以安裝AWS Vault:
通過下載
在帶有macOS上: brew install --cask aws-vault
在具有macOS上: port install aws-vault
在Windows上使用 : choco install aws-vault
在帶有Windows上: scoop install aws-vault
在Linux上使用: brew install aws-vault
在: pacman -S aws-vault
在: pkg install aws-vault
使用 : nix-env -i aws-vault
文獻資料
文件中提供了配置,用法,提示和技巧。
后端存儲
支持的保管庫后端是:
特勤局( , )
加密文件
使用--backend標
vault-init:初始化HashiCorp Vault并將根令牌和密鑰保存在您選擇的提供程序中
02-18
保管庫初始化
初始化HashiCorp Vault并將根令牌和密鑰保存在您選擇的提供程序中。
docker pull ghcr.io/pbar1/vault-init
用法
可以識別(例如VAULT_ADDR , VAULT_CACERT等)。
Usage of vault-init:
--file-path string Path on disk to save the Vault init result (default "vault-init.json")
--kube-secret-annotations stringToString Labels to add to the Kubernetes secret (default [])
--kube-secret-labels strin
如何使用 Vault 安全地存儲配置的 secret
華章IT官方博客
05-04
782
導讀:每一個應(yīng)用程序都有需要保密的信息,這些信息可能包括數(shù)據(jù)庫憑證,外部服務(wù)認證,甚至某些資源的位置。所有這些都統(tǒng)稱為密鑰。應(yīng)用程序需要一個安全的地方來存儲這些密鑰,無論是在應(yīng)用程序啟動時...
Vault實戰(zhàn)(一)-Vault介紹
sre救贖之路
12-20
954
Vault 是一個基于身份的秘密和加密管理系統(tǒng)。秘密是您想要嚴格控制訪問的任何內(nèi)容,例如 API 加密密鑰、密碼和證書。Vault 提供由身份驗證和授權(quán)方法控制的加密服務(wù)。使用 Vault 的 UI、CLI 或 HTTP API,可以安全地存儲和管理、嚴格控制(限制)和審核對機密和其他敏感數(shù)據(jù)的訪問。
vault配置指南
霧里華的博客
01-04
808
vault配置指南
Vault使用教程
bhwqq的博客
12-05
1154
本地開發(fā)環(huán)境啟動client server ,開發(fā)環(huán)境的server 數(shù)據(jù)都保存在內(nèi)存中,且交互式的內(nèi)容都是沒有tls協(xié)議加密的 ,請不要在生產(chǎn)環(huán)境運行dev環(huán)境
生產(chǎn)環(huán)境的數(shù)據(jù)應(yīng)該都保存在磁盤或者consul里。
vault server -dev //需要記錄下這個命令下的Unsealed key 和 access key
秘鑰如下:
Unseal Key: uDJZKpkZ0bvfPd3LnFmRLNgAQN8DNPBMeQQSMR//trk=
Root Token: s.H5lx3jTkUrdOM
CentOS-8.5.2111 Boot版安裝流程(配置yum源、配置遠程連接、服務(wù)自啟動)
林木無可棲的博客
07-06
3905
旨在創(chuàng)建一個輕量化的CentOS-8.5環(huán)境
The PersistentVolume "pv-vault-test01-vault1001" is invalid: spec.nodeAffinity: Required value: Local volume requires node affinity 配置文件案例
05-26
下面是一個示例的 PV 配置文件,其中使用了 nodeAffinity 來指定本地存儲卷的節(jié)點: ``` apiVersion: v1 kind: PersistentVolume metadata: name: pv-vault-test01-vault1001 spec: capacity: storage: 10Gi ...
“相關(guān)推薦”對你有幫助么?
非常沒幫助
沒幫助
一般
有幫助
非常有幫助
提交
最笨的羊羊
CSDN認證博客專家
CSDN認證企業(yè)博客
碼齡7年
大數(shù)據(jù)領(lǐng)域新星創(chuàng)作者
1867
原創(chuàng)
1068
周排名
457
總排名
208萬+
訪問
等級
2萬+
積分
3萬+
粉絲
2428
獲贊
305
評論
4503
收藏
私信
關(guān)注
熱門文章
深入了解海豚調(diào)度DolphinScheduler
48157
能ping通服務(wù)器,但telnet不通22端口問題解決方法匯總
21892
Mac系列之:Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP. Hide these hints with HOMEBREW
21573
Zabbix5 安裝教程
16579
MAC打開軟件報錯:無法驗證開發(fā)者的解決方法
15907
分類專欄
軟考高級系統(tǒng)架構(gòu)設(shè)計師考試
付費
232篇
debezium
付費
289篇
flume
付費
57篇
前端和后端開發(fā)
付費
121篇
大數(shù)據(jù)
付費
522篇
Ansible、Docker、K8S、服務(wù)器相關(guān)知識總結(jié)
付費
64篇
數(shù)據(jù)庫
付費
49篇
軟考高級信息系統(tǒng)項目管理師考試
付費
93篇
PMP項目管理
付費
41篇
軟考高級系統(tǒng)分析師
付費
12篇
zeppelin
付費
25篇
大數(shù)據(jù)平臺二次開發(fā)
付費
103篇
數(shù)據(jù)中臺開發(fā)實戰(zhàn)總結(jié)
付費
9篇
Kafka
付費
49篇
日常分享專欄
421篇
金融知識總結(jié)
27篇
全面解析企業(yè)財務(wù)報表
5篇
軟考信息系統(tǒng)項目管理師考試
Flink
56篇
Scala
1篇
面試題分享專欄
28篇
Java
8篇
數(shù)據(jù)分析
6篇
雅思學習每日知識分享
python
最新評論
Debezium報錯處理系列之二十二:SchemaBuilderException: Cannot create field because of field name duplication
最笨的羊羊:
私信我下報錯,幫你看下
Debezium報錯處理系列之二十二:SchemaBuilderException: Cannot create field because of field name duplication
試試頂頂頂:
大佬能解答一下嗎,被困擾好久了
數(shù)據(jù)庫系列之:什么是 SAP HANA?
CSDN-Ada助手:
MySQL入門 技能樹或許可以幫到你:https://edu.csdn.net/skill/mysql?utm_source=AI_act_mysql
Debezium報錯處理系列之二十二:SchemaBuilderException: Cannot create field because of field name duplication
試試頂頂頂:
大佬,問一下,為什么我設(shè)置了這兩個參數(shù)后,重啟任務(wù)依舊是不行的
Flink系列之:JDBC SQL 連接器
lgq-tzq:
我想問一下,在flink sql里面建的那張mysql的表,是不是可以用navicat連接數(shù)據(jù)庫,然后看到這個表
最新文章
金融知識分析系列之:凈資產(chǎn)收益率、權(quán)益乘數(shù)、公允價值、總資產(chǎn)周轉(zhuǎn)率、每股收益、扣除非經(jīng)常性損益后凈利潤、歸屬于母公司所有者的扣除非經(jīng)常性損益凈利潤、少數(shù)股東權(quán)益
上市公司財務(wù)報表精講系列一:黃山旅游
Debezium日常分享系列之:Debezium 2.6.0.Beta1發(fā)布
2024
03月
18篇
02月
29篇
01月
18篇
2023年555篇
2022年518篇
2021年491篇
2020年191篇
2019年48篇
目錄
目錄
分類專欄
軟考高級系統(tǒng)架構(gòu)設(shè)計師考試
付費
232篇
debezium
付費
289篇
flume
付費
57篇
前端和后端開發(fā)
付費
121篇
大數(shù)據(jù)
付費
522篇
Ansible、Docker、K8S、服務(wù)器相關(guān)知識總結(jié)
付費
64篇
數(shù)據(jù)庫
付費
49篇
軟考高級信息系統(tǒng)項目管理師考試
付費
93篇
PMP項目管理
付費
41篇
軟考高級系統(tǒng)分析師
付費
12篇
zeppelin
付費
25篇
大數(shù)據(jù)平臺二次開發(fā)
付費
103篇
數(shù)據(jù)中臺開發(fā)實戰(zhàn)總結(jié)
付費
9篇
Kafka
付費
49篇
日常分享專欄
421篇
金融知識總結(jié)
27篇
全面解析企業(yè)財務(wù)報表
5篇
軟考信息系統(tǒng)項目管理師考試
Flink
56篇
Scala
1篇
面試題分享專欄
28篇
Java
8篇
數(shù)據(jù)分析
6篇
雅思學習每日知識分享
python
目錄
評論
被折疊的??條評論
為什么被折疊?
到【灌水樂園】發(fā)言
查看更多評論
添加紅包
祝福語
請?zhí)顚懠t包祝福語或標題
紅包數(shù)量
個
紅包個數(shù)最小為10個
紅包總金額
元
紅包金額最低5元
余額支付
當前余額3.43元
前往充值 >
需支付:10.00元
取消
確定
下一步
知道了
成就一億技術(shù)人!
領(lǐng)取后你會自動成為博主和紅包主的粉絲
規(guī)則
hope_wisdom 發(fā)出的紅包
打賞作者
最笨的羊羊
你的鼓勵將是我創(chuàng)作的最大動力
¥1
¥2
¥4
¥6
¥10
¥20
掃碼支付:¥1
獲取中
掃碼支付
您的余額不足,請更換掃碼支付或充值
打賞作者
實付元
使用余額支付
點擊重新獲取
掃碼支付
錢包余額
0
抵扣說明:
1.余額是錢包充值的虛擬貨幣,按照1:1的比例進行支付金額的抵扣。 2.余額無法直接購買下載,可以購買VIP、付費專欄及課程。
余額充值
VAULT中文(繁體)翻譯:劍橋詞典
詞典
翻譯
語法
同義詞詞典
+Plus
劍橋詞典+Plus
Shop
劍橋詞典+Plus
我的主頁
+Plus 幫助
退出
劍橋詞典+Plus
我的主頁
+Plus 幫助
退出
登錄
/
注冊
中文 (簡體)
查找
查找
英語-中文(繁體)
vault 在英語-中文(繁體)詞典中的翻譯
vaultnoun [ C ] uk
Your browser doesn't support HTML5 audio
/v?lt/ us
Your browser doesn't support HTML5 audio
/vɑ?lt/
vault noun [C]
(ARCH)
Add to word list
Add to word list
a type of arch that supports a roof or ceiling, especially in a church or public building, or a ceiling or roof supported by several of these arches
(尤指教堂或公共建築的)拱頂,穹頂
vault noun [C]
(ROOM)
(UK also vaults) a room, especially in a bank, with thick walls and a strong door, used to store money or valuable things in safe conditions
(尤指銀行的)金庫,保險庫
a bank vault
銀行金庫
She entered the vault with an armed guard.
她同一名武裝保安一起進入了金庫。
a room under a church or a small building in a cemetery where dead bodies are buried
(教堂的)地下墓室;(墓地的)墓穴
She was buried in the family vault.
她被葬在家族墓室裡。
vaultverb uk
Your browser doesn't support HTML5 audio
/v?lt/ us
Your browser doesn't support HTML5 audio
/vɑ?lt/
[ I usually + adv/prep, T ] to jump over something by first putting your hands on it or by using a pole
(用手支撐或撐桿)跳躍,躍過
He vaulted over the gate.
他從那扇大門上翻了過去。
She vaulted the wall and kept running.
她躍過了那堵牆繼續(xù)往前跑。
He has vaulted 6.02 m in indoor competitions this year.
在今年的室內(nèi)比賽中他躍過了6.02米的高度。
也請參見
pole vault
[ T ] formal to move someone or something suddenly to a much more important position
突然提升;使躍居
Last week's changes vaulted the general to the top, over the heads of several of his seniors.
上週的變動使這位將軍一下子超過他的幾位上司而躍居最高層。
(vault在劍橋英語-中文(繁體)詞典的翻譯 ? Cambridge University Press)
vault的例句
vault
In lateral view, larvae slightly and almost symmetrically vaulted; glabella and protopygidial axis inflated.
來自 Cambridge English Corpus
Gravestones became more splendid and monumental, amplifying the perspective not just of the family vaults but also of the whole parish architectural landscape.
來自 Cambridge English Corpus
I am told that one of the big joint stock banks have over £20,000,000 now on deposit, unused, in its own vaults.
來自 Hansard archive
該例句來自Hansard存檔。包含以下議會許可信息開放議會許可v3.0
Children play around in this area, but there are broken vaults and fallen gravestones.
來自 Hansard archive
該例句來自Hansard存檔。包含以下議會許可信息開放議會許可v3.0
They have cellars and vaults full of pictures for which no display space is available.
來自 Europarl Parallel Corpus - English
When such vaults are distressed, however, they may finally reveal the secrets of their construction by their patterns of cracks.
來自 Cambridge English Corpus
The vault's collapse changed the original location of the human remains and the offerings.
來自 Cambridge English Corpus
Comprising three storeys and underground vaults, it was built in the early 14th century, but still has two complete rooms.
來自 Hansard archive
該例句來自Hansard存檔。包含以下議會許可信息開放議會許可v3.0
示例中的觀點不代表劍橋詞典編輯、劍橋大學出版社和其許可證頒發(fā)者的觀點。
B1
vault的翻譯
中文(簡體)
拱, (尤指教堂或公共建筑的)拱頂,穹頂, 房間…
查看更多內(nèi)容
西班牙語
bóveda, cámara acorazada, cripta…
查看更多內(nèi)容
葡萄牙語
abóbada, casa-forte, caixa-forte…
查看更多內(nèi)容
更多語言
土耳其語
法語
in Dutch
捷克語
丹麥語
印尼語
泰語
越南語
波蘭語
in Swedish
馬來語
德語
挪威語
in Ukrainian
俄語
kasa dairesi, (kilise) mezar odas?, s??ramak…
查看更多內(nèi)容
cave vo?tée, chambre forte, caveau…
查看更多內(nèi)容
gewelf, kluis, grafkelder…
查看更多內(nèi)容
sklepení, trezor, hrobka…
查看更多內(nèi)容
hv?lving, boks, -boks…
查看更多內(nèi)容
ruangan besar, gudang bawah tanah, ruang kuburan keluarga…
查看更多內(nèi)容
??????????, ??????????, ???????????????…
查看更多內(nèi)容
vòm, mái vòm, h?m…
查看更多內(nèi)容
skarbiec, krypta, grobowiec…
查看更多內(nèi)容
k?llarvalv, kassavalv, gravvalv…
查看更多內(nèi)容
kekubah, bilik kebal, makam…
查看更多內(nèi)容
das Gew?lbe, die Stahlkammer, die Gruft…
查看更多內(nèi)容
hvelv, kjeller, (bank)hvelv…
查看更多內(nèi)容
склеп?ння, п?двал, льох…
查看更多內(nèi)容
хранилище (в банке), склеп, перепрыгивать…
查看更多內(nèi)容
需要一個翻譯器嗎?
獲得快速、免費的翻譯!
翻譯器工具
vault的發(fā)音是什么?
在英語詞典中查看 vault 的釋義
瀏覽
vat
VATable
Vatican City
vaudeville
vault
vaulted
vaulting
vaunt
vaunted
vault更多的中文(繁體)翻譯
全部
pole vault
查看全部意思?
“每日一詞”
veggie burger
UK
Your browser doesn't support HTML5 audio
/?ved?.i ?b??.ɡ?r/
US
Your browser doesn't support HTML5 audio
/?ved?.i ?b??.ɡ?/
a type of food similar to a hamburger but made without meat, by pressing together small pieces of vegetables, seeds, etc. into a flat, round shape
關(guān)于這個
博客
Forget doing it or forget to do it? Avoiding common mistakes with verb patterns (2)
March 06, 2024
查看更多
新詞
stochastic parrot
March 04, 2024
查看更多
已添加至 list
回到頁面頂端
內(nèi)容
英語-中文(繁體)例句翻譯
?劍橋大學出版社與評估2024
學習
學習
學習
新詞
幫助
紙質(zhì)書出版
Word of the Year 2021
Word of the Year 2022
Word of the Year 2023
開發(fā)
開發(fā)
開發(fā)
詞典API
雙擊查看
搜索Widgets
執(zhí)照數(shù)據(jù)
關(guān)于
關(guān)于
關(guān)于
無障礙閱讀
劍橋英語教學
劍橋大學出版社與評估
授權(quán)管理
Cookies與隱私保護
語料庫
使用條款
京ICP備14002226號-2
?劍橋大學出版社與評估2024
劍橋詞典+Plus
我的主頁
+Plus 幫助
退出
詞典
定義
清晰解釋自然的書面和口頭英語
英語
學習詞典
基礎(chǔ)英式英語
基礎(chǔ)美式英語
翻譯
點擊箭頭改變翻譯方向。
雙語詞典
英語-中文(簡體)
Chinese (Simplified)–English
英語-中文(繁體)
Chinese (Traditional)–English
英語-荷蘭語
荷蘭語-英語
英語-法語
法語-英語
英語-德語
德語-英語
英語-印尼語
印尼語-英語
英語-意大利語
意大利語-英語
英語-日語
日語-英語
英語-挪威語
挪威語-英語
英語-波蘭語
波蘭語-英語
英語-葡萄牙語
葡萄牙語-英語
英語-西班牙語
西班牙語-英語
English–Swedish
Swedish–English
半雙語詞典
英語-阿拉伯語
英語-孟加拉語
英語-加泰羅尼亞語
英語-捷克語
英語-丹麥語
English–Gujarati
英語-印地語
英語-韓語
英語-馬來語
英語-馬拉地語
英語-俄語
English–Tamil
English–Telugu
英語-泰語
英語-土耳其語
英語-烏克蘭語
English–Urdu
英語-越南語
翻譯
語法
同義詞詞典
Pronunciation
劍橋詞典+Plus
Shop
劍橋詞典+Plus
我的主頁
+Plus 幫助
退出
登錄 /
注冊
中文 (簡體) ?
Change
English (UK)
English (US)
Espa?ol
Русский
Português
Deutsch
Fran?ais
Italiano
中文 (簡體)
正體中文 (繁體)
Polski
???
Türk?e
日本語
Ti?ng Vi?t
?????
?????
??????
關(guān)注我們
選擇一本詞典
最近的詞和建議
定義
清晰解釋自然的書面和口頭英語
英語
學習詞典
基礎(chǔ)英式英語
基礎(chǔ)美式英語
語法與同義詞詞典
對自然書面和口頭英語用法的解釋
英語語法
同義詞詞典
Pronunciation
British and American pronunciations with audio
English Pronunciation
翻譯
點擊箭頭改變翻譯方向。
雙語詞典
英語-中文(簡體)
Chinese (Simplified)–English
英語-中文(繁體)
Chinese (Traditional)–English
英語-荷蘭語
荷蘭語-英語
英語-法語
法語-英語
英語-德語
德語-英語
英語-印尼語
印尼語-英語
英語-意大利語
意大利語-英語
英語-日語
日語-英語
英語-挪威語
挪威語-英語
英語-波蘭語
波蘭語-英語
英語-葡萄牙語
葡萄牙語-英語
英語-西班牙語
西班牙語-英語
English–Swedish
Swedish–English
半雙語詞典
英語-阿拉伯語
英語-孟加拉語
英語-加泰羅尼亞語
英語-捷克語
英語-丹麥語
English–Gujarati
英語-印地語
英語-韓語
英語-馬來語
英語-馬拉地語
英語-俄語
English–Tamil
English–Telugu
英語-泰語
英語-土耳其語
英語-烏克蘭語
English–Urdu
英語-越南語
詞典+Plus
詞匯表
選擇語言
中文 (簡體) ?
English (UK)
English (US)
Espa?ol
Русский
Português
Deutsch
Fran?ais
Italiano
正體中文 (繁體)
Polski
???
Türk?e
日本語
Ti?ng Vi?t
?????
?????
??????
內(nèi)容
英語-中文(繁體)?
?
Noun?
vault (ARCH)
vault (ROOM)
Verb
例句
Translations
語法
所有翻譯
我的詞匯表
把vault添加到下面的一個詞匯表中,或者創(chuàng)建一個新詞匯表。
更多詞匯表
前往詞匯表
對該例句有想法嗎?
例句中的單詞與輸入詞條不匹配。
該例句含有令人反感的內(nèi)容。
取消
提交
例句中的單詞與輸入詞條不匹配。
該例句含有令人反感的內(nèi)容。
取消
提交
Simplified Chinese
取消閱讀排行系列技術(shù)生活標簽朋友們此刻關(guān)于
Simplified Chinese
Simplified Chinese目錄一、Vault 基礎(chǔ)概念1. 數(shù)據(jù)存儲及加密解密2. 認證系統(tǒng)及權(quán)限系統(tǒng)3. Secret Engine二、部署 Vault0. 如何選擇存儲后端?1. docker-compose 部署(非 HA)2. 通過 helm 部署高可用的 vault3. 初始化并解封 vault4. 初始化并設(shè)置自動解封三、Vault 自身的配置管理1. 使用 pulumi 自動化配置 vault1.1 Token 的生成四、在 Kubernetes 中使用 vault 注入 secrets1. 部署并配置 vault agent1.1 使用集群外部的 valut 實例2. 關(guān)聯(lián) k8s rbac 權(quán)限系統(tǒng)和 vault3. 部署 Pod4. vault agent 配置5. 拓展:在 kubernetes 中使用 vault 的其他姿勢五、使用 vault 實現(xiàn) AWS IAM Credentials 的自動輪轉(zhuǎn)secrets 管理工具 Vault 的介紹、安裝及使用ryan4yin
?收錄于 ?類別 tech?和?系列 寫給開發(fā)人員的實用密碼學?云原生相關(guān)?2021-01-24??2021-01-24??約 8631 字??預(yù)計閱讀 18 分鐘?系列 - 云原生相關(guān)
FinOps for Kubernetes - 如何拆分 Kubernetes 成本部署一個 Kubernetes 集群Kubernetes 微服務(wù)最佳實踐云原生流水線 Argo Workflows 的安裝、使用以及個人體驗Pulumi 使用體驗 - 基礎(chǔ)設(shè)施代碼化使用 Istio 進行 JWT 身份驗證(充當 API 網(wǎng)關(guān))Kubernetes 常見錯誤、原因及處理方法secrets 管理工具 Vault 的介紹、安裝及使用Kubernetes 中的證書管理工具 - cert-manager系列 - 寫給開發(fā)人員的實用密碼學
寫給開發(fā)人員的實用密碼學(一)—— 概覽寫給開發(fā)人員的實用密碼學(二)—— 哈希函數(shù)寫給開發(fā)人員的實用密碼學(三)—— MAC 與密鑰派生函數(shù) KDF寫給開發(fā)人員的實用密碼學(四)—— 安全隨機數(shù)生成器 CSPRNG寫給開發(fā)人員的實用密碼學(五)—— 密鑰交換 DHKE 與完美前向保密 PFS寫給開發(fā)人員的實用密碼學(六)—— 對稱密鑰加密算法寫給開發(fā)人員的實用密碼學(七)—— 非對稱密鑰加密算法 RSA/ECC寫給開發(fā)人員的實用密碼學(八)—— 數(shù)字證書與 TLS 協(xié)議secrets 管理工具 Vault 的介紹、安裝及使用Kubernetes 中的證書管理工具 - cert-manager個人數(shù)據(jù)安全不完全指南目錄
一、Vault 基礎(chǔ)概念1. 數(shù)據(jù)存儲及加密解密2. 認證系統(tǒng)及權(quán)限系統(tǒng)3. Secret Engine二、部署 Vault0. 如何選擇存儲后端?1. docker-compose 部署(非 HA)2. 通過 helm 部署高可用的 vault3. 初始化并解封 vault4. 初始化并設(shè)置自動解封三、Vault 自身的配置管理1. 使用 pulumi 自動化配置 vault1.1 Token 的生成四、在 Kubernetes 中使用 vault 注入 secrets1. 部署并配置 vault agent1.1 使用集群外部的 valut 實例2. 關(guān)聯(lián) k8s rbac 權(quán)限系統(tǒng)和 vault3. 部署 Pod4. vault agent 配置5. 拓展:在 kubernetes 中使用 vault 的其他姿勢五、使用 vault 實現(xiàn) AWS IAM Credentials 的自動輪轉(zhuǎn)Vault 是 hashicorp 推出的 secrets 管理、加密即服務(wù)與權(quán)限管理工具。它的功能簡介如下:secrets 管理:支持保存各種自定義信息、自動生成各類密鑰,vault 自動生成的密鑰還能自動輪轉(zhuǎn)(rotate)認證方式:支持接入各大云廠商的賬號體系(比如阿里云RAM子賬號體系)或者 LDAP 等進行身份驗證,不需要創(chuàng)建額外的賬號體系。權(quán)限管理:通過 policy,可以設(shè)定非常細致的 ACL 權(quán)限。密鑰引擎:也支持接管各大云廠商的賬號體系(比如阿里云RAM子賬號體系),實現(xiàn) API Key 的自動輪轉(zhuǎn)。支持接入 kubernetes rbac 認證體系,通過 serviceaccount+role 為每個 Pod 單獨配置認證角色。支持通過 sidecar/init-container 將 secrets 注入到 pod 中,或者通過 k8s operator 將 vault 數(shù)據(jù)同步到 k8s secrets 中在使用 Vault 之前,我們是以攜程開源的 Apollo 作為微服務(wù)的分布式配置中心。Apollo 在國內(nèi)非常流行。它功能強大,支持配置的繼承,也有提供 HTTP API 方便自動化。
缺點是權(quán)限管理和 secrets 管理比較弱,也不支持信息加密,不適合直接存儲敏感信息。因此我們現(xiàn)在切換到了 Vault.目前我們本地的 CI/CD 流水線和云上的微服務(wù)體系,都是使用的 Vault 做 secrets 管理.一、Vault 基礎(chǔ)概念「基本概念」這一節(jié),基本都翻譯自官方文檔: https://www.vaultproject.io/docs/internals/architecture首先看一下 Vault 的架構(gòu)圖:vault layers可以看到,幾乎所有的 Vault 組件都被統(tǒng)稱為「屏障(Barrier)」。Vault 可以簡單地被劃分為存儲后端(Storage Backend)、屏障(Barrier)和 HTTP/S API 三個部分。Vault,翻譯成中文就是金庫。類比銀行金庫,「屏障」就是用于保護金庫的合金大門和鋼筋混凝土,存儲后端和客戶端之間的所有數(shù)據(jù)流動都需要經(jīng)過它?!钙琳稀勾_保只有加密數(shù)據(jù)會被寫入存儲后端,加密數(shù)據(jù)在經(jīng)過「屏障」被讀出的過程中被驗證與解密。和銀行金庫的大門非常類似,「屏障」也必須先解封,才能解密存儲后端中的數(shù)據(jù)。1. 數(shù)據(jù)存儲及加密解密存儲后端(Storage Backend): Vault 自身不存儲數(shù)據(jù),因此需要為它配置一個存儲后端。
存儲后端是不受信任的,只用于存儲加密數(shù)據(jù)。初始化(Initialization): Vault 在首次啟動時需要初始化,這一步生成一個加密密鑰(Encryption Key)用于加密數(shù)據(jù),加密完成的數(shù)據(jù)才能被保存到存儲后端。解封(Unseal): Vault 啟動后,因為不知道加密密鑰所以無法解密數(shù)據(jù),這種狀態(tài)被形象得稱作已封?。⊿ealed)。在解封前 Vault 無法進行任何操作。加密密鑰被主密鑰(Master Key)保護,我們必須提供主密鑰才能解密出 Vault 的加密密鑰,從而完成解封操作。默認情況下,Vault 使用沙米爾密鑰分割算法
將主密鑰分割成五個分割密鑰(Key Shares),必須要提供其中任意三個分割密鑰才能重建出主密鑰,完成解封操作。vault-shamir-secret-sharing分割密鑰的總數(shù),以及重建主密鑰最少需要的分割密鑰數(shù)量,都是可以調(diào)整的。
沙米爾密鑰分割算法也可以關(guān)閉,這樣主密鑰將被直接提供給管理員,管理員可直接使用它進行解封操作。2. 認證系統(tǒng)及權(quán)限系統(tǒng)在解封完成后,Vault 就可以開始處理請求了。HTTP 請求進入后的整個處理流程都由 vault core 管理,core 會強制進行 ACL 檢查,并確保審計日志(audit logging)完成記錄??蛻舳耸状芜B接 vault 時,需要先完成身份認證,vault 的 auth methods 模塊有很多身份認證方法可選:用戶友好的認證方法,適合管理員使用:username/password、云服務(wù)商、ldap在創(chuàng)建 user 的時候,需要為 user 綁定 policy,給予合適的權(quán)限。應(yīng)用友好的方法,適合應(yīng)用程序使用:public/private keys、tokens、kubernetes、jwt身份驗證請求流經(jīng) core 并進入 auth methods,auth methods 確定請求是否有效并返回「關(guān)聯(lián)策略(policies)」的列表。ACL 策略由 policy store 負責管理與存儲,由 core 進行 ACL 檢查。
ACL 的默認行為是拒絕,這意味著除非明確配置 policy 允許某項操作,否則該操作將被拒絕。在通過 auth methods 完成了身份認證,并且返回的關(guān)聯(lián)策略也沒毛病之后,token store 將會生成并管理一個新的憑證(token),
這個 token 會被返回給客戶端,用于進行后續(xù)請求。類似 web 網(wǎng)站的 cookie,token 也都存在一個租期(lease)或者說有效期,這加強了安全性。token 關(guān)聯(lián)了相關(guān)的策略 policies,這些策略將被用于驗證請求的權(quán)限。請求經(jīng)過驗證后,將被路由到 secret engine。如果 secret engine 返回了一個 secret(由 vault 自動生成的 secret),
core 會將其注冊到 expiration manager,并給它附加一個 lease ID。lease ID 被客戶端用于更新(renew)或吊銷(revoke)它得到的 secret.如果客戶端允許租約(lease)到期,expiration manager 將自動吊銷這個 secret.core 還負責處理審核代理 audit broker的請求及響應(yīng)日志,將請求發(fā)送到所有已配置的審核設(shè)備 audit devices. 不過默認情況下這個功能貌似是關(guān)閉的。3. Secret EngineSecret Engine 是保存、生成或者加密數(shù)據(jù)的組件,它非常靈活。有的 Secret Engines 只是單純地存儲與讀取數(shù)據(jù),比如 kv 就可以看作一個加密的 Redis。
而其他的 Secret Engines 則連接到其他的服務(wù)并按需生成動態(tài)憑證。還有些 Secret Engines 提供「加密即服務(wù)(encryption as a service)」的能力,如 transit、證書管理等。常用的 engine 舉例:AliCloud Secrets Engine: 基于 RAM 策略動態(tài)生成 AliCloud Access Token,或基于 RAM 角色動態(tài)生成 AliCloud STS 憑據(jù)Access Token 會自動更新(Renew),而 STS 憑據(jù)是臨時使用的,過期后就失效了。kv: 鍵值存儲,可用于存儲一些靜態(tài)的配置。它一定程度上能替代掉攜程的 Apollo 配置中心。Transit Secrets Engine: 提供加密即服務(wù)的功能,它只負責加密和解密,不負責存儲。主要應(yīng)用場景是幫 app 加解密數(shù)據(jù),但是數(shù)據(jù)仍舊存儲在 MySQL 等數(shù)據(jù)庫中。二、部署 Vault官方建議通過 Helm 部署 vault,大概流程:使用 helm/docker 部署運行 vault.初始化/解封 vault: vault 安全措施,每次重啟必須解封(可設(shè)置自動解封).0. 如何選擇存儲后端?首先,我們肯定需要高可用 HA,至少要保留能升級到 HA 的能力,所以不建議選擇不支持 HA 的后端。而具體的選擇,就因團隊經(jīng)驗而異了,人們往往傾向于使用自己熟悉的、知根知底的后端,或者選用云服務(wù)。比如我們對 MySQL/PostgreSQL 比較熟悉,而且使用云服務(wù)提供的數(shù)據(jù)庫不需要考慮太多的維護問題,MySQL/PostgreSQL 作為一個通用協(xié)議也不會被云廠商綁架,那我們就傾向于使用這兩者之一。而如果你們是本地自建,那你可能更傾向于使用 Etcd/Consul/Raft 做后端存儲。1. docker-compose 部署(非 HA)推薦用于本地開發(fā)測試環(huán)境,或者其他不需要高可用的環(huán)境。docker-compose.yml 示例如下: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
version: '3.3'
services:
vault:
# 文檔:https://hub.docker.com/_/vault
image: vault:1.6.0
container_name: vault
ports:
# rootless 容器,內(nèi)部不能使用標準端口 443
- "443:8200"
restart: always
volumes:
# 審計日志存儲目錄(`file` audit backend)
- ./logs:/vault/logs
# 當使用 file data storage 插件時,數(shù)據(jù)被存儲在這里。默認不往這寫任何數(shù)據(jù)。
- ./file:/vault/file
# vault 配置
- ./config.hcl:/vault/config/config.hcl
# TLS 證書
- ./certs:/certs
# vault 需要鎖定內(nèi)存以防止敏感值信息被交換(swapped)到磁盤中
# 為此需要添加如下 capability
cap_add:
- IPC_LOCK
# 必須設(shè)定 entrypoint,否則 vault 容器默認以 development 模式運行
entrypoint: vault server -config /vault/config/config.hcl
config.hcl 內(nèi)容如下: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
ui = true
// 使用文件做數(shù)據(jù)存儲(單節(jié)點)
storage "file" {
path = "/vault/file"
}
listener "tcp" {
address = "[::]:8200"
tls_disable = false
tls_cert_file = "/certs/server.crt"
tls_key_file = "/certs/server.key"
}
將如上兩份配置保存在同一文件夾內(nèi),同時在 ./certs 中提供 TLS 證書 server.crt 和私鑰 server.key。然后 docker-compose up -d 就能啟動運行一個 vault 實例。2. 通過 helm 部署高可用的 vault推薦用于生產(chǎn)環(huán)境通過 helm 部署:1
2
3
4
5
6
# 添加 valut 倉庫
helm repo add hashicorp https://helm.releases.hashicorp.com
# 查看 vault 版本號
helm search repo hashicorp/vault -l | head
# 下載某個版本號的 vault
helm pull hashicorp/vault --version 0.11.0 --untar
參照下載下來的 ./vault/values.yaml 編寫 custom-values.yaml,
部署一個以 mysql 為后端存儲的 HA vault,配置示例如下:配置內(nèi)容雖然多,但是大都是直接拷貝自 ./vault/values.yaml,改動很少。
測試 Vault 時可以忽略掉其中大多數(shù)的配置項。 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
global:
# enabled is the master enabled switch. Setting this to true or false
# will enable or disable all the components within this chart by default.
enabled: true
# TLS for end-to-end encrypted transport
tlsDisable: false
injector:
# True if you want to enable vault agent injection.
enabled: true
replicas: 1
# If true, will enable a node exporter metrics endpoint at /metrics.
metrics:
enabled: false
# Mount Path of the Vault Kubernetes Auth Method.
authPath: "auth/kubernetes"
certs:
# secretName is the name of the secret that has the TLS certificate and
# private key to serve the injector webhook. If this is null, then the
# injector will default to its automatic management mode that will assign
# a service account to the injector to generate its own certificates.
secretName: null
# caBundle is a base64-encoded PEM-encoded certificate bundle for the
# CA that signed the TLS certificate that the webhook serves. This must
# be set if secretName is non-null.
caBundle: ""
# certName and keyName are the names of the files within the secret for
# the TLS cert and private key, respectively. These have reasonable
# defaults but can be customized if necessary.
certName: tls.crt
keyName: tls.key
server:
# Resource requests, limits, etc. for the server cluster placement. This
# should map directly to the value of the resources field for a PodSpec.
# By default no direct resource request is made.
# Enables a headless service to be used by the Vault Statefulset
service:
enabled: true
# Port on which Vault server is listening
port: 8200
# Target port to which the service should be mapped to
targetPort: 8200
# This configures the Vault Statefulset to create a PVC for audit
# logs. Once Vault is deployed, initialized and unseal, Vault must
# be configured to use this for audit logs. This will be mounted to
# /vault/audit
# See https://www.vaultproject.io/docs/audit/index.html to know more
auditStorage:
enabled: false
# Run Vault in "HA" mode. There are no storage requirements unless audit log
# persistence is required. In HA mode Vault will configure itself to use Consul
# for its storage backend. The default configuration provided will work the Consul
# Helm project by default. It is possible to manually configure Vault to use a
# different HA backend.
ha:
enabled: true
replicas: 3
# Set the api_addr configuration for Vault HA
# See https://www.vaultproject.io/docs/configuration#api_addr
# If set to null, this will be set to the Pod IP Address
apiAddr: null
# config is a raw string of default configuration when using a Stateful
# deployment. Default is to use a Consul for its HA storage backend.
# This should be HCL.
# Note: Configuration files are stored in ConfigMaps so sensitive data
# such as passwords should be either mounted through extraSecretEnvironmentVars
# or through a Kube secret. For more information see:
# https://www.vaultproject.io/docs/platform/k8s/helm/run#protecting-sensitive-vault-configurations
config: |
ui = true
listener "tcp" {
address = "[::]:8200"
cluster_address = "[::]:8201"
# 注意,這個值要和 helm 的參數(shù) global.tlsDisable 一致
tls_disable = false
tls_cert_file = "/etc/certs/vault.crt"
tls_key_file = "/etc/certs/vault.key"
}
# storage "postgresql" {
# connection_url = "postgres://username:password@
# ha_enabled = true
# }
service_registration "kubernetes" {}
# Example configuration for using auto-unseal, using AWS KMS.
# the cluster must have a service account that is authorized to access AWS KMS, throught an IAM Role.
# seal "awskms" {
# region = "us-east-1"
# kms_key_id = "
# 默認情況下插件會使用 awskms 的公網(wǎng) enpoint,但是也可以使用如下參數(shù),改用自行創(chuàng)建的 vpc 內(nèi)網(wǎng) endpoint
# endpoint = "https://
# }
# Definition of the serviceAccount used to run Vault.
# These options are also used when using an external Vault server to validate
# Kubernetes tokens.
serviceAccount:
create: true
name: "vault"
annotations:
# 如果要使用 auto unseal 的話,這個填寫擁有 awskms 權(quán)限的 AWS IAM Role
eks.amazonaws.com/role-arn:
# Vault UI
ui:
enabled: true
publishNotReadyAddresses: true
serviceType: ClusterIP
activeVaultPodOnly: true
externalPort: 8200
現(xiàn)在使用自定義的 custom-values.yaml 部署 vautl:1
2
3
kubectl create namespace vault
# 安裝/升級 valut
helm upgrade --install vault ./vault --namespace vault -f custom-values.yaml
3. 初始化并解封 vault官方文檔:Initialize and unseal Vault - Vault on Kubernetes Deployment Guide通過 helm 部署 vault,默認會部署一個三副本的 StatefulSet,但是這三個副本都會處于 NotReady 狀態(tài)(docker 方式部署的也一樣)。
接下來還需要手動初始化并解封 vault,才能 Ready:第一步:從三個副本中隨便選擇一個,運行 vault 的初始化命令:kubectl exec -ti vault-0 -- vault operator init初始化操作會返回 5 個 unseal keys,以及一個 Initial Root Token,這些數(shù)據(jù)非常敏感非常重要,一定要保存到安全的地方!第二步:在每個副本上,使用任意三個 unseal keys 進行解封操作。一共有三個副本,也就是說要解封 3*3 次,才能完成 vault 的完整解封!1
2
3
4
5
# 每個實例都需要解封三次!
## Unseal the first vault server until it reaches the key threshold
$ kubectl exec -ti vault-0 -- vault operator unseal # ... Unseal Key 1
$ kubectl exec -ti vault-0 -- vault operator unseal # ... Unseal Key 2
$ kubectl exec -ti vault-0 -- vault operator unseal # ... Unseal Key 3
這樣就完成了部署,但是要注意,vault 實例每次重啟后,都需要重新解封!也就是重新進行第二步操作!4. 初始化并設(shè)置自動解封在未設(shè)置 auto unseal 的情況下,vault 每次重啟都要手動解封所有 vault 實例,實在是很麻煩,在云上自動擴縮容的情況下,vault 實例會被自動調(diào)度,這種情況就更麻煩了。為了簡化這個流程,可以考慮配置 auto unseal 讓 vault 自動解封。自動解封目前有兩種方法:使用阿里云/AWS/Azure 等云服務(wù)提供的密鑰庫來管理 encryption keyAWS: awskms Seal如果是 k8s 集群,vault 使用的 ServiceAccount 需要有權(quán)限使用 AWS KMS,它可替代掉 config.hcl 中的 access_key/secret_key 兩個屬性阿里云:alicloudkms Seal如果你不想用云服務(wù),那可以考慮 autounseal-transit,這種方法使用另一個 vault 實例提供的 transit 引擎來實現(xiàn) auto-unseal.簡單粗暴:直接寫個 crontab 或者在 CI 平臺上加個定時任務(wù)去執(zhí)行解封命令,以實現(xiàn)自動解封。不過這樣安全性就不好說了。以使用 awskms 為例,首先創(chuàng)建 aws IAM 的 policy 內(nèi)容如下: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VaultKMSUnseal",
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:Encrypt",
"kms:DescribeKey"
],
"Resource": "*"
}
]
}
然后創(chuàng)建 IAM Role 綁定上面的 policy,并為 vault 的 k8s serviceaccount 創(chuàng)建一個 IAM Role,綁定上這個 policy.這樣 vault 使用的 serviceaccount 自身就擁有了訪問 awskms 的權(quán)限,也就不需要額外通過 access_key/secret_key 來訪問 awskms.關(guān)于 IAM Role 和 k8s serviceaccount 如何綁定,參見官方文檔:IAM roles for EKS service accounts完事后再修改好前面提供的 helm 配置,部署它,最后使用如下命令初始化一下:1
2
3
4
# 初始化命令和普通模式并無不同
kubectl exec -ti vault-0 -- vault operator init
# 會打印出一個 root token,以及五個 Recovery Key(而不是 Unseal Key)
# Recover Key 不再用于解封,但是重新生成 root token 等操作仍然會需要用到它.
然后就大功告成了,可以嘗試下刪除 vault 的 pod,新建的 Pod 應(yīng)該會自動解封。三、Vault 自身的配置管理Vault 本身是一個復雜的 secrets 工具,它提供了 Web UI 和 CLI 用于手動管理與查看 Vault 的內(nèi)容。但是作為一名 DevOps,我們當然更喜歡更自治的方法,這有兩種選擇:使用 vault 的 sdk: python-hvac使用 terraform-provider-vault 或者 pulumi-vault 實現(xiàn) vault 配置的自動化管理。Web UI 適合手工操作,而 sdk/terraform-provider-vault 則適合用于自動化管理 vault.我們的測試環(huán)境就是使用 pulumi-vault 完成的自動化配置 vault policy 和 kubernetes role,然后自動化注入所有測試用的 secrets.1. 使用 pulumi 自動化配置 vault使用 pulumi 管理 vault 配置的優(yōu)勢是很大的,因為云上資源的敏感信息(數(shù)據(jù)庫賬號密碼、資源 ID、RAM子賬號)都是 pulumi 創(chuàng)建的。再結(jié)合使用 pulumi_valut,就能實現(xiàn)敏感信息自動生成后,立即保存到 vault 中,實現(xiàn)完全自動化。后續(xù)微服務(wù)就可以通過 kubernetes 認證,直接從 vault 讀取敏感信息。或者是寫入到本地的 vault 中留做備份,在需要的時候,管理員能登入進去查看相關(guān)敏感信息。1.1 Token 的生成pulumi_vault 本身挺簡單的,聲明式的配置嘛,直接用就是了。但是它一定要求提供 VAULT_TOKEN 作為身份認證的憑證(實測 userpass/approle 都不能直接使用,會報錯 no vault token found),而且 pulumi 還會先生成臨時用的 child token,然后用這個 child token
進行后續(xù)的操作。首先安全起見,肯定不應(yīng)該直接提供 root token!root token 應(yīng)該封存,除了緊急情況不應(yīng)該啟用。那么應(yīng)該如何生成一個權(quán)限有限的 token 給 vault 使用呢?
我的方法是創(chuàng)建一個 userpass 賬號,通過 policy 給予它有限的權(quán)限。
然后先手動(或者自動)登錄獲取到 token,再將 token 提供給 pulumi_vault 使用。這里面有個坑,就是必須給 userpass 賬號創(chuàng)建 child token 的權(quán)限:1
2
3
4
5
6
7
8
path "local/*" {
capabilities = ["read", "list"]
}
// 允許創(chuàng)建 child token
path "auth/token/create" {
capabilities = ["create", "read", "update", "delete", "list"]
}
不給這個權(quán)限,pulumi_vault 就會一直報錯。。然后還得給它「自動化配置」需要的權(quán)限,比如自動創(chuàng)建/更新 policy/secrets/kubernetes 等等,示例如下: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# To list policies - Step 3
path "sys/policy"
{
capabilities = ["read"]
}
# Create and manage ACL policies broadly across Vault
path "sys/policy/*"
{
capabilities = ["create", "read", "update", "delete", "list", "sudo"]
}
# List, create, update, and delete key/value secrets
path "secret/*"
{
capabilities = ["create", "read", "update", "delete", "list", "sudo"]
}
path "auth/kubernetes/role/*"
{
capabilities = ["create", "read", "update", "list"]
}
四、在 Kubernetes 中使用 vault 注入 secretsvault-k8s-auth-workflow前面提到過 vault 支持通過 Kubernetes 的 ServiceAccount 為每個 Pod 單獨分配權(quán)限。應(yīng)用程序有兩種方式去讀取 vault 中的配置:借助 Vault Sidecar,將 secrets 以文件的形式自動注入到 Pod 中,比如 /vault/secrets/config.jsonvault sidecar 在常駐模式下每 15 秒更新一次配置,應(yīng)用程序可以使用 watchdog 實時監(jiān)控 secrets 文件的變更。應(yīng)用程序自己使用 SDK 直接訪問 vault api 獲取 secrets上述兩種方式,都可以借助 Kubernetes ServiceAccount 進行身份驗證和權(quán)限分配。下面以 Sidecar 模式為例,介紹如何將 secrets 以文件形式注入到 Pod 中。1. 部署并配置 vault agent首先啟用 Vault 的 Kubernetes 身份驗證: 1
2
3
4
5
6
7
8
9
10
11
12
13
# 配置身份認證需要在 vault pod 中執(zhí)行,啟動 vault-0 的交互式會話
kubectl exec -n vault -it vault-0 -- /bin/sh
export VAULT_TOKEN='
export VAULT_ADDR='http://localhost:8200'
# 啟用 Kubernetes 身份驗證
vault auth enable kubernetes
# kube-apiserver API 配置,vault 需要通過 kube-apiserver 完成對 serviceAccount 的身份驗證
vault write auth/kubernetes/config \
token_reviewer_jwt="$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" \
kubernetes_host="https://$KUBERNETES_PORT_443_TCP_ADDR:443" \
kubernetes_ca_cert=@/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
1.1 使用集群外部的 valut 實例如果你沒這個需求,請?zhí)^這一節(jié)。詳見 Install the Vault Helm chart configured to address an external Vaultkubernetes 也可以和外部的 vault 實例集成,集群中只部署 vault-agent.這適用于多個 kubernetes 集群以及其他 APP 共用一個 vault 實例的情況,比如我們本地的多個開發(fā)測試集群,就都共用著同一個 vault 實例,方便統(tǒng)一管理應(yīng)用的 secrets.首先,使用 helm chart 部署 vault-agent,接入外部的 vault 實例。使用的 custom-values.yaml 示例如下: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
global:
# enabled is the master enabled switch. Setting this to true or false
# will enable or disable all the components within this chart by default.
enabled: true
# TLS for end-to-end encrypted transport
tlsDisable: false
injector:
# True if you want to enable vault agent injection.
enabled: true
replicas: 1
# If multiple replicas are specified, by default a leader-elector side-car
# will be created so that only one injector attempts to create TLS certificates.
leaderElector:
enabled: true
image:
repository: "gcr.io/google_containers/leader-elector"
tag: "0.4"
ttl: 60s
# If true, will enable a node exporter metrics endpoint at /metrics.
metrics:
enabled: false
# External vault server address for the injector to use. Setting this will
# disable deployment of a vault server along with the injector.
# TODO 這里的 https ca.crt 要怎么設(shè)置?mTLS 又該如何配置?
externalVaultAddr: "https://
# Mount Path of the Vault Kubernetes Auth Method.
authPath: "auth/kubernetes"
certs:
# secretName is the name of the secret that has the TLS certificate and
# private key to serve the injector webhook. If this is null, then the
# injector will default to its automatic management mode that will assign
# a service account to the injector to generate its own certificates.
secretName: null
# caBundle is a base64-encoded PEM-encoded certificate bundle for the
# CA that signed the TLS certificate that the webhook serves. This must
# be set if secretName is non-null.
caBundle: ""
# certName and keyName are the names of the files within the secret for
# the TLS cert and private key, respectively. These have reasonable
# defaults but can be customized if necessary.
certName: tls.crt
keyName: tls.key
部署命令和 通過 helm 部署 vault 一致,只要更換 custom-values.yaml 就行。vault-agent 部署完成后,第二步是為 vault 創(chuàng)建 serviceAccount、secret 和 ClusterRoleBinding,以允許 vault 審查 kubernetes 的 token, 完成對 pod 的身份驗證. yaml 配置如下: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: vault-auth
namespace: vault
---
apiVersion: v1
kind: Secret
metadata:
name: vault-auth
namespace: vault
annotations:
kubernetes.io/service-account.name: vault-auth
type: kubernetes.io/service-account-token
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: role-tokenreview-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:auth-delegator
subjects:
- kind: ServiceAccount
name: vault-auth
namespace: vault
現(xiàn)在在 vault 實例這邊,啟用 kubernetes 身份驗證,在 vault 實例內(nèi),執(zhí)行如下命令:vault 實例內(nèi)顯然沒有 kubectl 和 kubeconfig,簡便起見,下列的 vault 命令也可以通過 Web UI 完成。 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
export VAULT_TOKEN='
export VAULT_ADDR='http://localhost:8200'
# 啟用 Kubernetes 身份驗證
vault auth enable kubernetes
# kube-apiserver API 配置,vault 需要通過 kube-apiserver 完成對 serviceAccount 的身份驗證
# TOKEN_REVIEW_JWT: 就是我們前面創(chuàng)建的 secret `vault-auth`
TOKEN_REVIEW_JWT=$(kubectl -n vault get secret vault-auth -o go-template='{{ .data.token }}' | base64 --decode)
# kube-apiserver 的 ca 證書
KUBE_CA_CERT=$(kubectl -n vault config view --raw --minify --flatten -o jsonpath='{.clusters[].cluster.certificate-authority-data}' | base64 --decode)
# kube-apiserver 的 url
KUBE_HOST=$(kubectl config view --raw --minify --flatten -o jsonpath='{.clusters[].cluster.server}')
vault write auth/kubernetes/config \
token_reviewer_jwt="$TOKEN_REVIEW_JWT" \
kubernetes_host="$KUBE_HOST" \
kubernetes_ca_cert="$KUBE_CA_CERT"
這樣,就完成了 kubernetes 與外部 vault 的集成!2. 關(guān)聯(lián) k8s rbac 權(quán)限系統(tǒng)和 vault接下來需要做的事:通過 vault policy 定義好每個 role(微服務(wù))能訪問哪些資源。為每個微服務(wù)生成一個 role,這個 role 需要綁定對應(yīng)的 vault policy 及 kubernetes serviceaccount這個 role 是 vault 的 kubernetes 插件自身的屬性,它和 kubernetes role 沒有半毛錢關(guān)系。創(chuàng)建一個 ServiceAccount,并使用這個 使用這個 ServiceAccount 部署微服務(wù)其中第一步和第二步都可以通過 vault api 自動化完成.
第三步可以通過 kubectl 部署時完成。方便起見,vault policy / role / k8s serviceaccount 這三個配置,都建議和微服務(wù)使用相同的名稱。上述配置中,role 起到一個承上啟下的作用,它關(guān)聯(lián)了 k8s serviceaccount 和 vault policy 兩個配置。比如創(chuàng)建一個名為 my-app-policy 的 vault policy,內(nèi)容為:1
2
3
4
5
6
7
8
# 允許讀取數(shù)據(jù)
path "my-app/data/*" {
capabilities = ["read", "list"]
}
// 允許列出 myapp 中的所有數(shù)據(jù)(kv v2)
path "myapp/metadata/*" {
capabilities = ["read", "list"]
}
然后在 vault 的 kuberntes 插件配置中,創(chuàng)建 role my-app-role,配置如下:關(guān)聯(lián) k8s default 名字空間中的 serviceaccount my-app-account,并創(chuàng)建好這個 serviceaccount.關(guān)聯(lián) vault token policy,這就是前面創(chuàng)建的 my-app-policy設(shè)置 token period(有效期)這之后,每個微服務(wù)就能通過 serviceaccount 從 vault 中讀取 my-app 中的所有信息了。3. 部署 Pod參考文檔:https://www.vaultproject.io/docs/platform/k8s/injector下一步就是將配置注入到微服務(wù)容器中,這需要使用到 Agent Sidecar Injector。
vault 通過 sidecar 實現(xiàn)配置的自動注入與動態(tài)更新。具體而言就是在 Pod 上加上一堆 Agent Sidecar Injector 的注解,如果配置比較多,也可以使用 configmap 保存,在注解中引用。需要注意的是 vault-inject-agent 有兩種運行模式:init 模式: 僅在 Pod 啟動前初始化一次,跑完就退出(Completed)常駐模式: 容器不退出,持續(xù)監(jiān)控 vault 的配置更新,維持 Pod 配置和 vualt 配置的同步。示例: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: my-app
name: my-app
namespace: default
spec:
minReadySeconds: 3
progressDeadlineSeconds: 60
revisionHistoryLimit: 3
selector:
matchLabels:
app: my-app
strategy:
rollingUpdate:
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
annotations:
vault.hashicorp.com/agent-init-first: 'true' # 是否使用 initContainer 提前初始化配置文件
vault.hashicorp.com/agent-inject: 'true'
vault.hashicorp.com/secret-volume-path: vault
vault.hashicorp.com/role: "my-app-role" # vault kubernetes 插件的 role 名稱
vault.hashicorp.com/agent-inject-template-config.json: |
# 渲染模板的語法在后面介紹
vault.hashicorp.com/agent-limits-cpu: 250m
vault.hashicorp.com/agent-requests-cpu: 100m
# 包含 vault 配置的 configmap,可以做更精細的控制
# vault.hashicorp.com/agent-configmap: my-app-vault-config
labels:
app: my-app
spec:
containers:
- image: registry.svc.local/xx/my-app:latest
imagePullPolicy: IfNotPresent
# 此處省略若干配置...
serviceAccountName: my-app-account
常見錯誤:vault-agent(sidecar) 報錯: namespace not authorizedauth/kubernetes/config 中的 role 沒有綁定 Pod 的 namespacevault-agent(sidecar) 報錯: permission denied檢查 vault 實例的日志,應(yīng)該有對應(yīng)的錯誤日志,很可能是 auth/kubernetes/config 沒配對,vault 無法驗證 kube-apiserver 的 tls 證書,或者使用的 kubernetes token 沒有權(quán)限。vault-agent(sidecar) 報錯: service account not authorizedauth/kubernetes/config 中的 role 沒有綁定 Pod 使用的 serviceAccount4. vault agent 配置vault-agent 的配置,需要注意的有:如果使用 configmap 提供完整的 config.hcl 配置,注意 agent-initvautl-agent 的 template 說明:目前來說最流行的配置文件格式應(yīng)該是 json/yaml,以 json 為例,
對每個微服務(wù)的 kv 數(shù)據(jù),可以考慮將它所有的個性化配置都保存在
2
3
4
5
6
7
8
{
{{ range secrets "
"{{ printf "%s" . }}":
{{ with secret (printf "
{{ .Data.data | toJSONPretty }},
{{ end }}
{{ end }}
}
template 的詳細語法參見: https://github.com/hashicorp/consul-template#secret注意:v2 版本的 kv secrets,它的 list 接口有變更,因此在遍歷 v2 kv secrets 時,
必須要寫成 range secrets "
官方文檔完全沒提到這一點,我通過 wireshark 抓包調(diào)試,對照官方的 KV Secrets Engine - Version 2 (API) 才搞明白這個。這樣生成出來的內(nèi)容將是 json 格式,不過有個不兼容的地方:最后一個 secrets 的末尾有逗號 ,
渲染出的效果示例: 1
2
3
4
5
6
7
8
9
10
{
"secret-a": {
"a": "b",
"c": "d"
},
"secret-b": {
"v": "g",
"r": "c"
},
}
因為存在尾部逗號(trailing comma),直接使用 json 標準庫解析它會報錯。
那該如何去解析它呢?我在萬能的 stackoverflow 上找到了解決方案:yaml 完全兼容 json 語法,并且支持尾部逗號!以 python 為例,直接 yaml.safe_load() 就能完美解析 vault 生成出的 json 內(nèi)容。5. 拓展:在 kubernetes 中使用 vault 的其他姿勢除了使用官方提供的 sidecar 模式進行 secrets 注入,社區(qū)也提供了一些別的方案,可以參考:hashicorp/vault-csi-provider: 官方的 Beta 項目,通過 Secrets Store CSI 驅(qū)動將 vault secrets 以數(shù)據(jù)卷的形式掛載到 pod 中kubernetes-external-secrets: 提供 CRD 定義,根據(jù)定義將 secret 從 vault 中同步到 kubernetes secrets官方的 sidecar/init-container 模式仍然是最推薦使用的。五、使用 vault 實現(xiàn) AWS IAM Credentials 的自動輪轉(zhuǎn)待續(xù)。。。相關(guān)內(nèi)容FinOps for Kubernetes - 如何拆分 Kubernetes 成本部署一個 Kubernetes 集群Kubernetes 微服務(wù)最佳實踐如果你覺得這篇文章對你有所幫助,歡迎評論、分享、打賞~
贊賞更新于 2021-01-24
?Vault,?云原生,?Secrets,?配置,?配置管理返回?|?主頁QEMU/KVM 虛擬化環(huán)境的搭建與使用
云原生流水線 Argo Workflows 的安裝、使用以及個人體驗Please enable JavaScript to view the comments powered by Utterances.
由 Hugo 強力驅(qū)動?|?托管在 Vercel 上?|?主題 - DoIt2021 - 2024?ryan4yin?|? CC BY-NC 4.0
云時代的機密管理——Vault(Vault的架構(gòu)設(shè)計) - 知乎切換模式寫文章登錄/注冊云時代的機密管理——Vault(Vault的架構(gòu)設(shè)計)大可不加冰程序員之前的文章大多是介紹了Vault某些特定的應(yīng)用場景,本文會結(jié)合文檔,嘗試為讀者從一個俯瞰的角度介紹一下Vault的架構(gòu)設(shè)計、組成部分的說明,讓讀者對Vault有一個更加全面和直觀的理解。詞匯表Vault是由多個松耦合的部件組成的復雜系統(tǒng),總體來說它由以下幾個部件組成:后端存儲(Storage Backend):后端存儲負責將密文數(shù)據(jù)存儲到可靠的持久存儲上。Vault并不假設(shè)后端存儲上的數(shù)據(jù)不會被盜取,而只是假設(shè)該存儲是持久的、可靠的。Vault只會向后端存儲寫入加密過的數(shù)據(jù)。后端存儲應(yīng)在Vault服務(wù)啟動前被妥善配置。屏障(Barrier):屏障是由加密算法所組成的鋼筋混凝土防護工事。所有在Vault服務(wù)與后端存儲之間流動的數(shù)據(jù)都會經(jīng)過屏障處理。屏障確保了Vault寫入后端存儲的一切數(shù)據(jù)都是加密的,而從后端存儲讀取的數(shù)據(jù)都會經(jīng)由屏障解密交由Vault服務(wù)使用。由于屏障的存在,Vault服務(wù)啟動后,必須進行“解封”(Unseal)處理,獲得與后端存儲數(shù)據(jù)相應(yīng)的主密鑰(Master Key)后才能正常工作。機密引擎(Secret Engine):機密引擎負責管理各種機密數(shù)據(jù)。比如我們之前介紹的“KV“引擎,就是一種簡單的保存靜態(tài)機密數(shù)據(jù)的機密引擎。某些機密引擎可提供被查詢時動態(tài)創(chuàng)建機密的動態(tài)機密功能,這使得Vault可以提供細顆粒度權(quán)限配置的一次一密的臨時機密。例如為運維與開發(fā)配置不同的策略,并對應(yīng)不同的Aws權(quán)限,相關(guān)人員每次讀取相關(guān)機密時,由Vault動態(tài)創(chuàng)建一組擁有有限有效期和預(yù)設(shè)Aws權(quán)限的Access Key和Secret Key,并確保在有效期過后由Vault在Aws上自動刪除該Key。審計設(shè)備(Auth Method):審計設(shè)備負責管理審計日志。進出Vault的每一個請求和響應(yīng)都會被記錄在預(yù)設(shè)的審計設(shè)備上。該部件為Vault與多種不同的審計日志存儲的集成提供了一種簡單的方式。認證方式(Auth Method):認證方式被用來認證連接到Vault服務(wù)的用戶或是應(yīng)用程序的身份信息。一旦認證通過,認證組件會返回一組當前身份適用的策略信息。Vault接受一個通過認證的用戶,并返回一個可供將來使用的客戶端Token。舉個例子,使用userpass認證方式,用戶通過提供用戶名與密碼來進行認證。如果使用github認證方式,用戶通過Github Token來通過Vault的認證。客戶端Token(Client Token):一個客戶端Token(又稱“Vault Token“)類似于網(wǎng)站的繪畫Cookie。一旦用戶通過認證,Vault返回一個客戶端Token。該Token可以被Vault用來識別客戶端身份并使用相應(yīng)的訪問控制權(quán)限約束客戶端權(quán)限。該Token通過HTTP Header傳遞。機密(Secret):機密指的是所有由Vault返回的包含機密信息或者密碼學原材料(Cryptographic Material)的信息。并不是所有由Vault返回的信息都是機密,例如系統(tǒng)配置、服務(wù)狀態(tài)信息、策略配置等就不屬于機密范疇。機密都有對應(yīng)的租約(Lease),這代表客戶端不可以假設(shè)機密可以無限期地被使用。Vault會在租約到期后吊銷相關(guān)機密,Vault管理員也可以在租約到期之前人工吊銷機密。Vault服務(wù)與客戶端之間的這種契約是至關(guān)重要的,它允許實現(xiàn)全自動的機密憑據(jù)和策略的改變。服務(wù)器(Server):Vault依賴于一個長期運行服務(wù)實例的服務(wù)器。Vault服務(wù)器對外提供了一組API用以與客戶端互動,以及管理與各種機密引擎的互動,訪問控制權(quán)限體系的執(zhí)行,以及機密租約管理和吊銷。服務(wù)器的架構(gòu)設(shè)計解除了客戶端與機密信息、權(quán)限策略的耦合,使得管理員可以輕松實現(xiàn)對審計日志的中央化管控。架構(gòu)全覽可以看到,只有后端存儲以及HTTP API兩部分位于屏障外部,其余所有部件都位于屏障內(nèi)部。Vault不信任后端存儲,所以只會向后端存儲寫入加密后的密文數(shù)據(jù)。當Vault服務(wù)啟動時,必須配置一個后端存儲,使得Vault重啟后仍然可以讀取到數(shù)據(jù)。HTTP API同樣也必須在Vault服務(wù)啟動時被啟動,才能使得客戶端可以與Vault服務(wù)交互。當Vault啟動后,Vault處于“封?。⊿ealed)“狀態(tài)。在執(zhí)行任意操作之前,首先要對Vault執(zhí)行“解封(Unseal)“操作。當Vault服務(wù)初始化時會生成一個加密密鑰,所有寫入后端存儲的數(shù)據(jù)都會用該密鑰加密。該密鑰由一個主密鑰(Master Key)保護。默認情況下,Vault使用Shamir算法將主密鑰拆分成5份,需要至少3份才能重建主密鑰:主密鑰拆分的份數(shù)以及解封要求的最低份數(shù)都可以被配置。我們也可以不使用Shamir算法,直接用主密鑰解封。一旦Vault獲得了加密密鑰,就可以解密后端存儲上的數(shù)據(jù),服務(wù)進入解封狀態(tài)。一旦解封,Vault就會加載所有審計設(shè)備、認證方式以及機密引擎的配置信息。當Vault解封,發(fā)往Vault的請求就可以通過HTTP API被轉(zhuǎn)往核心(Core)進行處理。核心管理系統(tǒng)接收到的請求,強制執(zhí)行訪問控制權(quán)限,以及確保審計信息的成功寫入。當客戶端首次與Vault連接,它需要經(jīng)過身份認證。Vault提供了多種身份認證方式。對人類用戶比較友好的有userpass、github等,應(yīng)用程序可以使用公私鑰或是Token認證。一個身份認證請求會經(jīng)由核心抵達相應(yīng)的認證方式,由認證方式判定認證是否通過,然后返回一組相關(guān)的策略。策略(Policies)是一個命名的訪問控制規(guī)則,比如說,root策略是一個內(nèi)建策略,它允許訪問任意資源。你可以創(chuàng)建任意多個命名的策略,在相關(guān)路徑上定義細致的權(quán)限控制。Vault采用白名單的模式,意為除非策略明確允許某項操作,否則所有操作都是被禁止的。如果一個用戶擁有多個策略,對于某項操作,只要任意策略允許就可以執(zhí)行。策略由內(nèi)部的策略存儲(Policy Store)存儲和管理。這個內(nèi)部的策略存儲通過系統(tǒng)后端(System Backend)控制,掛載路徑總是為sys/。一旦身份認證通過,并且身份認證方式返回一組適用的策略,Token存儲(Token Store)會生成并管理一個新的客戶端Token。該Token會被返回給客戶端,用來作為后續(xù)操作的認證信息,這很像網(wǎng)站在用戶登錄后通過發(fā)還給用戶的Cookie傳遞會話信息的機制。根據(jù)身份認證方式的配置,該客戶端Token可能還會關(guān)聯(lián)一個租約。這意味著客戶端Token可能需要定期續(xù)約來避免過期。一旦身份認證通過,后續(xù)請求都要附加客戶端Token??蛻舳薚oken被用來確認客戶端有權(quán)加載相關(guān)策略。策略被用來驗證客戶請求的權(quán)限。通過驗證的請求被路由到相關(guān)機密引擎,由機密引擎進行處理。如果機密引擎返回一個機密,核心會將其注冊到過期管理器(Expiration Manager)并附加一個租約ID。租約ID可用來續(xù)約租約或是吊銷相關(guān)機密。如果客戶端任由租約過期,過期管理器會自動吊銷相關(guān)機密。核心還負責將請求與響應(yīng)的日志寫入審計中介(Audit Broker),由審計中介負責將日志寫入所有預(yù)設(shè)的審計設(shè)備。除了處理客戶端發(fā)送的請求,核心還會負責特定的后臺活動。租約管理是至關(guān)重要的,它允許自動吊銷過期的客戶端Token以及機密信息。另外,Vault使用預(yù)寫日志(Write Ahead Logging)和回滾管理器處理特定的失敗場景。這些是由核心透明地執(zhí)行的,對用戶不可見。發(fā)布于 2021-05-07 12:08云計算網(wǎng)絡(luò)安全DevOps?贊同 13??添加評論?分享?喜歡?收藏?申請
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install vault復制3. 啟動 Server3.1 測試環(huán)境如果僅用于測試,只需要執(zhí)行下面的命令即可: vault server -dev復制命令執(zhí)行后的返回文本中會有 Unseal Key 和 Root Token 兩個參數(shù):==> Vault server configuration: Api Address: http://127.0.0.1:8200
Cgo: disabled
Cluster Address: https://127.0.0.1:8201
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: inmem
Version: Vault v1.4.1復制WARNING! dev mode is enabled! In this mode, Vault runs entirely in-memoryand starts unsealed with a single unseal key. The root token is alreadyauthenticated to the CLI, so you can immediately begin using Vault.You may need to set the following environment variable: $ export VAULT_ADDR='http://127.0.0.1:8200'The unseal key and root token are displayed below in case you want toseal/unseal the Vault or re-authenticate.Unseal Key: 1+yv+v5mz+aSCK67X6slL3ECxb4UDL8ujWZU/ONBpn0Root Token: s.XmpNPoi9sRhYtdKHaQhkHP6xDevelopment mode should NOT be used in production installations!==> Vault server started! Log data will stream in below:接下來,按照上述指引,需要 export 兩個環(huán)境變量: export VAULT_ADDR='http://127.0.0.1:8200'
export VAULT_TOKEN="s.XmpNPoi9sRhYtdKHaQhkHP6x"復制通過 vault status 命令可以查看 vault 狀態(tài): $ vault status
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed false
Total Shares 1
Threshold 1
Version 1.7.0
Storage Type inmem
Cluster Name vault-cluster-4d862b44
Cluster ID 92143a5a-0566-be89-f229-5a9f9c47fb1a
HA Enabled false復制3.2 正式環(huán)境3.2.1 啟動 server上述測試環(huán)境部署的 vault 使用了用于測試的一系列默認配置,如果我們要用于正式環(huán)境,我們自然需要進行一系列必要的配置,例如 vault 的數(shù)據(jù)具體存儲在哪里,http 端口與 tls 協(xié)議支持等。vault 支持通過 json、linux config、hcl 等多種配置方式,例如下面這個 config.hcl 配置: storage "raft" {
path = "./vault/data"
node_id = "node1"
}
listener "tcp" {
address = "127.0.0.1:8200"
tls_disable = "true"
}
api_addr = "http://127.0.0.1:8200"
cluster_addr = "https://127.0.0.1:8201"
ui = true復制接下來就可以啟動 server 了: mkdir -p ./vault/data
vault server -config=config.hcl復制3.2.2 server 的初始化對于單機模式的 server 來說,每個 server 都需要進行一次且只能進行一次初始化操作,用來應(yīng)用上述配置。對于 HA 模式的 vault 來說,則每個 cluster 需要執(zhí)行一次初始化操作。執(zhí)行下面的命令對 vault 進行初始化操作: export VAULT_ADDR='http://127.0.0.1:8200'
vault operator init復制會打印出下列信息:Unseal Key 1: 4jYbl2CBIv6SpkKj6Hos9iD32k5RfGkLzlosrrq/JgOmUnseal Key 2: B05G1DRtfYckFV5BbdBvXq0wkK5HFqB9g2jcDmNfTQiSUnseal Key 3: Arig0N9rN9ezkTRo7qTB7gsIZDaonOcc53EHo83F5chAUnseal Key 4: 0cZE0C/gEk3YHaKjIWxhyyfs8REhqkRW/CSXTnmTilv+Unseal Key 5: fYhZOseRgzxmJCmIqUdxEm9C3jB5Q27AowER9w4FC2Ck
Initial Root Token: s.KkNJYWF5g0pomcCLEmDdOVCW
Vault initialized with 5 key shares and a key threshold of 3. Please securelydistribute 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 itbefore it can start servicing requests.
Vault does not store the generated root key (previously known as master key).Without at least 3 key to reconstruct the root key, Vault will remainpermanently sealed!
It is possible to generate new unseal keys, provided you have a quorum ofexisting unseal keys shares. See "vault operator rekey" for more information.3.2.3 對 key 解封初始化后,vault 還不知道如何使用具體的存儲,因此處于封鎖狀態(tài),在上面的 output 內(nèi)容中有這樣一句話:Vault initialized with 5 key shares and a key threshold of 3.說明 threshold 為 3,也就是說,我們至少要對 3 個 key 執(zhí)行解封操作后,server 才可以使用。執(zhí)行下面的命令即可: vault operator unseal
secret/data/hello
======= Metadata =======
Key Value
--- -----
created_time 2022-01-15T01:40:09.888293Z
custom_metadata
deletion_time n/a
destroyed false
version 2
===== Data =====
Key Value
--- -----
excited yes
foo world復制我們也可以指定 path 下具體的 field 來獲取某個值: vault kv get -mount=secret -field=excited hello復制這樣就會直接打印出值:yes4.3 刪除數(shù)據(jù)把上述查詢語句中的 get 關(guān)鍵字改成 delete 關(guān)鍵字就可以刪除對應(yīng)數(shù)據(jù): vault kv delete -mount=secret -field=excited hello復制但是,如果你是誤刪除的話,vault 是支持誤刪恢復的,前提是你需要將 destroyed 配置為 false。通過下面的命令,可以將已刪除數(shù)據(jù)進行恢復: vault kv undelete -mount=secret -versions=2 hello復制本文參與?騰訊云自媒體分享計劃,分享自微信公眾號。原始發(fā)表:2022-09-03,如有侵權(quán)請聯(lián)系[email protected] 刪除存儲本文分享自 小腦斧科技博客 微信公眾號,前往查看如有侵權(quán),請聯(lián)系 [email protected] 刪除。本文參與?騰訊云自媒體分享計劃? ,歡迎熱愛寫作的你一起參與!存儲評論登錄后參與評論0 條評論熱度最新登錄 后參與評論推薦閱讀LV.關(guān)注文章0獲贊0目錄1. 引言2. Vault 安裝3. 啟動 Server3.1 測試環(huán)境3.2 正式環(huán)境3.2.1 啟動 server3.2.2 server 的初始化3.2.3 對 key 解封3.2.4 創(chuàng)建 engine4. vault 的基本使用4.1 數(shù)據(jù)寫入4.2 數(shù)據(jù)讀取4.3 刪除數(shù)據(jù)相關(guān)產(chǎn)品與服務(wù)對象存儲對象存儲(Cloud Object Storage,COS)是由騰訊云推出的無目錄層次結(jié)構(gòu)、無數(shù)據(jù)格式限制,可容納海量數(shù)據(jù)且支持 HTTP/HTTPS 協(xié)議訪問的分布式存儲服務(wù)。騰訊云 COS 的存儲桶空間無容量上限,無需分區(qū)管理,適用于 CDN 數(shù)據(jù)分發(fā)、數(shù)據(jù)萬象處理或大數(shù)據(jù)計算與分析的數(shù)據(jù)湖等多種場景。免費體驗產(chǎn)品介紹產(chǎn)品文檔COS新用戶專享存儲包低至1元,新老同享存儲容量低至0.02元/GB/月,立即選購!
領(lǐng)券社區(qū)專欄文章閱讀清單互動問答技術(shù)沙龍技術(shù)視頻團隊主頁騰訊云TI平臺活動自媒體分享計劃邀請作者入駐自薦上首頁技術(shù)競賽資源技術(shù)周刊社區(qū)標簽開發(fā)者手冊開發(fā)者實驗室關(guān)于社區(qū)規(guī)范免責聲明聯(lián)系我們友情鏈接騰訊云開發(fā)者掃碼關(guān)注騰訊云開發(fā)者領(lǐng)取騰訊云代金券熱門產(chǎn)品域名注冊云服務(wù)器區(qū)塊鏈服務(wù)消息隊列網(wǎng)絡(luò)加速云數(shù)據(jù)庫域名解析云存儲視頻直播熱門推薦人臉識別騰訊會議企業(yè)云CDN加速視頻通話圖像分析MySQL 數(shù)據(jù)庫SSL 證書語音識別更多推薦數(shù)據(jù)安全負載均衡短信文字識別云點播商標注冊小程序開發(fā)網(wǎng)站監(jiān)控數(shù)據(jù)遷移Copyright ? 2013 - 2024 Tencent Cloud. All Rights Reserved. 騰訊云 版權(quán)所有?深圳市騰訊計算機系統(tǒng)有限公司 ICP備案/許可證號:粵B2-20090059?深公網(wǎng)安備號 44030502008569騰訊云計算(北京)有限責任公司 京ICP證150476號 | ?京ICP備11018762號 | 京公網(wǎng)安備號11010802020287問題歸檔專欄文章快訊文章歸檔關(guān)鍵詞歸檔開發(fā)者手冊歸檔開發(fā)者手冊 Section 歸檔Copyright ? 2013 - 2024 Tencent Cloud.All Rights Reserved. 騰訊云 版權(quán)所有登錄 后參與評論00