9. 自定义要公开为属性源的机密后端
Spring Cloud Vault 使用基于属性的配置来创建键值和发现的秘密后端。PropertySource
发现的后端提供 bean 来描述使用机密后端的配置状态。 需要 Ais 创建包含路径、名称和属性转换配置的对象。VaultSecretBackendDescriptor
PropertySource
SecretBackendMetadataFactory
SecretBackendMetadata
SecretBackendMetadata
用于支持特定。PropertySource
您可以注册用于自定义。 如果提供 ,则会禁用默认键值和发现的后端注册。 但是,您可以使用 and 启用默认注册。VaultConfigurer
VaultConfigurer
SecretBackendConfigurer.registerDefaultKeyValueSecretBackends()
SecretBackendConfigurer.registerDefaultDiscoveredSecretBackends()
public class CustomizationBean implements VaultConfigurer {
@Override
public void addSecretBackends(SecretBackendConfigurer configurer) {
configurer.add("secret/my-application");
configurer.registerDefaultKeyValueSecretBackends(false);
configurer.registerDefaultDiscoveredSecretBackends(true);
}
}
SpringApplication application = new SpringApplication(MyApplication.class);
application.addBootstrapper(VaultBootstrapper.fromConfigurer(new CustomizationBean()));
10. 自定义密钥后端实现
Spring Cloud Vault附带了对最常见的后端集成的秘密后端支持。 您可以通过提供一个实现来与任何类型的后端集成,该实现描述如何从要使用的后端获取数据以及如何通过提供 来显示该后端提供的数据。PropertyTransformer
为后端添加自定义实现需要实现两个接口:
-
org.springframework.cloud.vault.config.VaultSecretBackendDescriptor
-
org.springframework.cloud.vault.config.SecretBackendMetadataFactory
VaultSecretBackendDescriptor
通常是保存配置数据的对象,例如。Spring 云保管库要求对类型进行注释,以便从配置中具体化类。VaultDatabaseProperties
@ConfigurationProperties
SecretBackendMetadataFactory
accepts要创建 Actual 对象,该对象保存 Vault 服务器中的上下文路径、解析参数化上下文路径所需的任何路径变量以及。VaultSecretBackendDescriptor
SecretBackendMetadata
PropertyTransformer
两者都必须注册,并且类型是Spring提供的扩展机制,类似于Java的ServiceLoader。VaultSecretBackendDescriptor
SecretBackendMetadataFactory
spring.factories
11. 服务注册表配置
您可以使用 (例如从 Spring Cloud Consul) 通过设置 spring.cloud.vault.discovery.enabled=true(默认值)来查找 Vault 服务器。 这样做的最终结果是,您的应用程序需要具有适当发现配置的 application.yml(或环境变量)。 好处是,只要发现服务是固定点,Vault 就可以更改其坐标。 默认服务 ID 是但您可以在客户端上更改它。DiscoveryClient
false
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
12. 保管库客户端快速失败
在某些情况下,如果服务无法连接到 Vault 服务器,则可能需要使服务启动失败。 如果这是所需的行为,请设置引导程序配置属性,客户端将停止并显示异常。spring.cloud.vault.fail-fast=true
spring.cloud.vault:
fail-fast: true
13. 保管库企业命名空间支持
Vault Enterprise 允许使用命名空间在单个 Vault 服务器上隔离多个 Vault。 配置命名空间的方式是,在使用 Vaultor 时,设置在每个传出 HTTP 请求上启用命名空间标头。spring.cloud.vault.namespace=…
X-Vault-Namespace
RestTemplate
WebClient
请注意,保险柜社区版不支持此功能,对保险柜操作没有影响。
spring.cloud.vault:
namespace: my-namespace
另请参阅:保管库企业版:命名空间
14. 保管库客户端 SSL 配置
可以通过设置各种属性以声明方式配置 SSL。 您可以设置配置 JVM 范围的 SSL 设置,也可以仅为 Spring 云保管库配置设置 SSL 设置。javax.net.ssl.trustStore
spring.cloud.vault.ssl.trust-store
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 保护的保管库通信将使用指定的信任库验证保管库 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 组件或 OkHttp 客户端位于您的类路径上时才应用。spring.cloud.vault.ssl.*
15. 租赁生命周期管理(续订和撤销)
对于每个机密,保险柜都会创建一个租约: 包含持续时间、可续订性等信息的元数据。
保险柜承诺数据将在给定的持续时间或生存时间 (TTL) 内有效。 租约到期后,保险柜可以撤销数据,而密钥的使用者无法再确定它是否有效。
Spring 云保管库在创建登录令牌和密钥之后保持租赁生命周期。 也就是说,与租约关联的登录令牌和机密计划在租约到期之前续订,直到终端到期。 应用程序关闭吊销获取的登录令牌和可续订租约。
秘密服务和数据库后端(如MongoDB或MySQL)通常会生成可续订的租约,因此生成的凭据将在应用程序关闭时被禁用。
静态令牌不会续订或撤销。 |
租约续订和吊销默认处于启用状态,可以通过设置为禁用。 不建议这样做,因为租约可能会过期,并且 Spring Cloud Vault 无法再使用生成的凭据访问保管库或服务,并且在应用程序关闭后有效凭据仍处于活动状态。spring.cloud.vault.config.lifecycle.enabled
false
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 之前的库版本,系统租约适用于更高版本。
另请参阅:库文档:租赁、续订和撤销
16. 会话令牌生命周期管理(续订、重新登录和吊销)
保管库会话令牌(也称为)与租约非常相似,因为它具有 TTL、最大 TTL,并且可能会过期。 登录令牌过期后,将无法再用于与保险柜交互。 因此,Spring Vault附带了aAPI,用于命令式和反应式使用。LoginToken
SessionManager
Spring Cloud Vault默认维护会话令牌生命周期。 会话令牌是延迟获取的,因此实际登录将延迟到第一次会话绑定使用 Vault。 一旦 Spring Cloud Vault 获得会话令牌,它就会保留它直到到期。 下次使用会话绑定活动时,Spring Cloud Vault 会重新登录 Vault 并获取新的会话令牌。 在应用程序关闭时,如果令牌仍处于活动状态以终止会话,Spring Cloud Vault 将吊销令牌。
会话生命周期默认处于启用状态,可以通过设置来禁用。 不建议禁用,因为会话令牌可能会过期,并且 Spring Cloud Vault 无法再访问 Vault。spring.cloud.vault.session.lifecycle.enabled
false
spring.cloud.vault:
session.lifecycle:
enabled: true
refresh-before-expiry: 10s
expiry-threshold: 20s
-
enabled
控制是否启用会话生命周期管理以续订会话令牌。 默认启用。 -
refresh-before-expiry
控制续订会话令牌的时间点。 刷新时间是通过从令牌到期时间中减去来计算的。 默认为。refresh-before-expiry
5 seconds
-
expiry-threshold
设置到期阈值。 阈值表示将会话令牌视为有效的最短 TTL 持续时间。 TTL 较短的令牌被视为已过期,不再使用。 应大于以防止令牌过期。 默认为。refresh-before-expiry
7 seconds
另请参阅:保管库文档:令牌续订
附录 A:常见应用程序属性
可以在文件内部、文件内部或命令行开关中指定各种属性。 本附录提供了常见 Spring Cloud Vault 属性的列表,以及对使用这些属性的基础类的引用。application.properties
application.yml
属性贡献可以来自类路径上的其他 jar 文件,因此不应将其视为详尽的列表。 此外,您还可以定义自己的属性。 |
名字 | 违约 | 描述 |
spring.cloud.vault.app-id.app-id-path | | AppId 身份验证后端的装载路径。 |
spring.cloud.vault.app-id.network-interface | “MAC_ADDRESS”UserId 机制的网络接口提示。 | |
spring.cloud.vault.app-id.user-id | | 用户 ID 机制。可以是“MAC_ADDRESS”、“IP_ADDRESS”、字符串或类名。 |
spring.cloud.vault.app-role.app-角色路径 | | 应用角色身份验证后端的装载路径。 |
spring.cloud.vault.app-role.role | 角色的名称(可选),用于拉取模式。 | |
spring.cloud.vault.app-role.role-id | 角色 ID。 | |
spring.cloud.vault.app-role.secret-id | 秘密ID。 | |
spring.cloud.vault.application-name | | 应用程序标识身份验证的应用程序名称。 |
spring.cloud.vault.authentication | ||
spring.cloud.vault.aws-ec2.aws-ec2-path | | AWS-EC2 身份验证后端的挂载路径。 |
spring.cloud.vault.aws-ec2.identity-document | | AWS-EC2 PKCS7 身份文档的 URL。 |
spring.cloud.vault.aws-ec2.nonce | Nonce 用于 AWS-EC2 身份验证。空随机数默认为随机数生成。 | |
spring.cloud.vault.aws-ec2.role | 角色的名称,可选。 | |
spring.cloud.vault.aws-iam.aws-path | | AWS 身份验证后端的挂载路径。 |
spring.cloud.vault.aws-iam.endpoint-uri | STS 服务器 URI。@since 2.2 | |
spring.cloud.vault.aws-iam.role | 角色的名称,可选。如果未设置,则默认为友好 IAM 名称。 | |
spring.cloud.vault.aws-iam.server-name | 用于在登录请求标头中设置 {@code X-Vault-AWS-IAM-Server-ID} 标头的服务器名称。 | |
spring.cloud.vault.aws.access-key-property | | 获取的访问密钥的目标属性。 |
spring.cloud.vault.aws.backend | | AWS 后端路径。 |
spring.cloud.vault.aws.credential-type | AWS 凭证类型 | |
spring.cloud.vault.aws.enabled | | 启用 AWS 后端使用。 |
spring.cloud.vault.aws.role | 凭据的角色名称。 | |
spring.cloud.vault.aws.role-arn | 角色 ARN 用于assumed_role,以防我们有多个角色与文件库角色关联。@since 3.0.2 | |
spring.cloud.vault.aws.secret-key-property | | 获取的密钥的目标属性。 |
spring.cloud.vault.aws.session-token-key-property | | 获取的密钥的目标属性。 |
spring.cloud.vault.aws.ttl | | 用于 sts 令牌的 TTL。默认为保管库角色对 Max 可能具有的任何内容。也仅限于 AWS 支持的 STS 最大值。 @since 3.0.2 |
spring.cloud.vault.azure-msi.azure-path | | Azure MSI 身份验证后端的装载路径。 |
spring.cloud.vault.azure-msi.identity-token-service | 标识令牌服务 URI。@since 3.0 | |
spring.cloud.vault.azure-msi.metadata-service | 实例元数据服务 URI。@since 3.0 | |
spring.cloud.vault.azure-msi.role | 角色的名称。 | |
spring.cloud.vault.cassandra.backend | | 卡桑德拉后端路径。 |
spring.cloud.vault.cassandra.enabled | | 启用 cassandra 后端使用。 |
spring.cloud.vault.cassandra.password-property | | 获取的密码的目标属性。 |
spring.cloud.vault.cassandra.role | 凭据的角色名称。 | |
spring.cloud.vault.cassandra.static-role | | 启用静态角色使用。@since 2.2 |
spring.cloud.vault.cassandra.username-property | | 获取的用户名的目标属性。 |
spring.cloud.vault.config.lifecycle.enabled | | 启用生命周期管理。 |
spring.cloud.vault.config.lifecycle.expiry-threshold | 到期阈值。{@link租约} 在到期之前续订给定的 {@link 期限}。@since 2.2 | |
spring.cloud.vault.config.lifecycle.lease-endpoint | 将 {@link租赁终结点} 设置为将续订/吊销调用委托给。{@link 租赁端点} 封装了影响续订/吊销端点位置的保管库版本之间的差异。对于 Vault 的 0.8 或更高版本,可以是 {@link LeaseEndpoints#SysLeases},对于旧版本,可以是 {@link LeaseEndpoints#Legacy}(默认)。@since 2.2 | |
spring.cloud.vault.config.lifecycle.min-renewal | 续订租约之前至少需要的时间段。@since 2.2 | |
spring.cloud.vault.config.order | | 用于设置 {@link org.springframework.core.env.PropertySource} 优先级。这对于将 Vault 用作对其他属性源的覆盖非常有用。@see org.springframework.core.PriorityOrdered |
spring.cloud.vault.connection-timeout | | 连接超时。 |
spring.cloud.vault.consul.backend | | 领事后端路径。 |
spring.cloud.vault.consul.enabled | | 启用 consul 后端使用。 |
spring.cloud.vault.consul.role | 凭据的角色名称。 | |
spring.cloud.vault.consul.token-property | | 获取的令牌的目标属性。 |
spring.cloud.vault.couchbase.backend | | 沙发基地后端路径。 |
spring.cloud.vault.couchbase.enabled | | 启用沙发基础后端使用。 |
spring.cloud.vault.couchbase.password-property | | 获取的密码的目标属性。 |
spring.cloud.vault.couchbase.role | 凭据的角色名称。 | |
spring.cloud.vault.couchbase.static-role | | 启用静态角色使用。 |
spring.cloud.vault.couchbase.username-property | | 获取的用户名的目标属性。 |
spring.cloud.vault.database.backend | | 数据库后端路径。 |
spring.cloud.vault.database.enabled | | 启用数据库后端使用。 |
spring.cloud.vault.database.password-property | | 获取的密码的目标属性。 |
spring.cloud.vault.database.role | 凭据的角色名称。 | |
spring.cloud.vault.database.static-role | | 启用静态角色使用。 |
spring.cloud.vault.database.username-property | | 获取的用户名的目标属性。 |
spring.cloud.vault.databases | ||
spring.cloud.vault.discovery.enabled | | 指示已启用保管库服务器发现的标志(将通过发现查找保管库服务器 URL)。 |
spring.cloud.vault.discovery.service-id | | 用于查找保管库的服务 ID。 |
spring.cloud.vault.elasticsearch.backend | | 数据库后端路径。 |
spring.cloud.vault.elasticsearch.enabled | | 启用弹性搜索后端使用。 |
spring.cloud.vault.elasticsearch.password-property | | 获取的密码的目标属性。 |
spring.cloud.vault.elasticsearch.role | 凭据的角色名称。 | |
spring.cloud.vault.elasticsearch.static-role | | 启用静态角色使用。 |
spring.cloud.vault.elasticsearch.username-property | | 获取的用户名的目标属性。 |
spring.cloud.vault.enabled | | 启用库配置服务器。 |
spring.cloud.vault.fail-fast | | 如果无法从保险柜获取数据,则快速失败。 |
spring.cloud.vault.gcp-gce.gcp-path | | Kubernetes 认证后端的挂载路径。 |
spring.cloud.vault.gcp-gce.role | 尝试登录的角色的名称。 | |
spring.cloud.vault.gcp-gce.service-account | 可选的服务帐户 ID。如果未配置,请使用默认 ID。 | |
spring.cloud.vault.gcp-iam.credentials.encoded-key | JSON 格式的 OAuth2 帐户私钥的 base64 编码内容。 | |
spring.cloud.vault.gcp-iam.credentials.location | OAuth2 凭据私钥的位置。<p> 由于这是一个资源,因此私钥可以位于多个位置,例如本地文件系统、类路径、URL 等。 | |
spring.cloud.vault.gcp-iam.gcp-path | | Kubernetes 认证后端的挂载路径。 |
spring.cloud.vault.gcp-iam.jwt-valid(英语:Spring.cloud.vault.gcp-iam.jwt-valid) | | JWT 令牌的有效性。 |
spring.cloud.vault.gcp-iam.project-id | 覆盖 GCP 项目 ID。 | |
spring.cloud.vault.gcp-iam.role | 尝试登录的角色的名称。 | |
spring.cloud.vault.gcp-iam.service-account-id | 覆盖 GCP 服务帐号 ID。 | |
spring.cloud.vault.host | | 库服务器主机。 |
spring.cloud.vault.kubernetes.kubernetes-path | | Kubernetes 认证后端的挂载路径。 |
spring.cloud.vault.kubernetes.role | 尝试登录的角色的名称。 | |
spring.cloud.vault.kubernetes.service-account-token-file | | 服务帐户令牌文件的路径。 |
spring.cloud.vault.kv.application-name | | 要用于上下文的应用程序名称。 |
spring.cloud.vault.kv.backend | | 默认后端的名称。 |
spring.cloud.vault.kv.backend-version | | 键值后端版本。当前支持的版本包括:<ul> <li>Version 1(未版本化的键值后端).</li> <li>Version 2(版本化的键值后端).</li> </ul> |
spring.cloud.vault.kv.default-context | | 默认上下文的名称。 |
spring.cloud.vault.kv.enabled | | 启用 kev 值后端。 |
spring.cloud.vault.kv.profile-separator | | 用于组合应用程序名称和配置文件的配置文件分隔符。 |
spring.cloud.vault.kv.profiles | 活动配置文件列表。@since 3.0 | |
spring.cloud.vault.mongodb.backend | | MongoDB后端路径。 |
spring.cloud.vault.mongodb.enabled | | 启用 mongodb 后端使用。 |
spring.cloud.vault.mongodb.password-property | | 获取的密码的目标属性。 |
spring.cloud.vault.mongodb.role | 凭据的角色名称。 | |
spring.cloud.vault.mongodb.static-role | | 启用静态角色使用。@since 2.2 |
spring.cloud.vault.mongodb.username-property | | 获取的用户名的目标属性。 |
spring.cloud.vault.mysql.backend | | MySQL 后端路径。 |
spring.cloud.vault.mysql.enabled | | 启用 mysql 后端使用。 |
spring.cloud.vault.mysql.password-property | | 获取的用户名的目标属性。 |
spring.cloud.vault.mysql.role | 凭据的角色名称。 | |
spring.cloud.vault.mysql.username-property | | 获取的用户名的目标属性。 |
spring.cloud.vault.namespace | 保管库命名空间(需要保管库企业版)。 | |
spring.cloud.vault.pcf.instance-certificate | 实例证书 (PEM) 的路径。默认为 {@code CF_INSTANCE_CERT} env 变量。 | |
spring.cloud.vault.pcf.instance-key | 实例密钥 (PEM) 的路径。默认为 {@code CF_INSTANCE_KEY} env 变量。 | |
spring.cloud.vault.pcf.pcf-path | | Kubernetes 认证后端的挂载路径。 |
spring.cloud.vault.pcf.role | 尝试登录的角色的名称。 | |
spring.cloud.vault.port | | 库服务器端口。 |
spring.cloud.vault.postgresql.backend | | PostgreSQL 后端路径。 |
spring.cloud.vault.postgresql.enabled | | 启用 postgresql 后端使用。 |
spring.cloud.vault.postgresql.password-property | | 获取的用户名的目标属性。 |
spring.cloud.vault.postgresql.role | 凭据的角色名称。 | |
spring.cloud.vault.postgresql.username-property | | 获取的用户名的目标属性。 |
spring.cloud.vault.rabbitmq.backend | | RabbitMQ 后端路径。 |
spring.cloud.vault.rabbitmq.enabled | | 启用 rabbitmq 后端使用。 |
spring.cloud.vault.rabbitmq.password-property | | 获取的密码的目标属性。 |
spring.cloud.vault.rabbitmq.role | 凭据的角色名称。 | |
spring.cloud.vault.rabbitmq.username-property | | 获取的用户名的目标属性。 |
spring.cloud.vault.reactive.enabled | | 指示已启用反应式发现的标志 |
spring.cloud.vault.read-timeout | | 读取超时。 |
春天.云.库.方案 | | 协议方案。可以是“http”或“https”。 |
spring.cloud.vault.session.lifecycle.enabled | | 启用会话生命周期管理。 |
spring.cloud.vault.session.lifecycle.expiry-threshold | | {@link登录令牌} 的到期阈值。阈值表示将登录令牌视为有效的最短 TTL 持续时间。TTL 较短的令牌被视为已过期,不再使用。应大于 {@code刷新前到期} 以防止令牌过期。 |
spring.cloud.vault.session.lifecycle.refresh-before-expireiry | | 续订 {@link 登录令牌} 之前至少需要的时间段。 |
spring.cloud.vault.ssl.cert-auth-path | | TLS 证书身份验证后端的装载路径。 |
spring.cloud.vault.ssl.enabled-cipher-suites | 已启用的 SSL/TLS 密码套件列表。@since 3.0.2 | |
spring.cloud.vault.ssl.enabled-protocols | 已启用的 SSL/TLS 协议列表。@since 3.0.2 | |
spring.cloud.vault.ssl.key-store | 保存证书和私钥的信任存储。 | |
spring.cloud.vault.ssl.key-store-password | 用于访问密钥库的密码。 | |
spring.cloud.vault.ssl.key-store-type | 密钥存储的类型。@since 3.0 | |
spring.cloud.vault.ssl.trust-store | 保存 SSL 证书的信任存储。 | |
spring.cloud.vault.ssl.trust-store-password | 用于访问信任存储的密码。 | |
spring.cloud.vault.ssl.trust-store-type | 信任存储的类型。@since 3.0 | |
spring.cloud.vault.token | 静态保管库令牌。如果 {@link #authentication} 是 {@code 令牌},则为必需。 | |
spring.cloud.vault.uri | 保管库 URI。可设置方案、主机和端口。 |