<矩形寬度=“1200”高度=“340”rx=“12”填滿=“url(#bg-1754)”/>
<矩形x =“60”y =“50”寬度=“4”高度=“60”rx =“2”填滿=“#38bdf8”/>
<矩形x =“80”y =“50”寬度=“121”高度=“28”rx =“14”填滿=“#38bdf8”不透明度=“0.15”/>
1. LDAP驗證方法
LDAP 驗證方法允許 Vault 使用 LDAP 目錄(Active Directory、OpenLDAP、FreeIPA)對使用者進行驗證。這是企業中對人類使用者進行身份驗證的最常用方法,因為大多數組織已經部署了 LDAP/AD 基礎架構。
架構
┌──────────┐ 1. 登入 ┌────────────┐
│ 使用者 │ ──────────────────▶ │ 保險庫 │
│ │ │ LDAP 驗證 │
│ │ 4. Vault 代幣 │ │
│ │ ◀────────────────── │ │
└──────────┘ └──────┬────────┘
│
2.LDAP綁定(驗證密碼)
3. 搜尋群組
│
▼
┌────────────┐
│ LDAP 伺服器 │
│ (AD/LDAP) │
└────────────┘
設定 Active Directory
# 啟用 LDAP 驗證
vault auth enable ldap
#Cấu hình kết nối Active Directory
vault write auth/ldap/config \
url =“ldaps://ad.company.com:636”\
userdn =“OU =用戶,DC =公司,DC = com”\
userattr="sAMAccountName" \
groupdn =“OU =群組,DC =公司,DC = com”\
組屬性=“cn”\
groupfilter="(&(objectClass=group)(成員:1.2.840.113556.1.4.1941:={{.UserDN}}))" \
binddn =“CN = vault-svc,OU = ServiceAccounts,DC =公司,DC = com”\
綁定通行證=“VaultServiceP@ss”\
starttls=假 \
insecure_tls=假 \
證書=@/etc/vault/ldap-ca.pem \
token_ttl=8h \
token_max_ttl=24小時
使用 OpenLDAP 設定
vault 寫入 auth/ldap/config \
url =“ldaps://ldap.company.com:636”\
userdn =“ou =人員,dc =公司,dc = com”\
使用者屬性=“uid”\
groupdn =“ou =群組,dc =公司,dc = com”\
組屬性=“cn”\
groupfilter="(|(memberUid={{.Username}})(member={{.UserDN}}))" \
binddn =“cn=vault,ou=服務,dc=公司,dc=com”\
綁定通行證=“LdapBindP@ss”\
證書=@/etc/vault/ldap-ca.pem
群組 → 策略映射
# 對映 LDAP 群組「DevOps」→ Vault 策略
vault write auth/ldap/groups/DevOps \
政策=“devops-admin,kv-devops,pki-問題”
# 映射 LDAP 群組「開發人員」→ Vault 策略
vault write auth/ldap/groups/Developers \
策略=“dev-readonly,kv-dev”
# 映射 LDAP 群組「DBA」→ Vault 策略
vault write auth/ldap/groups/DBA \
政策=“資料庫管理,資料庫旋轉”
# 映射特定使用者→附加策略
vault write auth/ldap/users/john.doe \
政策=「團隊領導額外」\
groups =“DevOps,開發人員”
# Liệt kê 團體
vault list auth/ldap/groups
使用 LDAP 登入
# CLI 登入
vault login -method=ldap username=john.doe
# 密碼(將會隱藏):****
# 介面登入
curl -s --request POST \
--data '{"密碼": "使用者密碼"}' \
${VAULT_ADDR}/v1/auth/ldap/login/john.doe | ${VAULT_ADDR}/v1/auth/ldap/login/john.doe | jq .
2. OIDC認證方式
OIDC (OpenID Connect) 驗證方法允許保險箱透過支援 OIDC 的身份提供者進行驗證 - Keycloak、Azure AD (Entra ID)、Okta、Google Workspace、Auth0。這是最現代的人工身份驗證方法,因為它支援 SSO、MFA 和基於瀏覽器的登入。
OIDC 驗證流程
┌──────────┐ 1.金庫登入 ┌────────────┐
│ 使用者 │ ────────────────────▶ │ 保險庫 │
│(瀏覽器)│ │ OIDC 驗證 │
│ │ 2. 重新導向至 IdP │ │
│ │ ◀──────────────────── │ │
│ │ └────────────┘
│ │ 3. 在 IdP 登入
│ │ ──────────────────▶ ┌──────────────┐
│ │ │ 鑰匙斗篷/ │
│ │ 4. 授權碼 │ Azure AD │
│ │ ◀──────────────────── │ │
│ │ └────────────┘
│ │ 5. 授權碼 → Vault
│ │ ──────────────────▶ ┌──────────────┐
│ │ │ 金庫 │
│ │ 6. 兌換碼 │ │
│ │ 代幣 │ │
│ │ 7. Vault 代幣 │ │
│ │ ◀──────────────────── │ │
└──────────┘ └──────────────┘
使用 Keycloak 配置
# 啟用 OIDC 驗證
vault auth enable oidc
# Cấu hình OIDC với Keycloak
vault write auth/oidc/config \
oidc_discovery_url="https://keycloak.company.com/realms/company" \
oidc_client_id="金庫" \
oidc_client_secret="vault-client-secret" \
預設角色=“預設”# Tạo OIDC 角色
vault write auth/oidc/role/default \
bound_audiences =「金庫」\
allowed_redirect_uris="https://vault.company.com/ui/vault/auth/oidc/oidc/callback" \
allowed_redirect_uris="http://localhost:8250/oidc/callback" \
user_claim =「首選使用者名稱」\
groups_claim =「群組」\
token_policies=“預設”\
token_ttl=8h \
token_max_ttl=24h \
oidc_scopes="openid、個人資料、電子郵件、群組"
# Tạo 角色 cho admin với 綁定聲明
vault write auth/oidc/role/admin \
bound_audiences =「金庫」\
allowed_redirect_uris="https://vault.company.com/ui/vault/auth/oidc/oidc/callback" \
allowed_redirect_uris="http://localhost:8250/oidc/callback" \
user_claim =「首選使用者名稱」\
groups_claim =「群組」\
bound_claims='{“部門”:“IT”,“角色”:“管理員”}' \
Claim_mappings='{"電子郵件": "電子郵件", "部門": "部門"}' \
token_policies="admin,kv-admin" \
token_ttl=4h \
token_max_ttl=8h
使用 Azure AD (Entra ID) 設定
vault 寫入 auth/oidc/config \
oidc_discovery_url="https://login.microsoftonline.com/<tenant-id>/v2.0" \
oidc_client_id="<應用程式 ID>" \
oidc_client_secret="<客戶端秘密>" \
default_role =“天藍色預設”
vault write auth/oidc/role/azure-default \
bound_audiences="<應用程式 ID>" \
allowed_redirect_uris="https://vault.company.com/ui/vault/auth/oidc/oidc/callback" \
allowed_redirect_uris="http://localhost:8250/oidc/callback" \
user_claim="電子郵件" \
groups_claim =「群組」\
token_policies=“預設”\
oidc_scopes="openid、個人資料、電子郵件"
使用 OIDC 登入
# 以瀏覽器為基礎的登入(mở browser tự động)
vault login -method=oidc role=default
# Chỉ định 端口 cho 回調
vault login -method=oidc port=8250 role=default
# Qua Vault UI:chọn OIDC → 登入 → 重定向 đến IdP
3. JWT認證方法
JWT 驗證方法使用 JSON Web 令牌進行驗證。與 OIDC(基於瀏覽器)不同,當用戶端已有 JWT 令牌時,JWT 驗證適用於機器身份驗證 - 特別是對於 CI/CD 管道。
JWT 與 OIDC 驗證
<表> <標題>
條件JWT 驗證OIDC 驗證 <正文> 登入流程客戶端直接傳送JWT基於瀏覽器重新導向 物件機器、CI/CD人類使用者 令牌來源客戶端已擁有 JWT從 IdP 取得的 Vault MFA 支援否是(透過 IdP)GitHub 操作 OIDC → Vault JWT 驗證
GitHub Actions 為每個工作流程運行提供 OIDC 令牌,允許在不保存機密的情況下對 Vault 進行身份驗證:
# 啟用 JWT auth cho GitHub Actions
vault auth enable -path=github-actions jwt
# Cấu hình JWT auth với GitHub OIDC 提供者
vault write auth/github-actions/config \
oidc_discovery_url="https://token.actions.githubusercontent.com" \
bound_issuer =“https://token.actions.githubusercontent.com"
# Tạo 角色 cho 儲存庫 cụ thể
vault write auth/github-actions/role/my-app \
角色類型=“jwt”\
bound_audiences =“https://github.com/my-org" \
bound_claims_type="glob" \
bound_claims='{"repository": "my-org/my-app", "ref": "refs/heads/main"}' \
user_claim =「儲存庫」\
token_policies =「我的應用程式部署」\
token_ttl=10m \
token_max_ttl=30m# Tạo 角色 cho toàn bộ 組織
vault write auth/github-actions/role/org-readonly \
角色類型=“jwt”\
bound_audiences =“https://github.com/my-org" \
bound_claims_type="glob" \
bound_claims='{"repository": "my-org/*"}' \
user_claim =「儲存庫」\
token_policies="org-readonly" \
token_ttl=5m
GitHub Actions 工作流程
# .github/workflows/deploy.yml
名稱:使用 Vault OIDC 進行部署
於:
推:
分支:[主要]
權限:
id-token: write # 所需的 cho OIDC 令牌
內容: 閱讀
職位:
部署:
運行:ubuntu-latest
步驟:
- 使用:actions/checkout@v4
- 名稱:向 Vault 進行身份驗證
使用:hashicorp/vault-action@v3
與:
網址:https://vault.company.com
方法:jwt
路徑:github-actions
角色:我的應用程式
jwtGithubAudience:https://github.com/my-org
秘密: |
秘密/資料/生產/資料庫使用者名稱|資料庫使用者;
秘密/資料/生產/資料庫密碼 |資料庫密碼
- 名稱:部署
運行:./deploy.sh
GitLab CI JWT 驗證
# 啟用 JWT auth cho GitLab CI
vault auth enable -path=gitlab-ci jwt
#Cấu hình
vault write auth/gitlab-ci/config \
jwks_url="https://gitlab.company.com/-/jwks" \
bound_issuer =“https://gitlab.company.com"
#陶角色
vault write auth/gitlab-ci/role/deploy \
角色類型=“jwt”\
bound_claims='{"project_id": "42", "ref_protected": "true"}' \
user_claim =「專案路徑」\
token_policies="gitlab-deploy" \
token_ttl=10m
# .gitlab-ci.yml
部署:
階段:部署
id_令牌:
VAULT_ID_TOKEN:
音訊:https://vault.company.com
腳本:
- |
VAULT_TOKEN=$(vault write-field=token auth/gitlab-ci/login \
角色=部署\
jwt="${VAULT_ID_TOKEN}")
匯出 VAULT_TOKEN
DB_PASS=$(vault kv get-field=密碼秘密/生產/db)
./部署.sh
4.綁定宣告與宣告映射
綁定宣告
綁定宣告限制允許哪些 JWT 令牌登入角色:
# 完全匹配
vault write auth/jwt/role/strict-role \
bound_claims='{"部門": "工程", "團隊": "平台"}'
# 全域模式匹配
vault write auth/jwt/role/glob-role \
bound_claims_type="glob" \
bound_claims='{"repository": "my-org/*", "ref": "refs/heads/main"}'
# 多個值(或邏輯)
vault write auth/jwt/role/multi-role \
bound_claims='{"group": ["devops", "sre", "platform"]}'
宣告映射
宣告會對應將 JWT 宣告對應到 Vault 身分識別元資料:
vault 寫入 auth/oidc/role/mapped-role \
Claim_mappings='{"email": "email", "department": "dept", "employee_id": "emp_id"}'
# 策略中可用的元資料:
# {{identity.entity.aliases..metadata.email}}
# {{identity.entity.aliases..metadata.dept}}
5。最佳實務
LDAP
始終使用 LDAPS(連接埠 636)或 StartTLS
Vault 綁定的服務帳戶應具有唯讀權限
映射群組而不是單一使用者以方便管理
在應用生產之前仔細測試 LDAP 過濾器配置
OIDC
將
allowed_redirect_uris限制為僅保險箱實際網址使用
bound_claims按部門/角色限制存取在 IdP 處啟用 MFA(Keycloak、Azure AD)
定期輪替
oidc_client_secret
智威湯遜
偏好 CI/CD 中的 OIDC 令牌,而不是靜態機密 (AppRole)
綁定聲明應盡可能具體(儲存庫、分支、環境)
CI/CD 的令牌短 TTL(5-15 分鐘)
使用
bound_audiences防止令牌濫用
6。摘要
LDAP Auth - 人類使用者的企業選擇,利用現有的 AD/LDAP 基礎設施
OIDC Auth — 人類使用者最先進的技術、SSO、MFA、基於瀏覽器的登入
JWT Auth - 非常適合 CI/CD(GitHub Actions OIDC、GitLab CI JWT),無需保存靜態機密
下一篇文章將重點放在 Kubernetes、AWS 和雲端身份驗證方法 - 基於工作負載身份的身份驗證。