iT邦幫忙

2026 iThome 鐵人賽

DAY 12
0
Security

身分驗證你我他 ─ 使用 HashiCorp Vault 與 Terraform 打造 Secret 與 Identity 實驗室系列 第 14 篇

Day 14. Database Secrets Engine — 動態產生 Database Credentials

  • 分享至 

  • xImage
  •  

前幾天我們探討了Static Secret 與 Dynamic Secret 的差異,總而言之,核心意義在於:

應用程式不再保存一組長期存在的 DB 帳號密碼,而是需要時向 Vault 取得一組「有期限」的 Database Credentials。

因此,有別於以往傳統的流程,應用程式長期持有對應的資料庫帳號密碼,並且儲存於某處,當有需要時則利用其進行驗證,而使用 Vault 的流程則是以其當作中介層,藉由儲存於 Vault 裡的 Credentials 動態至資料庫建立對應的帳號密碼。

以下實作我以 PostgreSQL 為利,首先我們需要一組用來管理其他帳號密碼request的資料庫管理員帳號密碼:

使用PostgresSQL terminal:

sudo -u postgres psql

建立一個測試用的DB:

CREATE DATABASE vaultdemo;

建立Credentials:

CREATE ROLE vaultadmin
WITH LOGIN PASSWORD 'vaultpass'
CREATEROLE;

建置完成之後我們可以回到Vault的terminal:

vault write database/config/my-postgresql \
    plugin_name=postgresql-database-plugin \
    allowed_roles="my-role" \
    connection_url="postgresql://{{username}}:{{password}}@localhost:5432/vaultdemo?sslmode=disable" \
    username="vaultadmin" \
    password="vaultpass"

https://ithelp.ithome.com.tw/upload/images/20261003/201289255FA41zRQti.png

當今天有人要求 my-role credential 時,要怎麼建立 Database User?
我們也需要告訴 Vault 該怎麼做:
({{name}}與 {{password}}是create_statements中支援動態產生帳密的變數。)

vault write database/roles/my-role \
    db_name=my-postgresql \
    creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}';" \
    default_ttl="1h" \
    max_ttl="24h"

Dynamic Credentials

設定完成後,透過 read 指令讀取role裡的設定並建立Dynamic secret:

vault read database/creds/my-role

若你看到以下的結果代表產生出了動態密鑰!!

grantli@xxxxx:~$ vault read database/creds/my-role
Key                Value
---                -----
lease_id           database/creds/my-role/7d6EqRdkd7XUrlgOrfyLBN5y
lease_duration     1h
lease_renewable    true
password           ASXEnyC5Gmk71hgaQ-wo
username           v-token-my-role-YqnSLzKjoNhoUaHtul7o-1791010041

還記得lease的概念嗎? 就好像你今天在外面租房子一樣,每份租約是被設計成附帶期限的(lease_duration)。
可以透過 look up 指令查看一下相關的資訊:

vault lease lookup database/creds/my-role/7d6EqRdkd7XUrlgOrfyLBN5y

https://ithelp.ithome.com.tw/upload/images/20261003/20128925utH3KE5S3I.png

TTL即是是動態的剩餘時間,在到期後 lease 會執行 DB credential 的撤銷邏輯,對應的帳號密碼將不再能被使用(revoke)。
而重要之處在於,透過 plugin 我們將不用手動操作 revoke 的動作,Vault 將會透過我們一開始建立的 Admin 帳號進行全權處理。
是不是相當方便呢?


上一篇
Day 13. Static Secrets vs Dynamic Secrets
系列文
身分驗證你我他 ─ 使用 HashiCorp Vault 與 Terraform 打造 Secret 與 Identity 實驗室 共 14 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言