<矩形寬度=“1200”高度=“340”rx=“12”填滿=“url(#bg-43)”/>
<矩形x =“60”y =“50”寬度=“4”高度=“60”rx =“2”填滿=“#f472b6”/>
<矩形x =“80”y =“50”寬度=“121”高度=“28”rx =“14”填滿=“#f472b6”不透明度=“0.15”/>
1. KMIP 秘密引擎(企業)
KMIP(金鑰管理互通協定)是用於加密金鑰管理的 OASIS 標準協定。 KMIP Secrets Engine 允許 Vault 充當KMIP 伺服器,為支援 KMIP 的資料庫、儲存系統和應用程式提供金鑰管理。
用例
MongoDB Enterprise — 使用 KMIP 進行靜態加密
MySQL Enterprise — TDE(透明資料加密)
VMware vSphere — 虛擬機器加密
NetApp — 儲存加密
設定 KMIP
# 啟用 KMIP
vault secrets enable kmip
#Cấu hình KMIP 監聽器
vault write kmip/config \
Listen_addrs =“0.0.0.0:5696”\
tls_ca_key_type="ec" \
tls_ca_key_bits=256 \
default_tls_client_key_type="ec" \
default_tls_client_key_bits=256
# Tạo 範圍(邏輯分離)
vault write -f kmip/scope/mongodb
# Tạo 角色範圍大
vault write kmip/scope/mongodb/role/admin \
操作_啟動=真\
操作_建立=真\
操作_銷毀=真\
operation_discover_versions=true \
操作_get=true \
操作_定位=真\
操作重設密鑰=true
# Sinh 用戶端憑證 cho MongoDB
vault write -format=json kmip/scope/mongodb/role/admin/credential/generate \
格式=pem > mongodb-kmip-creds.json
# 提取憑證和密鑰
貓 mongodb-kmip-creds.json | jq -r '.data.certificate' > client.pem
貓 mongodb-kmip-creds.json | jq -r '.data.private_key' >> client.pem
貓 mongodb-kmip-creds.json | jq -r '.data.ca_chain[]' > ca.pem
有 KMIP Vault 的 MongoDB
# mongod.conf
安全:
啟用加密: true
公里普:
伺服器名稱:vault.company.com
埠:5696
用戶端憑證檔案:/etc/mongodb/client.pem
伺服器CA檔:/etc/mongodb/ca.pem
keyStatePollingSeconds:60
2.領事秘密引擎
Consul Secrets Engine產生動態Consul ACL令牌,允許應用程式使用短期憑證存取Consul服務網格和KV儲存。
# 啟用 Consul 秘密引擎
vault secrets enable consul
# Cấu hình kết nối 領事
vault write consul/config/access \
地址=“consul.company.com:8500”\
令牌=“<領事管理令牌>”
#陶角色
vault write consul/roles/app-readonly \
策略=“應用程式只讀策略”\
生存時間=1小時\
最大生存時間=4小時
# 領事政策 (tạo trước trên Consul)
# 應用程式唯讀策略:
# key_prefix "app/" { 策略 = "讀取" }
# service_prefix "" { 策略 = "讀取" }
# Sinh 動態 Consul 令牌
vault read consul/creds/app-readonly
# 令牌:2f76e8b4-a3d0-...
# 租約持續時間:1小時
# 令牌 tự động 撤銷 khi hết 租賃
3.游牧秘密引擎
Nomad Secrets Engine sinh 動態 Nomad ACL 令牌。
# 啟用 Nomad 秘密引擎
vault secrets enable nomad
#Cấu hình
vault write nomad/config/access \
位址=“https://nomad.company.com:4646" \
令牌=“<游牧管理令牌>”
#陶角色
vault write nomad/role/deploy \
策略=“部署策略”\
類型=“客戶端”\
TTL=30m
# Sinh Nomad 代幣
vault read nomad/creds/deploy
# 秘密 ID:5e1c1a...
# accessor_id: 3d2b...
4. Vault插件系統
Vault 具有基於插件的架構 - 所有秘密引擎和身份驗證方法都是插件。您可以使用 Go 開發自訂外掛程式。
外掛架構
<前><代碼>┌────────────────────────────────────────────────┐ │ 保管庫伺服器 │ │ │ │ ┌────────────┐ ┐──────────────┐ │ │ │ 內建 │ │ 外部 │ │ │ │ 插件 │ │ 插件 │ │ │ │ (kv, 運輸, │ │ (定制, │ │ │ │ pki, aws) │ │ 社區) │ │ │ └────────────┘ └──────┬────────┘ │ │ │ │ │ 基於 Unix Socket 的 gRPC │ │(相互驗證)│ │ │ │ │ ┌──────┴────────┐ │ │ │ 外掛程式二進位 │ │ │ │ (單獨 │ │ │ │ 過程) │ │ │ └──────────────┘ │ └──────────────────────────────────────────────────┘
外掛目錄
# Liệt kê 內建插件
vault plugin list
# Liệt kê chỉ 秘密插件
vault plugin list secret
# 授權插件
vault plugin list auth
# Đăng ký 自訂插件
vault plugin register -sha256="$(sha256sum vault-plugin-myengine | cut -d' ' -f1)" \
秘密庫-插件-myengine
# 啟用自訂插件
vault secrets enable -path=myengine vault-plugin-myengine
開發自訂秘密引擎
// main.go
包主導入(
“作業系統”
“github.com/hashicorp/go-hclog”
“github.com/hashicorp/vault/api”
“github.com/hashicorp/vault/sdk/framework”
“github.com/hashicorp/vault/sdk/邏輯”
“github.com/hashicorp/vault/sdk/plugin”
)
函數主() {
apiClientMeta := &api.PluginAPIClientMeta{}
標誌 := apiClientMeta.FlagSet()
flags.Parse(os.Args[1:])
tlsConfig := apiClientMeta.GetTLSConfig()
tlsProviderFunc := api.VaultPluginTLSProvider(tlsConfig)
錯誤 := 插件.ServeMultiplex(&插件.ServeOpts{
BackendFactoryFunc:工廠,
TLSProviderFunc:tlsProviderFunc,
})
如果錯誤! = nil {
記錄器 := hclog.New(&hclog.LoggerOptions{})
logger.Error("插件關閉", "錯誤", err)
os.退出(1)
}
}
func Factory(ctx context.Context, conf *邏輯.BackendConfig) (邏輯.Backend, 錯誤) {
b := &後端{}
b.Backend = &framework.Backend{
幫助:“我的自訂秘密引擎”,
BackendType: 邏輯.TypeLogical,
路徑:[]*framework.Path{
b.pathCreds(),
b.pathConfig(),
},
秘密:[]*framework.Secret{
b.secretCreds(),
},
}
if err := b.Setup(ctx, conf);錯誤! =零{
回傳零,錯誤
}
返回b,無
}
類型後端結構體{
*框架.後端
}
外掛程式多重化
外掛程式多重化(Vault 1.12+)允許一個外掛程式為多個安裝提供服務,從而減少資源使用:
// 使用plugin.ServeMultiplex thay vì plugin.Serve
錯誤 := 插件.ServeMultiplex(&插件.ServeOpts{
BackendFactoryFunc:工廠,
TLSProviderFunc:tlsProviderFunc,
})
版本化外掛
# Đăng ký 外掛程式版本 mới
vault plugin register \
-sha256=“...”\
-版本=“v2.0.0”\
秘密庫-插件-myengine
# Liệt kê 版本
vault plugin info secret vault-plugin-myengine
# 腳位安裝 đến 版本 cụ thể
vault secrets tune -plugin-version="v2.0.0" myengine/
# 重新載入外掛程式(零停機)
vault plugin reload -plugin vault-plugin-myengine
5.著名的社群外掛
<表> <標題>
外掛程式描述 <正文> vault-plugin-secrets-github動態 GitHub 令牌 vault-plugin-secrets-kafkaKafka 憑證 vault-plugin-secrets-artifactoryJFrog Artifactory 代幣 vault-plugin-auth-kerberosKerberos/SPNEGO 驗證 vault-plugin-secrets-openldapOpenLDAP 憑證6。摘要
KMIP — 標準金鑰管理、MongoDB/MySQL/VMware 整合
Consul/Nomad Engines — HashiCorp 生態系的動態 ACL 代幣
外掛系統 - 可擴充架構,使用 Go 的自訂外掛程式
外掛程式多重化 - 透過多重安裝提高效能
下一節將探討 Vault Agent、Vault Proxy 和 Kubernetes 整合 - 如何自動傳遞機密機密給應用程式。