服务注册配置
您可以使用 `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` 元数据条目,将其设置为 `https` 或 `http`。如果未配置方案并且服务未公开为安全服务,则配置默认为 `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 企业版命名空间支持
Vault 企业版允许使用命名空间在一个 Vault 服务器上隔离多个 Vault。通过设置 `spring.cloud.vault.namespace=…` 配置命名空间,在使用 Vault `RestTemplate` 或 `WebClient` 时,会在每个传出的 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` 设置信任库的资源。安全的 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 保证数据在给定的持续时间或生存时间 (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 版本为旧版,对于之后的版本为 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 文档:令牌续期