HashiCorp Vault 入門練習

Vault, 保險庫

§ 引言

已紅了幾年的秘密保險庫機制。 好奇的試用看看。

此份文件只有入門的安裝與 CLI 操作。正式的應用可以透過 Web API 或相應的 client 函式庫。 正式的應用此文件不能滿足。

§ 關鍵知識

HashiCorp Vault(簡稱 Vault) 在零信任安全模型中扮演著關鍵角色,它專注於身份驗證和細粒度的授權控制,這些都是零信任的核心原則。

Vault 提供四種版本:開源版(Open Source Vault)、企業版(Enterprise Vault)、HCP Vault (HashiCorp Cloud Platform Vault)、HCP Vault Secrets。

免費版功能比較經典(少);有提供 Windows,Linux,Docker版本。 其中 Windows 版只適用開發環境。 Linux, Docker 版有開發與正式都有,不過 image 名稱可能不同安裝時需先弄清楚。

Vault 安全性的保證最終依賴的仍是憑證(非對稱式加密)與嚴謹的SOP。

部署要件

  • Vault 必需部署在網域的內層網域。

  • 必需支援 TLS 通訊協定。

  • 必需部署成 HA (high availability) 特性。

  • 其他基本的安全性要求如防火牆等等通通要有。

秘密(secrets)存取

  • 也可透過 Web API 存得 secrets 當然要先拿到授權。

§ 練習環境

  • windows 11 console

  • HashiCort Vault 1.19.0 版

§ 參考資料

官網

入門練習與基本操作


§ Vault 資料結構

用指令查看 Vault 服務,可以看到它的資料分成四大類。

已知 『秘密』 都放在 secret/ 的秘密路徑下。


>vault secrets list
Path          Type         Accessor              Description
----          ----         --------              -----------
cubbyhole/    cubbyhole    cubbyhole_f4a704c2    per-token private secret storage
identity/     identity     identity_3977060a     identity store
secret/       kv           kv_e41b9772           key/value secret storage
sys/          system       system_8c9fff15       system endpoints used for control, policy and debugging

所有秘密都經由 Secret Path 存取。

定義大致如下: secret/<your_secret_group>/<your_secret_tareget>

例: secret/myAwesomeApp/creds

§ 環境參數

PowerShell:
> $env:VAULT_ADDR="http://127.0.0.1:8200"
cmd.exe:
> set VAULT_ADDR=http://127.0.0.1:8200
linux/docker
> export VAULT_ADDR='http://127.0.0.1:8200'
> export VAULT_TOKEN='***...***'

Unseal Key: ......
Root Token: ......

§ 常用指令(CURD) - 使用 CLI

> vault version
> vault server -help
> vault server -dev   # 開發模式。勿用在正式環境。
> vault status        # 查看服務狀態,
> vault secrets list  # 查看秘密清冊
> vault kv -help
> vault kv get -mount=secret hello
> vault kv put secret/mydata key1=value1 key2=value2
> vault kv patch secret/mydata key2=new_value2 key3=value3
> vault kv rollback -version=2 secret/mydata  # 退回第2版
> vault kv delete secret/mydata               # 刪除最後一版
> vault kv list secret         # 列出 secret 秘密清單
> vault kv list secret/mydata  # 列出 secret/mydata 秘密清單

§ 練習紀錄

開啟 console 建立開發/練習用服數

> vault version     # 查看版本
> vault server -dev # 開發模式。用於練習勿用於正式環境。
→ 建立 vault 服務 http://127.0.0.1:8200

當 Vault 服務成功建立後也有相應的網站http://127.0.0.1:8200/ui/vault/auth?with=token

開啟另一 console 練習 CRUD

> set VAULT_ADDR=http://127.0.0.1:8200  # 需設定環境參數
> vault status      # 查看服務狀態 
...進行『秘密』的 CRUD 操作...


紀錄練習下報指令歷程

>vault version
>set VAULT_ADDR=http://127.0.0.1:8200
>vault status
>vault secrets list
>vault kv put -mount=secret myAwesomeApp/creds dbid=admin dbpwd=foo
>vault kv get -mount=secret myAwesomeApp/creds
>vault kv get secret/myAwesomeApp/creds
>vault kv patch secret/myAwesomeApp/creds dbpwd=new_value
>vault kv get secret/myAwesomeApp/creds
>vault kv rollback -help
>vault kv rollback -version=1 secret/myAwesomeApp/creds
>vault kv get secret/myAwesomeApp/creds
>vault kv list -mount=secret
>vault kv list secret
>vault kv list secret/myAwesomeApp
>vault kv delete secret/myAwesomeApp/creds
>vault kv get secret/myAwesomeApp/creds
>vault kv get -version=1 secret/myAwesomeApp/creds
>vault kv get -version=2 secret/myAwesomeApp/creds
>vault kv rollback -version=1 secret/myAwesomeApp/creds
>vault kv get secret/myAwesomeApp/creds

紀錄練習執行歷程(排程失敗部份)

PS C:\WINDOWS\system32> cmd
>cd vault_1.19.0_windows_386

>vault version
Vault v1.19.0 (7eeafb6160d60ede73c1d95566b0c8ea54f3cb5a), built 2025-03-04T12:36:40Z

>set VAULT_ADDR=http://127.0.0.1:8200

>vault status
Key             Value
---             -----
Seal Type       shamir
Initialized     true
Sealed          false
Total Shares    1
Threshold       1
Version         1.19.0
Build Date      2025-03-04T12:36:40Z
Storage Type    inmem
Cluster Name    vault-cluster-93c90aa1
Cluster ID      046d365e-50ef-1231-7bde-2f217ed8432d
HA Enabled      false

>vault secrets list
Path          Type         Accessor              Description
----          ----         --------              -----------
cubbyhole/    cubbyhole    cubbyhole_f4a704c2    per-token private secret storage
identity/     identity     identity_3977060a     identity store
secret/       kv           kv_e41b9772           key/value secret storage
sys/          system       system_8c9fff15       system endpoints used for control, policy and debugging

>vault kv put -mount=secret myAwesomeApp/creds dbid=admin dbpwd=foo
========= Secret Path =========
secret/data/myAwesomeApp/creds

======= Metadata =======
Key                Value
---                -----
created_time       2025-03-21T02:33:30.0039067Z
custom_metadata    <nil>
deletion_time      n/a
destroyed          false
version            1


>vault kv get -mount=secret myAwesomeApp/creds
========= Secret Path =========
secret/data/myAwesomeApp/creds
======= Metadata =======
Key                Value
---                -----
created_time       2025-03-21T02:33:30.0039067Z
custom_metadata    <nil>
deletion_time      n/a
destroyed          false
version            1

==== Data ====
Key      Value
---      -----
dbid     admin
dbpwd    foo

>vault kv get secret/myAwesomeApp/creds
========= Secret Path =========
secret/data/myAwesomeApp/creds

======= Metadata =======
Key                Value
---                -----
created_time       2025-03-21T02:33:30.0039067Z
custom_metadata    <nil>
deletion_time      n/a
destroyed          false
version            1

==== Data ====
Key      Value
---      -----
dbid     admin
dbpwd    foo

>vault kv patch secret/myAwesomeApp/creds dbpwd=new_value
========= Secret Path =========
secret/data/myAwesomeApp/creds

======= Metadata =======
Key                Value
---                -----
created_time       2025-03-21T02:37:00.2761799Z
custom_metadata    <nil>
deletion_time      n/a
destroyed          false
version            2

>vault kv get secret/myAwesomeApp/creds
========= Secret Path =========
secret/data/myAwesomeApp/creds

======= Metadata =======
Key                Value
---                -----
created_time       2025-03-21T02:37:00.2761799Z
custom_metadata    <nil>
deletion_time      n/a
destroyed          false
version            2

==== Data ====
Key      Value
---      -----
dbid     admin
dbpwd    new_value

>vault kv rollback -help

>vault kv rollback -version=1 secret/myAwesomeApp/creds
Key                Value
---                -----
created_time       2025-03-21T02:59:03.1017706Z
custom_metadata    <nil>
deletion_time      n/a
destroyed          false
version            3

>vault kv get secret/myAwesomeApp/creds
========= Secret Path =========
secret/data/myAwesomeApp/creds

======= Metadata =======
Key                Value
---                -----
created_time       2025-03-21T02:59:03.1017706Z
custom_metadata    <nil>
deletion_time      n/a
destroyed          false
version            3

==== Data ====
Key      Value
---      -----
dbid     admin
dbpwd    foo

>vault kv list -mount=secret
Keys
----
myAwesomeApp/

>vault kv list secret
Keys
----
myAwesomeApp/

>vault kv list secret/myAwesomeApp
Keys
----
creds

>vault kv delete secret/myAwesomeApp/creds
Success! Data deleted (if it existed) at: secret/data/myAwesomeApp/creds

>vault kv get secret/myAwesomeApp/creds
========= Secret Path =========
secret/data/myAwesomeApp/creds

======= Metadata =======
Key                Value
---                -----
created_time       2025-03-21T02:59:03.1017706Z
custom_metadata    <nil>
deletion_time      2025-03-21T03:08:54.9130538Z
destroyed          false
version            3

>vault kv get -version=1 secret/myAwesomeApp/creds
========= Secret Path =========
secret/data/myAwesomeApp/creds

======= Metadata =======
Key                Value
---                -----
created_time       2025-03-21T02:33:30.0039067Z
custom_metadata    <nil>
deletion_time      n/a
destroyed          false
version            1

==== Data ====
Key      Value
---      -----
dbid     admin
dbpwd    foo

>vault kv get -version=2 secret/myAwesomeApp/creds
========= Secret Path =========
secret/data/myAwesomeApp/creds

======= Metadata =======
Key                Value
---                -----
created_time       2025-03-21T02:37:00.2761799Z
custom_metadata    <nil>
deletion_time      n/a
destroyed          false
version            2

==== Data ====
Key      Value
---      -----
dbid     admin
dbpwd    new_value

>vault kv rollback -version=1 secret/myAwesomeApp/creds
Key                Value
---                -----
created_time       2025-03-21T03:11:07.5823163Z
custom_metadata    <nil>
deletion_time      n/a
destroyed          false
version            4

>vault kv get secret/myAwesomeApp/creds
========= Secret Path =========
secret/data/myAwesomeApp/creds

======= Metadata =======
Key                Value
---                -----
created_time       2025-03-21T03:11:07.5823163Z
custom_metadata    <nil>
deletion_time      n/a
destroyed          false
version            4

==== Data ====
Key      Value
---      -----
dbid     admin
dbpwd    foo

(EOF)

Last updated