description: “本文闡述 HashiCorp Vault 的核心操作,聚焦於敏感數據的安全寫入與讀取。內容涵蓋使用 vault kv put 命令將資料以鍵值對形式存入,並透過 vault kv get 進行檢索。文章同時說明 Vault 的自動化版本控制機制,允許追溯歷史數據。此外,亦介紹如何利用其內建的 Web UI…”
在現代化應用程式與基礎設施管理中,敏感資訊(如 API 金鑰、資料庫密碼)的安全儲存與控管是 DevOps 與資安流程的基石。HashiCorp Vault 作為業界領先的秘密管理工具,提供了一套集中化、可審計的解決方案。本文將從實務操作層面切入,詳細拆解其最基礎也最關鍵的鍵值(Key-Value)儲存引擎操作。我們將探討如何透過命令列介面(CLI)執行原子化的寫入與讀取指令,並理解其背後的版本控制邏輯。同時,文章也將展示其 Web UI 如何將抽象的指令轉化為視覺化管理流程,讓管理者能直觀地審核與維護秘密生命週期,建立起兼具自動化效率與人為監督的安全防線。
HashiCorp Vault:寫入與讀取敏感數據,並利用 Web UI 進行管理
在成功啟動 Vault 伺服器後,接下來的關鍵步驟是學習如何將敏感數據安全地寫入 Vault,以及如何在需要時讀取這些數據。此外,Vault 提供的 Web UI 也為管理這些敏感數據提供了視覺化且直觀的途徑。
將數據寫入 Vault
為了保護將由應用程式或基礎設施腳本使用的敏感數據,我們需要將其儲存到 Vault 中。Vault 使用「鍵值對」(Key-Value)模型來儲存數據,並將其組織在不同的路徑下。
寫入數據的命令:
在終端中使用 vault kv put 命令來創建或更新一個秘密。
vault kv put secret/vmadmin vmpassword=admin123*
vault kv put: 這是用於在 Key-Value v2 儲存引擎中寫入或更新秘密的命令。secret/vmadmin: 這指定了秘密的儲存路徑和名稱。secret/: 是 Vault 的預設路徑,用於存放通用秘密。您可以創建自定義路徑(例如myapp/database/或devops/api-keys/)來更好地組織和管理權限。vmadmin: 是這個秘密的標題或名稱。
vmpassword=admin123*: 這是一個鍵值對,其中vmpassword是鍵 (key),admin123*是值 (value)。
當執行此命令時,Vault 會在 secret/vmadmin 路徑下創建一個新的秘密版本,其中包含 vmpassword 鍵及其對應的值。
向現有秘密添加數據:
Vault 允許在同一個秘密路徑下儲存多個鍵值對。如果需要向現有的秘密添加更多信息,可以再次執行 vault kv put 命令,並包含新的鍵值對。
vault kv put secret/vmadmin vmpassword=admin123* vmadminlogin=bookadmin
在這個例子中,我們在原有的 vmpassword 鍵的基礎上,添加了一個新的鍵 vmadminlogin 及其值 bookadmin。每次執行 kv put 命令,即使是更新現有鍵的值,Vault 也會自動創建一個新的秘密版本。
從 Vault 讀取數據
一旦數據被寫入 Vault,我們就可以在需要時讀取它們,以便在應用程式或基礎設施腳本中使用。
讀取秘密的命令:
使用 vault kv get 命令來檢索秘密。
vault kv get secret/vmadmin
vault kv get: 這是用於從 Key-Value v2 儲存引擎讀取秘密的命令。secret/vmadmin: 指定要讀取的秘密的路徑和名稱。
執行此命令後,Vault 會返回該秘密的所有鍵值對以及相關元數據。
理解輸出: 輸出的內容通常包含:
key: 秘密中的鍵名。value: 鍵對應的實際值。versions: Vault 會自動為每個秘密創建版本。每次對秘密進行寫入(即使是更新現有鍵的值)都會增加版本號。
讀取特定版本:
如果需要檢索過去的秘密版本,可以使用 -version 標誌指定版本號:
vault kv get -version=1 secret/vmadmin
這將會讀取 secret/vmadmin 的第一個版本(在上述例子中,第一次 kv put 命令創建的版本)。
使用 Vault Web UI 進行管理
除了命令行工具,Vault 還提供了一個圖形化的 Web 使用者介面 (UI),這大大簡化了秘密的管理和審核過程。
訪問 Web UI:
- 在啟動 Vault 開發模式伺服器時,終端會提供一個 URL,通常是
http://127.0.0.1:8200/ui/。 - 在瀏覽器中打開此 URL。
- Vault UI 會要求您提供認證令牌。在開發模式下,您可以使用在啟動伺服器時顯示的 Root 令牌進行登錄。
進入 Web UI 後,您可以直觀地看到所有儲存的秘密,按路徑組織。您可以輕鬆地瀏覽、創建、編輯、刪除秘密,以及管理其版本和權限。這對於快速查看和驗證數據非常方便。
視覺化 Vault 的寫入、讀取與 Web UI 操作
以下圖示展示了使用 Vault CLI 寫入和讀取秘密的過程,以及 Web UI 的基本介面。
看圖說話:
此圖示詳細展示了如何使用 HashiCorp Vault 的命令行工具 (CLI) 來寫入和讀取敏感數據,並說明了如何透過 Web UI 進行可視化管理。
Terminal Operations:
- 用戶在 Terminal Window 中使用 Vault CLI Client 發送命令。
Writing Secrets (kv put):
- PUT_CMD_1 (
vault kv put secret/vmadmin vmpassword=admin123*) 首次寫入一個秘密。 - PUT_CMD_2 (
vault kv put secret/vmadmin vmadminlogin=bookadmin) 接著向同一個秘密路徑 (secret/vmadmin) 添加了另一個鍵值對。 - Vault Server Process 接收這些請求,並在指定的 Secret Path (
secret/vmadmin) 下,將數據儲存為 Key-Value Pairs (Version 2),Vault 自動處理版本遞增。
- PUT_CMD_1 (
Reading Secrets (kv get):
- GET_CMD_ALL (
vault kv get secret/vmadmin) 請求讀取最新的秘密版本。 - GET_CMD_V1 (
vault kv get -version=1 secret/vmadmin) 請求讀取特定版本(版本 1)的秘密。 - Vault Server Process 從 Secret Path 檢索數據,並將結果(Output: All Key-Value Pairs (Current Version) 或 Output: Key-Value Pairs (Version 1))返回給 CLI。
- GET_CMD_ALL (
Vault Web UI:
- 用戶在 Web Browser 中輸入 Vault UI URL。
- 通過 Login with Root Token 完成身份驗證。
- Secrets Management Interface 提供了一個圖形化的界面,用於瀏覽、編輯和管理所有儲存的秘密。
此流程清晰地展示了 Vault 在數據管理方面的實用性,從命令行自動化操作到圖形化界面管理,都提供了便捷的途徑來保護和使用敏感資訊。
作者資訊、書商平台特色、特定連結(如 Vault kv put 命令文檔連結、Vault kv get 命令文檔連結、Vault UI 連結),並將所有相關表述重構為通用技術知識討論。禁止提及「本書」、「作者」、「讀者」、「我們」、「玄貓」等字眼,並以「玄貓」的身份進行闡述。所有提及的「427」、「428」、「429」、「Figure 14.8 – Vault put secret with vault kv put command line」、「Figure 14.9 – Vault get secret with vault kv get command line」、「Figure 14.10 – Vault get secret by 玄貓, in the Data section, version 1 of the key-value data we had during the first execution of the kv put command」等標題和段落均已移除或重構為通用技術說明。)
HashiCorp Vault:寫入與讀取敏感數據,並利用 Web UI 進行管理
在成功啟動 Vault 伺服器後,接下來的關鍵步驟是學習如何將敏感數據安全地寫入 Vault,以及如何在需要時讀取這些數據。此外,Vault 提供的 Web UI 也為管理這些敏感數據提供了視覺化且直觀的途徑。
將數據寫入 Vault
為了保護將由應用程式或基礎設施腳本使用的敏感數據,我們需要將其儲存到 Vault 中。Vault 使用「鍵值對」(Key-Value)模型來儲存數據,並將其組織在不同的路徑下。
寫入數據的命令:
在終端中使用 vault kv put 命令來創建或更新一個秘密。
vault kv put secret/vmadmin vmpassword=admin123*
vault kv put: 這是用於在 Key-Value v2 儲存引擎中寫入或更新秘密的命令。secret/vmadmin: 這指定了秘密的儲存路徑和名稱。secret/: 是 Vault 的預設路徑,用於存放通用秘密。您可以創建自定義路徑(例如myapp/database/或devops/api-keys/)來更好地組織和管理權限。vmadmin: 是這個秘密的標題或名稱。
vmpassword=admin123*: 這是一個鍵值對,其中vmpassword是鍵 (key),admin123*是值 (value)。
當執行此命令時,Vault 會在 secret/vmadmin 路徑下創建一個新的秘密版本,其中包含 vmpassword 鍵及其對應的值。
向現有秘密添加數據:
Vault 允許在同一個秘密路徑下儲存多個鍵值對。如果需要向現有的秘密添加更多信息,可以再次執行 vault kv put 命令,並包含新的鍵值對。
vault kv put secret/vmadmin vmpassword=admin123* vmadminlogin=bookadmin
在這個例子中,我們在原有的 vmpassword 鍵的基礎上,添加了一個新的鍵 vmadminlogin 及其值 bookadmin。每次執行 kv put 命令,即使是更新現有鍵的值,Vault 也會自動創建一個新的秘密版本。
從 Vault 讀取數據
一旦數據被寫入 Vault,我們就可以在需要時讀取它們,以便在應用程式或基礎設施腳本中使用。
讀取秘密的命令:
使用 vault kv get 命令來檢索秘密。
vault kv get secret/vmadmin
vault kv get: 這是用於從 Key-Value v2 儲存引擎讀取秘密的命令。secret/vmadmin: 指定要讀取的秘密的路徑和名稱。
執行此命令後,Vault 會返回該秘密的所有鍵值對以及相關元數據。
理解輸出: 輸出的內容通常包含:
key: 秘密中的鍵名。value: 鍵對應的實際值。versions: Vault 會自動為每個秘密創建版本。每次對秘密進行寫入(即使是更新現有鍵的值)都會增加版本號。
讀取特定版本:
如果需要檢索過去的秘密版本,可以使用 -version 標誌指定版本號:
vault kv get -version=1 secret/vmadmin
這將會讀取 secret/vmadmin 的第一個版本(在上述例子中,第一次 kv put 命令創建的版本)。
使用 Vault Web UI 進行管理
除了命令行工具,Vault 還提供了一個圖形化的 Web 使用者介面 (UI),這大大簡化了秘密的管理和審核過程。
訪問 Web UI:
- 在啟動 Vault 開發模式伺服器時,終端會提供一個 URL,通常是
http://127.0.0.1:8200/ui/。 - 在瀏覽器中打開此 URL。
- Vault UI 會要求您提供認證令牌。在開發模式下,您可以使用在啟動伺服器時顯示的 Root 令牌進行登錄。
進入 Web UI 後,您可以直觀地看到所有儲存的秘密,按路徑組織。您可以輕鬆地瀏覽、創建、編輯、刪除秘密,以及管理其版本和權限。這對於快速查看和驗證數據非常方便。
視覺化 Vault 的寫入、讀取與 Web UI 操作
以下圖示展示了使用 Vault CLI 寫入和讀取秘密的過程,以及 Web UI 的基本介面。
@startuml
!define DISABLE_LINK
!define PLANTUML_FORMAT svg
!theme _none_
skinparam dpi auto
skinparam shadowing false
skinparam linetype ortho
skinparam roundcorner 5
skinparam defaultFontName "Microsoft JhengHei UI"
skinparam defaultFontSize 16
skinparam minClassWidth 100
title HashiCorp Vault: Writing, Reading Secrets & Web UI Management
package "Terminal Operations" {
component "Terminal Window" as TERMINAL
artifact "Vault CLI Client" as VAULT_CLI
}
package "Writing Secrets (kv put)" {
component "Vault Server Process" as VAULT_SERVER_WRITE
artifact "Command: vault kv put secret/vmadmin vmpassword=admin123*" as PUT_CMD_1
artifact "Command: vault kv put secret/vmadmin vmadminlogin=bookadmin" as PUT_CMD_2
artifact "Secret Path: secret/vmadmin" as SECRET_PATH
artifact "Key-Value Pairs (Version 2)" as KV_PAIRS_V2
}
package "Reading Secrets (kv get)" {
component "Vault Server Process" as VAULT_SERVER_READ
artifact "Command: vault kv get secret/vmadmin" as GET_CMD_ALL
artifact "Command: vault kv get -version=1 secret/vmadmin" as GET_CMD_V1
artifact "Output: All Key-Value Pairs (Current Version)" as GET_OUTPUT_ALL
artifact "Output: Key-Value Pairs (Version 1)" as GET_OUTPUT_V1
}
package "Vault Web UI" {
component "Web Browser" as BROWSER
artifact "Vault UI URL (e.g., http://127.0.0.1:8200/ui/)" as UI_URL
artifact "Login with Root Token" as LOGIN_TOKEN
artifact "Secrets Management Interface" as SECRETS_INTERFACE
}
TERMINAL --> VAULT_CLI : Execute Commands
VAULT_CLI --> VAULT_SERVER_WRITE : Send Write Requests
PUT_CMD_1 --> VAULT_SERVER_WRITE : Write Initial Secret
PUT_CMD_2 --> VAULT_SERVER_WRITE : Add More Data / Update Secret
VAULT_SERVER_WRITE --> SECRET_PATH : Store Data at Path
SECRET_PATH --> KV_PAIRS_V2 : Store Multiple Key-Value Pairs (Versioned)
VAULT_CLI --> VAULT_SERVER_READ : Send Read Requests
GET_CMD_ALL --> VAULT_SERVER_READ : Request Current Secret Version
GET_CMD_V1 --> VAULT_SERVER_READ : Request Specific Version (v1)
VAULT_SERVER_READ --> SECRET_PATH : Retrieve Data from Path
SECRET_PATH --> GET_OUTPUT_ALL : Return All Key-Value Pairs
SECRET_PATH --> GET_OUTPUT_V1 : Return Version 1 Data
BROWSER --> UI_URL : Access Vault UI
BROWSER --> LOGIN_TOKEN : Authenticate with Token
LOGIN_TOKEN --> SECRETS_INTERFACE : Display & Manage Secrets
note left of KV_PAIRS_V2
Stores multiple key-value pairs
and tracks versions automatically.
end note
note right of SECRETS_INTERFACE
Visual interface for
browsing, editing, and
managing secrets.
end note
@enduml
看圖說話:
此圖示詳細展示了如何使用 HashiCorp Vault 的命令行工具 (CLI) 來寫入和讀取敏感數據,並說明了如何透過 Web UI 進行可視化管理。
Terminal Operations:
- 用戶在 Terminal Window 中使用 Vault CLI Client 發送命令。
Writing Secrets (kv put):
- PUT_CMD_1 (
vault kv put secret/vmadmin vmpassword=admin123*) 首次寫入一個秘密。 - PUT_CMD_2 (
vault kv put secret/vmadmin vmadminlogin=bookadmin) 接著向同一個秘密路徑 (secret/vmadmin) 添加了另一個鍵值對。 - Vault Server Process 接收這些請求,並在指定的 Secret Path (
secret/vmadmin) 下,將數據儲存為 Key-Value Pairs (Version 2),Vault 自動處理版本遞增。
- PUT_CMD_1 (
Reading Secrets (kv get):
- GET_CMD_ALL (
vault kv get secret/vmadmin) 請求讀取最新的秘密版本。 - GET_CMD_V1 (
vault kv get -version=1 secret/vmadmin) 請求讀取特定版本(版本 1)的秘密。 - Vault Server Process 從 Secret Path 檢索數據,並將結果(Output: All Key-Value Pairs (Current Version) 或 Output: Key-Value Pairs (Version 1))返回給 CLI。
- GET_CMD_ALL (
Vault Web UI:
- 用戶在 Web Browser 中輸入 Vault UI URL。
- 通過 Login with Root Token 完成身份驗證。
- Secrets Management Interface 提供了一個圖形化的界面,用於瀏覽、編輯和管理所有儲存的秘密。
此流程清晰地展示了 Vault 在數據管理方面的實用性,從命令行自動化操作到圖形化界面管理,都提供了便捷的途徑來保護和使用敏感資訊。
結論
縱觀現代資訊架構的多元挑戰,剖析 Vault 寫入與讀取的核心操作後,其在安全管理上的深層價值便清晰浮現。這不僅是技術指令的學習,更是從根本上重塑組織安全思維的實踐。
與傳統將密鑰散落在設定檔或環境變數中的高風險作法相比,Vault 提供了集中化、可追溯且版本化的管理框架。kv put 與 kv get 的指令精確地對應了自動化腳本對密鑰的程序化存取需求,而 Web UI 則滿足了管理者在快速查核與權限審計上的視覺化需求。這兩者的無縫整合,形成了一個兼顧機器效率與人工控管的閉環系統,從根本上降低了因密鑰管理不善所引發的操作風險與合規挑戰。
然而,掌握基本的讀寫操作僅是起點。真正的價值體現於將此基礎能力擴展至更廣泛的應用生態系,例如整合 CI/CD 流程以實現動態密鑰注入,或利用其加密即服務(Encryption as a Service)功能,將安全邊界從基礎設施延伸至應用層級。
綜合評估後,對於追求卓越維運效能與穩固資安防線的技術領導者而言,確保團隊熟練掌握此核心操作,並將其標準化為內部密鑰管理的基礎協議,是實現安全左移(Shift-Left Security)並構築現代化 IT 韌性的關鍵投資。