服務註冊中心配置
您可以透過設定 spring.cloud.vault.discovery.enabled=true
(預設為 false
)來使用 DiscoveryClient
(例如來自 Spring Cloud Consul 的客戶端)定位 Vault 伺服器。這樣做的結果是,您的應用需要一個包含適當發現配置的 application.yml 檔案(或環境變數)。好處是,只要發現服務是固定的,Vault 就可以改變其地址。預設的服務 ID 是 vault
,但您可以在客戶端透過 spring.cloud.vault.discovery.serviceId
進行更改。
所有發現客戶端實現都支援某種元資料對映(例如,對於 Eureka,我們有 eureka.instance.metadataMap)。服務的某些附加屬性可能需要在其服務註冊元資料中配置,以便客戶端能夠正確連線。未提供傳輸層安全詳情的服務註冊中心需要提供一個 scheme
元資料條目,設定為 https
或 http
。如果未配置方案,並且服務未暴露為安全服務,則配置預設為 spring.cloud.vault.scheme
,在未設定時為 https
。
spring.cloud.vault.discovery:
enabled: true
service-id: my-vault-service
Vault 客戶端快速失敗
在某些情況下,如果服務無法連線到 Vault 伺服器,可能希望啟動失敗。如果這是期望的行為,請設定 bootstrap 配置屬性 spring.cloud.vault.fail-fast=true
,客戶端將丟擲異常並停止。
spring.cloud.vault:
fail-fast: true
Vault 企業版名稱空間支援
Vault 企業版允許使用名稱空間在單個 Vault 伺服器上隔離多個 Vault 例項。透過設定 spring.cloud.vault.namespace=…
配置名稱空間後,在使用 Vault 的 RestTemplate
或 WebClient
時,每個 outgoing HTTP 請求都會包含名稱空間頭部 X-Vault-Namespace
。
請注意,Vault 社群版不支援此功能,並且對 Vault 操作無效。
spring.cloud.vault:
namespace: my-namespace
另請參見:Vault 企業版:名稱空間
Vault 客戶端 SSL 配置
SSL 可以透過設定各種屬性以宣告方式配置。您可以設定 javax.net.ssl.trustStore
來配置 JVM 範圍的 SSL 設定,或者設定 spring.cloud.vault.ssl.trust-store
來僅配置 Spring Cloud Vault Config 的 SSL 設定。
spring.cloud.vault:
ssl:
trust-store: classpath:keystore.jks
trust-store-password: changeit
trust-store-type: JKS
enabled-protocols: TLSv1.2,TLSv1.3
enabled-cipher-suites: TLS_AES_128_GCM_SHA256
-
trust-store
設定信任庫的資源。透過 SSL 保護的 Vault 通訊將使用指定的信任庫驗證 Vault SSL 證書。 -
trust-store-password
設定信任庫密碼 -
trust-store-type
設定信任庫型別。支援的值包括所有支援的KeyStore
型別,包括PEM
。 -
enabled-protocols
設定已啟用的 SSL/TLS 協議列表(從 3.0.2 版本開始)。 -
enabled-cipher-suites
設定已啟用的 SSL/TLS 密碼套件列表(從 3.0.2 版本開始)。
請注意,僅當類路徑中存在 Apache Http Components 或 OkHttp 客戶端時,配置 spring.cloud.vault.ssl.*
才會生效。
租約生命週期管理(續期和撤銷)
對於每個金鑰,Vault 都會建立一個租約:包含時間週期、可續期性等資訊的元資料。
Vault 承諾資料在給定的有效期(即 Time To Live,TTL)內有效。一旦租約過期,Vault 可以撤銷資料,並且金鑰的使用者不再能確定其是否有效。
Spring Cloud Vault 不僅管理登入令牌和金鑰的建立,還維護租約生命週期。也就是說,與租約關聯的登入令牌和金鑰會在租約到期前安排續期,直到最終過期。應用程式關閉會撤銷獲取的登入令牌和可續期租約。
金鑰服務和資料庫後端(例如 MongoDB 或 MySQL)通常會生成可續期的租約,因此生成的憑據會在應用程式關閉時被停用。
靜態令牌不會續期或撤銷。 |
租約續期和撤銷預設啟用,可以透過將 spring.cloud.vault.config.lifecycle.enabled
設定為 false
來停用。不建議停用此功能,因為租約可能過期,導致 Spring Cloud Vault 無法再訪問 Vault 或使用生成的憑據訪問服務,而且有效憑據在應用程式關閉後仍然保持活動狀態。
spring.cloud.vault:
config.lifecycle:
enabled: true
min-renewal: 10s
expiry-threshold: 1m
lease-endpoints: Legacy
-
enabled
控制是否對與金鑰關聯的租約進行續期,以及是否輪換過期的金鑰。預設為啟用狀態。 -
min-renewal
設定續期租約之前所需的最小持續時間。此設定可防止過於頻繁的續期。 -
expiry-threshold
設定到期閾值。租約會在到期前配置的時間段內進行續期。 -
lease-endpoints
設定續期和撤銷的端點。0.8 版本之前的 Vault 使用 Legacy 端點,之後版本使用 SysLeases 端點。 -
lease-strategy
設定LeaseStrategy
(DropOnError
、RetainOnError
、RetainOnIoError
),用於控制租約續期時的錯誤處理。
另請參見:Vault 文件:租約、續期和撤銷
會話令牌生命週期管理(續期、重新登入和撤銷)
Vault 會話令牌(也稱為 LoginToken
)與租約非常相似,因為它有 TTL、最大 TTL,並且可能會過期。登入令牌過期後,就不能再用於與 Vault 互動。因此,Spring Vault 提供了一個 SessionManager
API,用於命令式和響應式的使用。
Spring Cloud Vault 預設維護會話令牌生命週期。會話令牌是延遲獲取的,因此實際登入會推遲到第一次使用 Vault 進行會話繫結操作時進行。一旦 Spring Cloud Vault 獲取了會話令牌,它會一直保留該令牌直到過期。下一次使用會話繫結活動時,Spring Cloud Vault 會重新登入到 Vault 並獲取一個新的會話令牌。在應用程式關閉時,如果令牌仍然處於活動狀態,Spring Cloud Vault 會將其撤銷以終止會話。
會話生命週期預設啟用,可以透過將 spring.cloud.vault.session.lifecycle.enabled
設定為 false
來停用。不建議停用此功能,因為會話令牌可能過期,導致 Spring Cloud Vault 無法再訪問 Vault。
spring.cloud.vault:
session.lifecycle:
enabled: true
refresh-before-expiry: 10s
expiry-threshold: 20s
-
enabled
控制是否啟用會話生命週期管理以續期會話令牌。預設為啟用狀態。 -
refresh-before-expiry
控制會話令牌續期的時間點。續期時間是透過從令牌過期時間中減去refresh-before-expiry
計算得出的。預設為5 秒
。 -
expiry-threshold
設定過期閾值。該閾值表示一個會話令牌被視為有效的最小 TTL 持續時間。TTL 小於該閾值的令牌被視為已過期,不再使用。此值應大於refresh-before-expiry
以防止令牌過期。預設為7 秒
。
另請參見:Vault 文件:令牌續期