服务注册表配置
您可以使用DiscoveryClient
(例如来自 Spring Cloud Consul)通过设置 spring.cloud.vault.discovery.enabled=true(默认false
).
最终结果是您的应用程序需要具有适当发现配置的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 Server,则可能需要无法启动服务。
如果这是所需的行为,请设置引导配置属性spring.cloud.vault.fail-fast=true
客户端将停止并出现异常。
spring.cloud.vault:
fail-fast: true
Vault Enterprise 命名空间支持
Vault Enterprise 允许使用命名空间在单个 Vault 服务器上隔离多个 Vault。
通过设置配置命名空间spring.cloud.vault.namespace=…
启用命名空间标头X-Vault-Namespace
使用 Vault 时的每个传出 HTTP 请求RestTemplate
或WebClient
.
请注意,Vault 社区版不支持此功能,并且对 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 组件或 OkHttp 客户端位于您的类路径上时应用。
租赁生命周期管理(续约和撤销)
对于每个密钥,Vault 都会创建一个租约: 包含持续时间、可续订性等信息的元数据。
Vault 承诺数据将在给定的持续时间或生存时间 (TTL) 内有效。 一旦租约到期,Vault 可以撤销数据,密钥的使用者无法再确定其有效性。
Spring Cloud Vault 维护了创建登录Tokens和密钥之外的租赁生命周期。 也就是说,与租约关联的登录Tokens和机密计划在租约到期之前续订,直到终端到期。 应用程序关闭会撤销获得的登录Tokens和可续订租约。
Secret Service 和数据库后端(例如 MongoDB 或 MySQL)通常会生成可续订的租约,因此生成的凭据将在应用程序关闭时被禁用。
静态Tokens不会续订或撤销。 |
租约续订和撤销默认处于启用状态,可以通过设置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 之前的保管库版本为旧版,SysLeases 为更高版本。 -
lease-strategy
将LeaseStrategy
(DropOnError
,RetainOnError
,RetainOnIoError
) 来控制续租时的错误处理。
另请参阅:Vault 文档:租约、续订和撤销
会话Tokens生命周期管理(续订、重新登录和撤销)
Vault 会话Tokens(也称为LoginToken
) 与租约非常相似,因为它具有 TTL、最大 TTL,并且可能会过期。
登录Tokens过期后,就无法再用于与 Vault 交互。
因此,Spring Vault 附带了SessionManager
用于命令式和响应式使用的 API。
默认情况下,Spring Cloud Vault 维护会话Tokens生命周期。 会话Tokens是延迟获取的,因此实际登录被推迟到第一次会话绑定使用 Vault。 一旦 Spring Cloud Vault 获得会话Tokens,它就会保留它直到到期。 下次使用会话绑定活动时,Spring Cloud Vault 会重新登录到 Vault 并获取新的会话Tokens。 在应用程序关闭时,如果Tokens仍然处于活动状态,Spring Cloud Vault 会撤销Tokens以终止会话。
会话生命周期默认启用,可以通过设置spring.cloud.vault.session.lifecycle.enabled
自false
.
不建议禁用,因为会话Tokens可能会过期,并且 Spring Cloud Vault 无法再访问 Vault。
spring.cloud.vault:
session.lifecycle:
enabled: true
refresh-before-expiry: 10s
expiry-threshold: 20s
-
enabled
控制是否启用会话生命周期管理以续订会话Tokens。 默认启用。 -
refresh-before-expiry
控制会话Tokens续订的时间点。 刷新时间的计算方法是减去refresh-before-expiry
从Tokens到期时间开始。 默认为5 seconds
. -
expiry-threshold
设置过期阈值。 阈值表示将会话Tokens视为有效的最小 TTL 持续时间。 TTL 较短的Tokens被视为已过期,不再使用。 应大于refresh-before-expiry
以防止Tokens过期。 默认为7 seconds
.
另请参阅:Vault 文档:Tokens续订