服務註冊中心配置

您可以使用 DiscoveryClient (例如來自 Spring Cloud Consul) 透過設定 spring.cloud.vault.discovery.enabled=true (預設 false) 來定位 Vault 伺服器。最終結果是您的應用程式需要一個包含相應發現配置的 application.yml (或環境變數)。優點是 Vault 可以更改其座標,只要發現服務是一個固定點。預設的服務 ID 是 vault,但您可以透過 spring.cloud.vault.discovery.serviceId 在客戶端上更改它。

所有的發現客戶端實現都支援某種元資料對映(例如,對於 Eureka,我們有 eureka.instance.metadataMap)。服務的某些附加屬性可能需要在其服務註冊元資料中配置,以便客戶端能夠正確連線。不提供傳輸層安全詳細資訊的服務註冊中心需要提供一個 scheme 元資料條目,該條目需要設定為 httpshttp。如果未配置 scheme 並且服務未暴露為安全服務,則配置預設為 spring.cloud.vault.scheme,如果未設定,則為 https

spring.cloud.vault.discovery:
    enabled: true
    service-id: my-vault-service

Vault 客戶端快速失敗

在某些情況下,如果服務無法連線到 Vault 伺服器,可能需要使服務啟動失敗。如果這是期望的行為,請設定引導配置屬性 spring.cloud.vault.fail-fast=true,客戶端將丟擲異常並停止。

spring.cloud.vault:
    fail-fast: true

Vault Enterprise 名稱空間支援

Vault Enterprise 允許使用名稱空間在單個 Vault 伺服器上隔離多個 Vault。透過設定 spring.cloud.vault.namespace=… 配置名稱空間後,在使用 Vault RestTemplateWebClient 時,每個出站 HTTP 請求都會啟用名稱空間頭 X-Vault-Namespace

請注意,Vault Community 版本不支援此功能,並且對 Vault 操作沒有影響。

spring.cloud.vault:
    namespace: my-namespace

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 起)。

請注意,配置 spring.cloud.vault.ssl.* 僅當 Apache Http Components 或 OkHttp 客戶端在您的類路徑上時才能應用。

租約生命週期管理(續期和撤銷)

對於每個金鑰,Vault 都會建立一個租約:包含時間持續時間、可續期性等資訊的元資料。

Vault 承諾資料在給定持續時間或生存時間 (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 設定續期和撤銷的端點。對於 Vault 0.8 版本之前是 Legacy,之後是 SysLeases。

  • lease-strategy 設定 LeaseStrategy (DropOnError, RetainOnError, RetainOnIoError) 以控制租約續期時的錯誤處理。

會話令牌生命週期管理(續期、重新登入和撤銷)

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 秒

© . This site is unofficial and not affiliated with VMware.