在 Day 15、16,我們介紹了 Vault 的 AppRole Authentication,了解應用程式如何透過 role_id 與 secret_id 取得 Token。
但這裡有個值得思考的問題:
如果同一個使用者透過不同的 Authentication Method 登入,Vault 怎麼知道他們其實是同一個人?
例如:
Authentication Method 旨在驗證如何登入 Vault,而 Identity Entity 定義你在 Vault 中是誰。
至於 Identity Alias 將不同登入身分(Auth method) 對應到同一個 Entity,而 Identity Group 將多個 Entity 組織起來,統一管理權限。
舉個例子來說,不管你今天是使用PIN、PassKey、SSO還是帳號密碼登入,這些方法們指向地都應該是同一個Identity。
這次我們以 HashiCorp Vault 其中一種 Auth Method - userpass 來進行示範。
(Userpass 允許使用者透過內部管理的帳號與密碼登入 Vault)
啟用userpass
vault auth enable userpass
建立測試使用者
grantli@xxx:~$ vault write auth/userpass/users/grant \
password="DemoPassword123!" \
policies="default"
Success! Data written to: auth/userpass/users/grant
建立 Entity
vault write identity/entity \
name="grant-entity" \
metadata=department="IT"
接著,從輸出中找到 userpass/ 的 accessor,例如:
grantli@xxx:~$ vault auth list -format=json
{
"userpass/": {
"uuid": "dc1ba448-8859-fb61-c41b-c5b272616c8f",
"type": "userpass",
"description": "",
"accessor": "auth_userpass_80ba3c4b",
"config": {
"default_lease_ttl": 0,
"max_lease_ttl": 0,
"force_no_cache": false,
"token_type": "default-service"
},
"options": null,
"local": false,
"seal_wrap": false,
"external_entropy_access": false,
"plugin_version": "",
"running_plugin_version": "v2.0.4+builtin.vault",
"running_sha256": "",
"deprecation_status": "supported"
}
}
grantli@xxx:~$ vault write identity/entity-alias \
name="grant" \
canonical_id="2001db5a-8b19-0a3d-eca6-43a8aef316b8" \
mount_accessor="auth_userpass_80ba3c4b"
Success! Data written to: identity/entity-alias
接著! 我們便可以使用Alias登入
grantli@xxx:~$ vault login -method=userpass \
username=grant \
password="DemoPassword123!"
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 hvs.CAESIAmEM4C8k5YJNT9GTTbbTPJUVrXOiAqplwDAY5063vdOGh4KHGh2cy5ZeWxPNlI4ZFBxcnBrbDRUdzhZd1A4aFI
token_accessor vOQ1F3SYBNqPj8yfGx6pitT6
token_duration 768h
token_renewable true
token_policies ["default"]
identity_policies []
policies ["default"]
token_meta_username grant
執行 look up 後就可以看到 entity 已經對應至 userpass
grantli@azgranttest01:~$ vault token lookup
Key Value
--- -----
accessor vOQ1F3SYBNqPj8yfGx6pitT6
creation_time 1794237896
creation_ttl 768h
display_name userpass-grant
entity_id 2001db5a-8b19-0a3d-eca6-43a8aef316b8
expire_time 2026-12-11T15:24:56.22350364Z
explicit_max_ttl 0s
id hvs.CAESIAmEM4C8k5YJNT9GTTbbTPJUVrXOiAqplwDAY5063vdOGh4KHGh2cy5ZeWxPNlI4ZFBxcnBrbDRUdzhZd1A4aFI
issue_time 2026-11-09T15:24:56.223506174Z
meta map[username:grant]
num_uses 0
orphan true
path auth/userpass/login/grant
policies [default]
renewable true
ttl 767h58m38s
type service