返回文章列表

HashiCorp Vault 核心操作:敏感數據存取與管理

本文闡述 HashiCorp Vault 的核心操作,聚焦於敏感數據的安全寫入與讀取。內容涵蓋使用 `vault kv put` 命令將資料以鍵值對形式存入,並透過 `vault kv get` 進行檢索。文章同時說明 Vault 的自動化版本控制機制,允許追溯歷史數據。

DevOps 資訊安全

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:

  1. 在啟動 Vault 開發模式伺服器時,終端會提供一個 URL,通常是 http://127.0.0.1:8200/ui/
  2. 在瀏覽器中打開此 URL。
  3. Vault UI 會要求您提供認證令牌。在開發模式下,您可以使用在啟動伺服器時顯示的 Root 令牌進行登錄。

進入 Web UI 後,您可以直觀地看到所有儲存的秘密,按路徑組織。您可以輕鬆地瀏覽、創建、編輯、刪除秘密,以及管理其版本和權限。這對於快速查看和驗證數據非常方便。

視覺化 Vault 的寫入、讀取與 Web UI 操作

以下圖示展示了使用 Vault CLI 寫入和讀取秘密的過程,以及 Web UI 的基本介面。

看圖說話:

此圖示詳細展示了如何使用 HashiCorp Vault 的命令行工具 (CLI) 來寫入和讀取敏感數據,並說明了如何透過 Web UI 進行可視化管理。

  1. Terminal Operations:

    • 用戶在 Terminal Window 中使用 Vault CLI Client 發送命令。
  2. 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 自動處理版本遞增。
  3. 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 ProcessSecret Path 檢索數據,並將結果(Output: All Key-Value Pairs (Current Version)Output: Key-Value Pairs (Version 1))返回給 CLI。
  4. 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:

  1. 在啟動 Vault 開發模式伺服器時,終端會提供一個 URL,通常是 http://127.0.0.1:8200/ui/
  2. 在瀏覽器中打開此 URL。
  3. 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 進行可視化管理。

  1. Terminal Operations:

    • 用戶在 Terminal Window 中使用 Vault CLI Client 發送命令。
  2. 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 自動處理版本遞增。
  3. 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 ProcessSecret Path 檢索數據,並將結果(Output: All Key-Value Pairs (Current Version)Output: Key-Value Pairs (Version 1))返回給 CLI。
  4. Vault Web UI:

    • 用戶在 Web Browser 中輸入 Vault UI URL
    • 通過 Login with Root Token 完成身份驗證。
    • Secrets Management Interface 提供了一個圖形化的界面,用於瀏覽、編輯和管理所有儲存的秘密。

此流程清晰地展示了 Vault 在數據管理方面的實用性,從命令行自動化操作到圖形化界面管理,都提供了便捷的途徑來保護和使用敏感資訊。

結論

縱觀現代資訊架構的多元挑戰,剖析 Vault 寫入與讀取的核心操作後,其在安全管理上的深層價值便清晰浮現。這不僅是技術指令的學習,更是從根本上重塑組織安全思維的實踐。

與傳統將密鑰散落在設定檔或環境變數中的高風險作法相比,Vault 提供了集中化、可追溯且版本化的管理框架。kv putkv get 的指令精確地對應了自動化腳本對密鑰的程序化存取需求,而 Web UI 則滿足了管理者在快速查核與權限審計上的視覺化需求。這兩者的無縫整合,形成了一個兼顧機器效率與人工控管的閉環系統,從根本上降低了因密鑰管理不善所引發的操作風險與合規挑戰。

然而,掌握基本的讀寫操作僅是起點。真正的價值體現於將此基礎能力擴展至更廣泛的應用生態系,例如整合 CI/CD 流程以實現動態密鑰注入,或利用其加密即服務(Encryption as a Service)功能,將安全邊界從基礎設施延伸至應用層級。

綜合評估後,對於追求卓越維運效能與穩固資安防線的技術領導者而言,確保團隊熟練掌握此核心操作,並將其標準化為內部密鑰管理的基礎協議,是實現安全左移(Shift-Left Security)並構築現代化 IT 韌性的關鍵投資。