# Spring Cloud Vault

Spring Cloud Vault Config 为分布式系统中的外部化配置提供了客户端支持。有了HashiCorp 的保险库 (opens new window),你就有了一个中心位置来管理跨所有环境的应用程序的外部秘密属性。Vault 可以管理静态和动态秘密,例如远程应用程序/资源的用户名/密码,并为外部服务(例如 MySQL、PostgreSQL、Apache Cassandra、CouchBase、MongoDB、Consul、AWS 等)提供凭据。

# 1.新的和值得注意的

本节简要介绍了最新版本中新的和值得注意的项目。

# 1.1. New in Spring Cloud Vault 3.0

  • PropertySource初始化从 Spring cloud 的 bootstrap 上下文迁移到 Spring boot 的配置数据 API

  • 支持CouchBase 数据库后端。

  • 通过spring.cloud.vault.ssl.key-store-type=…/spring.cloud.vault.ssl.trust-store-type=…配置 keystore/truststore 类型,包括 PEM 支持。

  • 通过配置ReactiveVaultEndpointProvider来支持ReactiveDiscoveryClient

  • 支持配置多个数据库

# 2.快速启动

先决条件

要开始使用 Vault 和本指南,你需要一个 * 类似于 Nix 的操作系统,该操作系统提供:

  • wgetopensslunzip

  • 至少有一个 Java8 和一个正确配置的JAVA_HOME环境变量

本指南从 Spring Cloud Vault 的角度解释了 Vault 的设置,用于集成测试。
你可以直接在 Vault 项目站点上找到入门指南:learn.HashiCorp.com/vault (opens new window)

安装保险库

$ wget https://releases.hashicorp.com/vault/${vault_version}/vault_${vault_version}_${platform}.zip
$ unzip vault_${vault_version}_${platform}.zip
这些步骤可以通过下载并运行[install_vault.sh](https://github.com/ Spring-cloud/ Spring-cloud-vault/blob/master/SRC/test/bash/install_vault.sh)来实现。

为 Vault 创建 SSL 证书

接下来,你需要生成一组证书:

  • 根 CA

  • 保险库证书(解密密钥work/ca/private/localhost.decrypted.key.pem和证书work/ca/certs/localhost.cert.pem

确保将根证书导入到符合 Java 的信任存储库中。

实现这一点的最简单方法是使用 OpenSSL。

[create_certificates.sh](https://github.com/ Spring-cloud/ Spring-cloud-vault/blob/master/SRC/test/bash/)在work/ca和一个 JKS 信任库work/keystore.jks中创建证书。
如果你想使用这个快速启动指南运行 Spring Cloud Vault,你需要将信任库中的spring.cloud.vault.ssl.trust-store属性配置为file:work/keystore.jks

启动 Vault 服务器

接下来,按照以下内容创建一个配置文件:

backend "inmem" {
}

listener "tcp" {
  address = "0.0.0.0:8200"
  tls_cert_file = "work/ca/certs/localhost.cert.pem"
  tls_key_file = "work/ca/private/localhost.decrypted.key.pem"
}

disable_mlock = true
你可以在[vault.conf](https://github.com/ Spring-clod/ Spring-cloud-vault/blob/master/SRC/test/bash/vault.conf)上找到一个示例配置文件。
$ vault server -config=vault.conf

使用inmem存储和https0.0.0.0:8200上开始监听 Vault。保险库是密封的,在启动时没有初始化。

如果要运行测试,请保持 Vault 未初始化。
测试将初始化 Vault 并创建根令牌00000000-0000-0000-0000-000000000000

如果你想为你的应用程序使用 Vault,或者尝试一下它,那么你需要首先对它进行初始化。

$ export VAULT_ADDR="https://localhost:8200"
$ export VAULT_SKIP_VERIFY=true # Don't do this for production
$ vault operator init

你应该看到这样的东西:

Key 1: 7149c6a2e16b8833f6eb1e76df03e47f6113a3288b3093faf5033d44f0e70fe701
Key 2: 901c534c7988c18c20435a85213c683bdcf0efcd82e38e2893779f152978c18c02
Key 3: 03ff3948575b1165a20c20ee7c3e6edf04f4cdbe0e82dbff5be49c63f98bc03a03
Key 4: 216ae5cc3ddaf93ceb8e1d15bb9fc3176653f5b738f5f3d1ee00cd7dccbe926e04
Key 5: b2898fc8130929d569c1677ee69dc5f3be57d7c4b494a6062693ce0b1c4d93d805
Initial Root Token: 19aefa97-cccc-bbbb-aaaa-225940e63d76

Vault initialized with 5 keys and a key threshold of 3. Please
securely distribute the above keys. When the Vault is re-sealed,
restarted, or stopped, you must provide at least 3 of these keys
to unseal it again.

Vault does not store the master key. Without at least 3 keys,
your Vault will remain permanently sealed.

Vault 将初始化并返回一组解封键和根令牌。挑出 3 把钥匙,打开保险库。将 Vault 令牌存储在VAULT_TOKEN环境变量中。

$ vault operator unseal (Key 1)
$ vault operator unseal (Key 2)
$ vault operator unseal (Key 3)
$ export VAULT_TOKEN=(Root token)
# Required to run Spring Cloud Vault tests after manual initialization
$ vault token create -id="00000000-0000-0000-0000-000000000000" -policy="root"

Spring Cloud Vault 访问不同的资源。默认情况下,秘密后台是启用的,它通过 JSON 端点访问秘密配置设置。

HTTP 服务具有以下形式的资源:

/secret/{application}/{profile}
/secret/{application}
/secret/{defaultContext}/{profile}
/secret/{defaultContext}

如果在SpringApplication中将“application”注入为spring.application.name(即在常规 Spring 引导应用程序中通常是“application”),则“profile”是一个活动配置文件(或以逗号分隔的属性列表)。从 Vault 检索到的属性将按“原样”使用,而不会对属性名称作进一步的前缀。

# 3.客户端使用

要在应用程序中使用这些特性,只需将其构建为依赖于spring-cloud-vault-config的 Spring 引导应用程序(例如,请参见测试用例)。示例 Maven 配置:

例 1. POM.xml

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.0.RELEASE</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-vault-config</artifactId>
        <version>3.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

<!-- repositories also needed for snapshots and milestones -->

然后,你可以创建一个标准的 Spring 启动应用程序,就像这个简单的 HTTP 服务器:

@SpringBootApplication
@RestController
public class Application {

    @RequestMapping("/")
    public String home() {
        return "Hello World!";
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

当它运行时,如果它正在运行,它将从端口8200上的默认本地 Vault 服务器获取外部配置。要修改启动行为,你可以使用application.properties更改 Vault 服务器的位置,例如

示例 2.application.yml

spring.cloud.vault:
    host: localhost
    port: 8200
    scheme: https
    uri: https://localhost:8200
    connection-timeout: 5000
    read-timeout: 15000
    config:
spring.config.import: vault://
  • host设置保险库主机的主机名。主机名将用于 SSL 证书验证

  • port设置保险库端口

  • scheme将方案设置为http将使用普通的 HTTP。支持的方案是httphttps

  • uri使用 URI 配置保险库端点。优先于主机/端口/方案配置

  • connection-timeout以毫秒为单位设置连接超时

  • read-timeout以毫秒为单位设置读取超时

  • spring.config.import使用所有启用的秘密后端(默认启用键值)将 Vault 挂载为PropertySource

启用进一步的集成需要额外的依赖关系和配置。根据设置 Vault 的方式,你可能需要额外的配置,如SSL (opens new window)认证 (opens new window)

如果应用程序导入spring-boot-starter-actuator项目,那么 Vault 服务器的状态将通过/health端点可用。

可以通过属性management.health.vault.enabled启用或禁用 Vault 健康指示器(默认为true)。

在 Spring Cloud Vault3.0 和 Spring Boot2.4 中,对属性源的 BootStrap 上下文初始化(bootstrap.ymlbootstrap.properties)被弃用。相反, Spring Cloud Vault 支持 Spring Boot 的 Config Data API,该 API 允许从 Vault 导入配置。使用 Spring 引导配置数据方法,你需要设置spring.config.import属性才能绑定到 Vault。你可以在配置数据位置部分中阅读有关它的更多信息。
你可以通过设置配置属性spring.cloud.bootstrap.enabled=true或包括依赖项org.springframework.cloud:spring-cloud-starter-bootstrap来启用引导程序上下文。

# 3.1.认证

Vault 需要认证机制 (opens new window)授权客户请求 (opens new window)

Spring Cloud Vault 支持多个认证机制 (opens new window)来使用 Vault 对应用程序进行身份验证。

对于快速启动,使用保险库初始化打印的根令牌。

示例 3.application.yml

spring.cloud.vault:
    token: 19aefa97-cccc-bbbb-aaaa-225940e63d76
spring.config.import: vault://
仔细考虑你的安全需求。
静态令牌身份验证很好,如果你想快速地开始使用 Vault,但是静态令牌不会受到进一步的保护。
向非预期的各方披露的任何信息都允许 Vault 与相关的令牌角色一起使用。

# 4.配置数据 API

Spring 自版本 2.4 起,启动提供了一个 ConfigData API,该 API 允许声明配置源并将其导入为属性源。

Spring Cloud Vault 从 3.0 版本开始使用 ConfigData API 来挂载 Vault 的秘密后端作为属性源。在以前的版本中,使用了引导程序上下文。ConfigData API 要灵活得多,因为它允许指定要导入哪些配置系统以及导入的顺序。

你可以通过设置配置属性spring.cloud.bootstrap.enabled=true或包括依赖项org.springframework.cloud:spring-cloud-starter-bootstrap来启用已弃用的引导程序上下文。

# 4.1.配置数据位置

你可以通过从 Vault 实现的一个或多个PropertySource挂载 Vault 配置。 Spring Cloud Vault 支持两个配置位置:

  • vault://(默认位置)

  • vault:///<context-path>(上下文位置)

使用所有启用秘密后端的默认位置挂载属性源。在没有进一步配置的情况下, Spring Cloud Vault 在/secret/${spring.application.name}处挂载键值后端。每个激活的配置文件都会在/secret/${spring.application.name}/${profile}表单之后添加另一个上下文路径。向 Classpath 中添加更多的模块,例如spring-cloud-config-databases,提供了额外的秘密后端配置选项,如果启用,这些选项将被挂载为属性源。

如果要控制从 Vault 挂载的上下文路径为PropertySource,则可以使用上下文位置(vault:///my/context/path)或配置[VaultConfigurer](#vault.config.backends.configrer)。

上下文位置是单独指定和挂载的。 Spring Cloud Vault 将每个位置挂载为唯一的PropertySource。你可以将默认位置与上下文位置(或其他配置系统)混合,以控制属性源的顺序。如果你想禁用缺省键值路径计算并自己挂载每个键值后端,那么这种方法特别有用。

示例 4.application.yml

spring.config.import: vault://first/context/path, vault://other/path, vault://

Spring Environment中的属性名称必须是唯一的,以避免被遮蔽。如果你在不同的上下文路径中使用相同的秘密名称,并且希望将它们作为单独的属性公开,那么可以通过向位置添加prefix查询参数来区分它们。

示例 5.application.yml

spring.config.import: vault://my/path?prefix=foo., vault://my/other/path?prefix=bar.
secret: ${foo.secret}
other.secret: ${bar.secret}
前缀按原样添加到 Vault 返回的所有属性名称中。如果你希望在前缀和键名之间用一个点分隔键名,请确保在前缀中添加一个尾随的点。

# 4.2.有条件地启用/禁用保险库配置

在某些情况下,可能需要在没有 Vault 的情况下启动应用程序。你可以通过 Location 字符串表示 Vault Config 位置应该是可选的还是强制的(默认):

  • optional:vault://(默认位置)

  • optional:vault:///<context-path>(上下文位置)

如果通过spring.cloud.vault.enabled=false禁用了 Vault 支持,则在应用程序启动期间跳过可选位置。

无论配置位置是否标记为可选的,都会跳过无法找到的 Vault 上下文路径(HTTP STATUS404)。Vault 客户端快速失败如果由于 HTTP STATUS404 而找不到保险库上下文路径,则允许在启动时失败。

# 4.3.基础设施定制

Spring Cloud Vault 需要基础设施类与 Vault 进行交互。当不使用 ConfigData API(这意味着你还没有指定spring.config.import=vault://或上下文 Vault 路径)时, Spring Cloud Vault 通过VaultAutoConfigurationVaultReactiveAutoConfiguration定义其 bean。 Spring 在 Spring 上下文可用之前引导应用程序。因此VaultConfigDataLoader注册 bean 本身,以便稍后将这些内容传播到应用程序上下文中。

通过使用BootstrapperAPI 注册自定义实例,你可以自定义 Spring Cloud Vault 使用的基础架构:

InstanceSupplier<RestTemplateBuilder> builderSupplier = ctx -> RestTemplateBuilder
      .builder()
      .requestFactory(ctx.get(ClientFactoryWrapper.class).getClientHttpRequestFactory())
      .defaultHeader("X-Vault-Namespace", "my-namespace");

SpringApplication application = new SpringApplication(MyApplication.class);
application.addBootstrapper(registry -> registry.register(RestTemplateBuilder.class, builderSupplier));

另请参见自定义要作为 PropertySource 公开的秘密后端VaultConfigDataLoader的自定义钩源。

# 5.认证方法

不同的组织对安全性和身份验证有不同的要求。Vault 通过提供多种身份验证方法来反映这种需求。 Spring Cloud Vault 支持令牌和 APPID 身份验证。

# 5.1.令牌认证

令牌是在 Vault 中进行身份验证的核心方法。令牌身份验证需要使用配置提供一个静态令牌。作为后备,也可以从~/.vault-token检索令牌,这是 Vault CLI 用于缓存令牌的默认位置。

令牌身份验证是默认的身份验证方法。
如果令牌被公开,则非预期的一方获得对 Vault 的访问权限,并可以为预期的客户端访问机密。

示例 6.application.yml

spring.cloud.vault:
    authentication: TOKEN
    token: 00000000-0000-0000-0000-000000000000
  • authentication将该值设置为TOKEN选择令牌身份验证方法

  • token设置要使用的静态令牌。如果丢失或为空,则将尝试从 ~/.vault-token 检索令牌。

另见:

# 5.2.保险库代理身份验证

Vault 自 0.11.0 版本以来,通过 Vault Agent 提供了一个 Sidecar 实用程序。Vault Agent 通过其自动验证功能实现了 Spring Vault 的SessionManager的功能。应用程序可以依赖运行在localhost上的 Vault 代理重用缓存的会话凭据。 Spring Vault 可以在没有X-Vault-Token头的情况下发送请求。禁用 Spring Vault 的身份验证基础设施,以禁用客户端身份验证和会话管理。

示例 7.application.yml

spring.cloud.vault:
    authentication: NONE
  • authentication将该值设置为NONE将禁用ClientAuthenticationSessionManager

另见:保险库文档:代理 (opens new window)

# 5.3.APPID 身份验证

Vault 支持AppId (opens new window)身份验证,该验证由两个难以猜测的令牌组成。APPID 默认为静态配置的spring.application.name。第二个标记是 userid,它是由应用程序决定的一部分,通常与运行时环境相关。IP 地址、MAC 地址或 Docker 容器名称都是很好的例子。 Spring Cloud Vault Config 支持 IP 地址、MAC 地址和静态用户 ID(例如,通过系统属性提供)。IP 和 MAC 地址表示为十六进制编码的 SHA256 散列。

基于 IP 地址的用户 ID 使用本地主机的 IP 地址。

示例 8.使用 SHA256IP 地址 userid 的 application.yml

spring.cloud.vault:
    authentication: APPID
    app-id:
        user-id: IP_ADDRESS
  • authentication将该值设置为APPID选择 APPID 身份验证方法

  • app-id-path设置要使用的 appid 挂载的路径

  • user-id设置 userid 方法。可能的值是IP_ADDRESSMAC_ADDRESS或实现自定义AppIdUserIdMechanism的类名

从命令行生成 IP 地址 userid 的相应命令是:

$ echo -n 192.168.99.1 | sha256sum
包含echo的换行符会导致不同的散列值,因此请确保包含-n标志。

基于 MAC 地址的用户 ID 从本地主机绑定的设备获得他们的网络设备。该配置还允许指定network-interface提示来选择正确的设备。network-interface的值是可选的,可以是接口名称或接口索引(基于 0)。

示例 9.使用 SHA256MAC-Address Userid 的 application.yml

spring.cloud.vault:
    authentication: APPID
    app-id:
        user-id: MAC_ADDRESS
        network-interface: eth0
  • network-interface设置网络接口以获取物理地址

从命令行生成 IP 地址 userid 的相应命令是:

$ echo -n 0AFEDE1234AC | sha256sum
MAC 地址是大写的,不带冒号。
包括echo的换行将导致不同的散列值,因此请确保包含-n标志。

# 5.3.1.自定义用户 ID

用户 ID 生成是一种开放机制。你可以将spring.cloud.vault.app-id.user-id设置为任意字符串,并且配置的值将用作静态用户 ID。

一种更高级的方法允许你将spring.cloud.vault.app-id.user-id设置为类名。这个类必须位于你的 Classpath 上,并且必须实现org.springframework.cloud.vault.AppIdUserIdMechanism接口和createUserId方法。 Spring Cloud Vault 将在每次使用 APPID 进行身份验证以获得令牌时通过调用来获得用户 ID。

示例 10.application.yml

spring.cloud.vault:
    authentication: APPID
    app-id:
        user-id: com.examlple.MyUserIdMechanism

例 11.MyuseridMechanism.java

public class MyUserIdMechanism implements AppIdUserIdMechanism {

  @Override
  public String createUserId() {
    String userId = ...
    return userId;
  }
}

另见:Vault 文档:使用应用程序 ID Auth 后台 (opens new window)

# 5.4.Approle 身份验证

AppRole (opens new window)用于机器身份验证,就像不推荐的(因为 Vault0.6.1)APPID 身份验证一样。Approle 身份验证由两个难以猜测的(秘密)令牌组成:ROLEID 和 SECTROTID。

Spring Vault 支持各种接近场景(推/拉模式和包装)。

ROLEID 和可选的 SecretID 必须通过配置提供, Spring Vault 不会查找这些或创建自定义的 SecretID。

示例 12.approle 身份验证属性的 application.yml

spring.cloud.vault:
    authentication: APPROLE
    app-role:
        role-id: bde2076b-cccb-3cf0-d57e-bca7b1e83a52

根据所需的配置细节,支持以下场景:

方法 RoleId SecretId RoleName Token
提供了 ROLEID/SECTRID Provided Provided
提供不带分泌物的轮状结构 Provided
提供 Roleid,pull secretid Provided Provided Provided Provided
拉 Roleid,提供秘密 Provided Provided Provided
全拉模式 Provided Provided
包装 Provided
包裹罗雷德,提供秘密 Provided Provided
提供保鲜膜,包装保鲜膜 Provided Provided
RoleId SecretId 支持
Provided Provided
Provided Pull
Provided Wrapped
Provided Absent
Pull Provided
Pull Pull
Pull Wrapped
Pull Absent
Wrapped Provided
Wrapped Pull
Wrapped Wrapped
Wrapped Absent
通过在上下文中提供已配置的AppRoleAuthentication Bean,仍然可以使用推/拉/包装模式的所有组合。
Spring Cloud Vault 无法从配置属性中派生出所有可能的近似组合。
Approle 身份验证仅限于使用反应性基础设施的简单 pull 模式。
尚未支持完全 pull 模式。
使用 Spring Cloud Vault 和 Spring WebFlux 堆栈,可以通过设置spring.cloud.vault.reactive.enabled=false禁用 Vault 的反应性自动配置。

示例 13.application.yml 与所有 approle 身份验证属性

spring.cloud.vault:
    authentication: APPROLE
    app-role:
        role-id: bde2076b-cccb-3cf0-d57e-bca7b1e83a52
        secret-id: 1696536f-1976-73b1-b241-0b4213908d39
        role: my-role
        app-role-path: approle
  • role-id设置 ROLEID。

  • secret-id设置分泌物。如果配置了 approle 而不需要 secretid,则可以省略 secretid(参见bind_secret_id)。

  • role:设置 pull 模式的 approle 名称。

  • app-role-path设置要使用的 approle 身份验证挂载的路径。

另见:Vault 文档:使用 Approle Auth 后端 (opens new window)

# 5.5.AWS-EC2 身份验证

aws-ec2 (opens new window)Auth 后端为 AWS EC2 实例提供了一种安全的引入机制,允许自动检索保险库令牌。与大多数 Vault 身份验证后端不同,该后端不需要首次部署或提供安全敏感的凭据(令牌、用户名/密码、客户端证书等)。相反,它将 AWS 视为受信任的第三方,并使用以密码签名的动态元数据信息来唯一地表示每个 EC2 实例。

示例 14.使用 AWS-EC2 身份验证的 application.yml

spring.cloud.vault:
    authentication: AWS_EC2

在默认情况下,AWS-EC2 身份验证使 Nonce 能够遵循信任第一次使用(Tofu)原则。任何意外获得 PKCS#7 身份元数据访问权限的一方都可以对 Vault 进行身份验证。

在第一次登录期间, Spring Cloud Vault 生成一个 nonce,该 nonce 存储在实例 ID 旁边的 auth 后台。重新验证需要发送相同的 nonce。其他任何一方都没有 Nonce,可以在 Vault 中发出警报,以进行进一步的调查。

nonce 保存在内存中,并在应用程序重新启动时丢失。可以使用spring.cloud.vault.aws-ec2.nonce配置静态 nonce。

AWS-EC2 身份验证角色是可选的,并且是 AMI 的默认值。你可以通过设置spring.cloud.vault.aws-ec2.role属性来配置身份验证角色。

示例 15.已配置角色的 application.yml

spring.cloud.vault:
    authentication: AWS_EC2
    aws-ec2:
        role: application-server

示例 16.具有所有 AWS EC2 身份验证属性的 application.yml

spring.cloud.vault:
    authentication: AWS_EC2
    aws-ec2:
        role: application-server
        aws-ec2-path: aws-ec2
        identity-document: http://...
        nonce: my-static-nonce
  • authentication将该值设置为AWS_EC2选择 AWS EC2 身份验证方法

  • role设置试图登录的角色的名称。

  • aws-ec2-path设置要使用的 AWS EC2 挂载的路径

  • identity-document设置 PKCS#7AWS EC2 身份文档的 URL

  • nonce用于 AWS-EC2 身份验证。空的 nonce 默认为 nonce 生成

另见:Vault 文档:使用 AWS Auth 后端 (opens new window)

# 5.6.AWS-IAM 身份验证

aws (opens new window)后端为 AWS IAM 角色提供了一种安全的身份验证机制,允许基于正在运行的应用程序的当前 IAM 角色使用 Vault 进行自动身份验证。与大多数 Vault 身份验证后端不同,该后端不需要首次部署或提供安全敏感的凭据(令牌、用户名/密码、客户端证书等)。相反,它将 AWS 视为受信任的第三方,并使用调用者与其 IAM 凭据签署的 4 条信息来验证调用者确实在使用该 IAM 角色。

自动计算应用程序正在运行的当前 IAM 角色。如果你在 AWS ECS 上运行你的应用程序,那么应用程序将使用分配给正在运行的容器的 ECS 任务的 IAM 角色。如果你在 EC2 实例之上裸体运行你的应用程序,那么使用的 IAM 角色将是分配给 EC2 实例的角色。

当使用 AWS-IAM 身份验证时,你必须在 Vault 中创建一个角色,并将其分配给你的 IAM 角色。一个空的role默认为友好名称当前 IAM 角色。

示例 17.application.yml 具有所需的 AWS-IAM 身份验证属性

spring.cloud.vault:
    authentication: AWS_IAM

示例 18.具有所有 AWS-IAM 身份验证属性的 application.yml

spring.cloud.vault:
    authentication: AWS_IAM
    aws-iam:
        role: my-dev-role
        aws-path: aws
        server-name: some.server.name
        endpoint-uri: https://sts.eu-central-1.amazonaws.com
  • role设置试图登录的角色的名称。这应该与你的 IAM 角色绑定在一起。如果没有提供,那么将使用当前 IAM 用户的友好名称作为 Vault 角色。

  • aws-path设置要使用的 AWS 挂载的路径

  • server-name设置用于X-Vault-AWS-IAM-Server-ID头部的值,以防止某些类型的重播攻击。

  • endpoint-uri设置用于iam_request_url参数的 AWS STS API 的值。

AWS-IAM 需要 AWS Java SDK 依赖项(com.amazonaws:aws-java-sdk-core),因为身份验证实现使用 AWS SDK 类型来进行凭据和请求签名。

另见:Vault 文档:使用 AWS Auth 后端 (opens new window)

# 5.7.Azure MSI 认证

azure (opens new window)Auth 后端为 Azure VM 实例提供了一种安全的引入机制,允许自动检索 Vault 令牌。与大多数 Vault 身份验证后端不同,该后端不需要首次部署或提供安全敏感的凭据(令牌、用户名/密码、客户端证书等)。相反,它将 Azure 视为可信任的第三方,并使用可绑定到 VM 实例的托管服务标识和实例元数据信息。

示例 19.application.yml 与所需的 Azure 身份验证属性

spring.cloud.vault:
    authentication: AZURE_MSI
    azure-msi:
        role: my-dev-role

示例 20.带有所有 Azure 身份验证属性的 application.yml

spring.cloud.vault:
    authentication: AZURE_MSI
    azure-msi:
        role: my-dev-role
        azure-path: azure
        metadata-service: http://169.254.169.254/metadata/instance…
        identity-token-service: http://169.254.169.254/metadata/identity…
  • role设置试图登录的角色的名称。

  • azure-path设置要使用的 Azure mount 的路径

  • metadata-service设置访问实例元数据服务的 URI

  • identity-token-service设置访问身份令牌服务的 URI

Azure MSI 身份验证从实例元数据服务获得有关虚拟机的环境详细信息(订阅 ID、资源组、VM 名称)。Vault 服务器的资源 ID 默认为[vault.hashicorp.com](https://vault.hashicorp.com)。要改变这一点,请相应地设置spring.cloud.vault.azure-msi.identity-token-service

另见:

# 5.8.TLS 证书认证

certAuth 后台允许使用 SSL/TLS 客户机证书进行身份验证,这些证书由 CA 签名或自签名。

要启用cert身份验证,你需要:

  1. 使用 SSL,参见Vault 客户端 SSL 配置

  2. 配置包含客户端证书和私钥的 JavaKeystore

  3. spring.cloud.vault.authentication设置为CERT

示例 21.application.yml

spring.cloud.vault:
    authentication: CERT
    ssl:
        key-store: classpath:keystore.jks
        key-store-password: changeit
        key-store-type: JKS
        cert-auth-path: cert

另见:Vault 文档:使用 CERTAuth 后端 (opens new window)

# 5.9.空穴身份验证

Cubbyhole 身份验证使用 Vault 原语来提供一个安全的身份验证工作流。Cubbyhole 身份验证使用令牌作为主要登录方法。一个短暂的令牌用于从 Vault 的 Cubbyhole 秘密后端获得第二个登录 VaultToken。登录令牌通常寿命更长,并用于与 Vault 交互。登录令牌将从存储在/cubbyhole/response的包装响应中检索。

创建一个包装好的令牌

令牌创建的响应包装需要 Vault0.6.0 或更高版本。

例 22.创建和存储令牌

$ vault token-create -wrap-ttl="10m"
Key                            Value
---                            -----
wrapping_token:                397ccb93-ff6c-b17b-9389-380b01ca2645
wrapping_token_ttl:            0h10m0s
wrapping_token_creation_time:  2016-09-18 20:29:48.652957077 +0200 CEST
wrapped_accessor:              46b6aebb-187f-932a-26d7-4f3d86a68319

示例 23.application.yml

spring.cloud.vault:
    authentication: CUBBYHOLE
    token: 397ccb93-ff6c-b17b-9389-380b01ca2645

另见:

# 5.10.GCP-GCE 认证

gcp (opens new window)Auth 后端允许 Vault 通过使用现有的 GCP(Google Cloud Platform)IAM 和 GCE 凭据登录。

GCPGCE(Google Compute Engine,Google Compute Engine)身份验证以 JSON Web 令牌的形式为服务帐户创建签名。使用实例标识 (opens new window)从 GCE 元数据服务获得计算引擎实例的 JWT。该 API 创建了一个 JSON Web 令牌,该令牌可用于确认实例标识。

与大多数 Vault 身份验证后端不同,该后端不需要首次部署或提供安全敏感的凭据(令牌、用户名/密码、客户端证书等)。相反,它将 GCP 视为受信任的第三方,并使用加密签名的动态元数据信息,该信息唯一地表示每个 GCP 服务帐户。

示例 24.application.yml 与所需的 GCP-gce 身份验证属性

spring.cloud.vault:
    authentication: GCP_GCE
    gcp-gce:
        role: my-dev-role

示例 25.具有所有 GCP-GCE 身份验证属性的 application.yml

spring.cloud.vault:
    authentication: GCP_GCE
    gcp-gce:
        gcp-path: gcp
        role: my-dev-role
        service-account: [email protected]
  • role设置试图登录的角色的名称。

  • gcp-path设置要使用的 GCP 挂载的路径

  • service-account允许将服务帐户 ID 重写为特定值。默认设置为default服务帐户。

另见:

# 5.11.GCP-IAM 认证

gcp (opens new window)Auth 后端允许 Vault 通过使用现有的 GCP(Google Cloud Platform)IAM 和 GCE 凭据登录。

GCP,IAM 身份验证以 JSON Web 令牌的形式为服务帐户创建签名。通过调用 GCPIAM 的[projects.serviceAccounts.signJwt](https://cloud.google.com/iam/reference/rest/v1/projects.serviceaccounts/signjwt)API,可以获得服务帐户的 JWT。调用者针对 GCPIAM 进行身份验证,并由此证明其身份。此保险库后端将 GCP 视为受信任的第三方。

IAM 凭据可以从运行时环境,特别是[GOOGLE_APPLICATION_CREDENTIALS](https://cloud.google.com/DOCS/Authentication/Production)环境变量、Google Compute 元数据服务中获得,或者从外部提供,例如 JSON 或 base64 编码。JSON 是首选的表单,因为它带有调用projects.serviceAccounts.signJwt所需的项目 ID 和服务帐户标识符。

示例 26.带有所需 GCP 的 application.yml-IAM 身份验证属性

spring.cloud.vault:
    authentication: GCP_IAM
    gcp-iam:
        role: my-dev-role

示例 27.具有所有 GCP-IAM 身份验证属性的 application.yml

spring.cloud.vault:
    authentication: GCP_IAM
    gcp-iam:
        credentials:
            location: classpath:credentials.json
            encoded-key: e+KApn0=
        gcp-path: gcp
        jwt-validity: 15m
        project-id: my-project-id
        role: my-dev-role
        service-account-id: [email protected]
  • role设置试图登录的角色的名称。

  • credentials.location到包含 JSON 格式的 Google 凭据的凭据资源的路径。

  • credentials.encoded-key以 JSON 格式编码的 OAuth2 帐户私钥的 base64 编码内容。

  • gcp-path设置要使用的 GCP 挂载的路径

  • jwt-validity配置 JWT 令牌有效性。默认值为 15 分钟。

  • project-id允许将项目 ID 重写为特定值。从获得的凭据中获得的项目 ID 的默认值。

  • service-account允许将服务帐户 ID 重写为特定值。从获得的凭据到服务帐户的默认值。

GCPIAM 身份验证需要 Google Cloud Java SDK 依赖项(com.google.apis:google-api-services-iamcom.google.auth:google-auth-library-oauth2-http),因为身份验证实现使用 Google API 进行凭据和 JWT 签名。

Google 凭据需要一个 OAuth2 令牌来维护令牌生命周期。
所有 API 都是同步的,因此,GcpIamAuthentication不支持反应性使用所需的AuthenticationSteps

另见:

# 5.12.Kubernetes 认证

Kubernetes 身份验证机制(从 Vault0.8.3 开始)允许使用 Kubernetes 服务帐户令牌对 Vault 进行身份验证。身份验证是基于角色的,角色绑定到服务帐户名和名称空间。

包含 POD 服务帐户的 JWT 令牌的文件将自动挂载在/var/run/secrets/kubernetes.io/serviceaccount/token

示例 28.具有所有 Kubernetes 身份验证属性的 application.yml

spring.cloud.vault:
    authentication: KUBERNETES
    kubernetes:
        role: my-dev-role
        kubernetes-path: kubernetes
        service-account-token-file: /var/run/secrets/kubernetes.io/serviceaccount/token
  • role设置角色。

  • kubernetes-path设置要使用的 Kubernetes 挂载的路径。

  • service-account-token-file设置包含 Kubernetes 服务帐户令牌的文件的位置。默认值为/var/run/secrets/kubernetes.io/serviceaccount/token

另见:

# 5.13.Pivotal CloudFoundry 认证

pcf (opens new window)Auth 后端为在 Pivotal 的 CloudFoundry 实例中运行的应用程序提供了一种安全的引入机制,允许自动检索保险库令牌。与大多数 Vault 身份验证后端不同,该后端不需要首次部署或配置安全敏感凭据(令牌、用户名/密码、客户端证书等),因为身份配置由 PCF 本身处理。相反,它将 PCF 视为受信任的第三方,并使用托管实例标识。

示例 29.带有必需的 PCF 身份验证属性的 application.yml

spring.cloud.vault:
    authentication: PCF
    pcf:
        role: my-dev-role

示例 30.application.yml 具有所有 PCF 身份验证属性

spring.cloud.vault:
    authentication: PCF
    pcf:
        role: my-dev-role
        pcf-path: path
        instance-certificate: /etc/cf-instance-credentials/instance.crt
        instance-key: /etc/cf-instance-credentials/instance.key
  • role设置试图登录的角色的名称。

  • pcf-path设置要使用的 PCF 挂载的路径。

  • instance-certificate设置到 PCF 实例身份证书的路径。默认值为${CF_INSTANCE_CERT}ENV 变量。

  • instance-key设置到 PCF 实例标识密钥的路径。默认值为${CF_INSTANCE_KEY}ENV 变量。

PCF 身份验证要求 BouncyCastle(BCPKIX-JDK15on)在 Classpath 上进行 RSA PSS 签名。

另见:Vault 文档:使用 PCF Auth 后端 (opens new window)

# 6.ACL 要求

本节将解释 Spring Vault 访问哪些路径,以便你可以从所需的功能派生出你的策略声明。

Capability 关联的 HTTP 动词
create POST/PUT
read GET
update POST/PUT
delete DELETE
list LIST(GET)

另见WWW.vaultproject.io/guides/identity/policies (opens new window)

# 6.1.认证

登录:POST auth/$authMethod/login

# 6.2.KeyValue Mount 发现

GET sys/internal/ui/mounts/$mountPath

# 6.3.分泌物酶抑制剂

SecretLeaseContainer根据配置的租赁端点使用不同的路径。

LeaseEndpoints.Legacy

  • 撤销:PUT sys/revoke

  • 续约:PUT sys/renew

LeaseEndpoints.Leases(SysLeases)

  • 撤销:PUT sys/leases/revoke

  • 续约:PUT sys/leases/renew

# 6.4.会话管理

  • 令牌查找:GET auth/token/lookup-self

  • 续约:POST auth/token/renew-self

  • 撤销:POST auth/token/revoke-self

# 7.秘密后端

# 7.1.键值后端

Spring Cloud Vault 支持两个键值秘密后端,即版本控制的(V2)和非版本控制的(V1)。键值后端允许将任意值存储为键值存储。单个上下文可以存储一个或多个键值元组。上下文可以按层次进行组织。 Spring Cloud Vault 确定一个秘密是否正在使用版本控制,并将路径映射到其适当的 URL。 Spring Cloud Vault 允许使用应用程序名称,并将默认的上下文名(application)与活动配置文件结合起来。

/secret/{application}/{profile}
/secret/{application}
/secret/{default-context}/{profile}
/secret/{default-context}

应用程序名称由属性决定:

  • spring.cloud.vault.kv.application-name

  • spring.cloud.vault.application-name

  • spring.application.name

配置文件是由属性决定的:

  • spring.cloud.vault.kv.profiles

  • spring.profiles.active

秘密可以从键值后端的其他上下文中获得,方法是将它们的路径添加到应用程序名称中,并用逗号分隔。例如,给定应用程序名usefulapp,mysql1,projectx/aws,将使用这些文件夹中的每个文件夹:

  • /secret/usefulapp

  • /secret/mysql1

  • /secret/projectx/aws

Spring Cloud Vault 将所有活动配置文件添加到可能的上下文路径列表中。任何活动配置文件都不会跳过使用配置文件名称访问上下文。

属性像存储一样公开(即没有额外的前缀)。

Spring Cloud Vault 在挂载路径和实际上下文路径之间添加data/上下文,这取决于挂载是否使用版本控制的键值后端。
spring.cloud.vault:
    kv:
        enabled: true
        backend: secret
        profile-separator: '/'
        default-context: application
        application-name: my-app
        profiles: local, cloud
  • enabled将该值设置为false将禁用秘密后台配置使用

  • backend设置要使用的秘密挂载的路径

  • default-context设置所有应用程序使用的上下文名

  • application-name覆盖在键值后端中使用的应用程序名

  • profiles覆盖在键值后端中使用的活动配置文件

  • profile-separator在具有配置文件的属性源中将配置文件名与上下文分隔开

键值秘密后端可以在版本控制(V2)和非版本控制(V1)模式下进行操作。

另见:

# 7.2.执政官

Spring Cloud保险库可以获得用于 HashiCorp 领事的凭据。Consul 集成要求spring-cloud-vault-config-consul依赖关系。

例 31. POM.xml

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-vault-config-consul</artifactId>
        <version>3.1.0</version>
    </dependency>
</dependencies>

可以通过设置spring.cloud.vault.consul.enabled=true(默认false)并提供带有spring.cloud.vault.consul.role=…的角色名来启用集成。

所获得的令牌存储在spring.cloud.consul.token中,因此使用 Spring Cloud Consul 可以在不需要进一步配置的情况下获取生成的凭据。你可以通过设置spring.cloud.vault.consul.token-property来配置属性名称。

spring.cloud.vault:
    consul:
        enabled: true
        role: readonly
        backend: consul
        token-property: spring.cloud.consul.token
  • enabled将该值设置为true可启用 Consul 后台配置使用

  • role设置 consul 角色定义的角色名

  • backend设置要使用的执政架的路径

  • token-property设置用于存储 consul ACL 令牌的属性名称

另见:保险库文档:与保险库建立领事关系 (opens new window)

# 7.3.RabbitMQ

Spring Cloud Vault 可以获得 RabbitMQ 的凭据。

RabbitMQ 集成需要spring-cloud-vault-config-rabbitmq依赖项。

例 32. POM.xml

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-vault-config-rabbitmq</artifactId>
        <version>3.1.0</version>
    </dependency>
</dependencies>

可以通过设置spring.cloud.vault.rabbitmq.enabled=true(默认false)并提供带有spring.cloud.vault.rabbitmq.role=…的角色名来启用集成。

用户名和密码存储在spring.rabbitmq.usernamespring.rabbitmq.password中,因此使用 Spring 引导将获取生成的凭据,而无需进一步配置。你可以通过设置spring.cloud.vault.rabbitmq.username-propertyspring.cloud.vault.rabbitmq.password-property来配置属性名称。

spring.cloud.vault:
    rabbitmq:
        enabled: true
        role: readonly
        backend: rabbitmq
        username-property: spring.rabbitmq.username
        password-property: spring.rabbitmq.password
  • enabled将该值设置为true可启用 RabbitMQ 后台配置使用

  • role设置 RabbitMQ 角色定义的角色名

  • backend设置要使用的 RabbitMQ 挂载的路径

  • username-property设置存储 RabbitMQ 用户名的属性名

  • password-property设置存储 RabbitMQ 密码的属性名

另见:Vault 文档:使用 Vault 设置 RabbitMQ (opens new window)

# 7.4. AWS

Spring Cloud Vault 可以获得 AWS 的凭据。

AWS 集成需要spring-cloud-vault-config-aws依赖关系。

例 33. POM.xml

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-vault-config-aws</artifactId>
        <version>3.1.0</version>
    </dependency>
</dependencies>

可以通过设置spring.cloud.vault.aws=true(默认false)并提供带有spring.cloud.vault.aws.role=…的角色名来启用集成。

支持的 AWS 凭据类型:

  • iam_user(默认)

  • 假定 _role

  • Federation_Token

访问密钥和密钥存储在cloud.aws.credentials.accessKeycloud.aws.credentials.secretKey中。因此,使用 Spring Cloud AWS 将在不需要进一步配置的情况下获取生成的凭据。

可以通过设置spring.cloud.vault.aws.access-key-propertyspring.cloud.vault.aws.secret-key-property来配置属性名。

对于 STS 安全令牌,你可以通过设置spring.cloud.vault.aws.session-token-key-property来配置属性名。安全令牌存储在cloud.aws.credentials.sessionToken(默认)下。

示例:iam_user

spring.cloud.vault:
    aws:
        enabled: true
        role: readonly
        backend: aws
        access-key-property: cloud.aws.credentials.accessKey
        secret-key-property: cloud.aws.credentials.secretKey

示例:假定 _role

spring.cloud.vault:
    aws:
        enabled: true
        role: sts-vault-role
        backend: aws
        credential-type: assumed_role
        access-key-property: cloud.aws.credentials.accessKey
        secret-key-property: cloud.aws.credentials.secretKey
        session-token-key-property: cloud.aws.credentials.sessionToken
        ttl: 3600s
        role-arn: arn:aws:iam::${AWS_ACCOUNT}:role/sts-app-role
  • enabled将该值设置为true可启用 AWS 后台配置使用

  • role设置 AWS 角色定义的角色名

  • backend设置要使用的 AWS 挂载的路径

  • access-key-property设置用于存储 AWS 访问密钥的属性名

  • secret-key-property设置用于存储 AWS 密钥的属性名

  • session-token-key-property设置用于存储 AWS STS 安全令牌的属性名称。

  • credential-type设置用于此后端的 AWS 凭据类型。默认值为iam_user

  • 当使用assumed_rolefederation_token时,ttl设置 STS 令牌的 TTL。Vault 角色指定的 TTL 的默认值。最小/最大值也仅限于 AWS 对 STS 的支持。

  • role-arn设置 IAM 角色,以假设在使用assumed_role时,为 Vault 角色配置了多个 IAM 角色。

另见:Vault 文档:使用 Vault 设置 AWS (opens new window)

# 8.数据库后端

Vault 支持多个数据库秘密后端,以根据配置的角色动态生成数据库凭据。这意味着需要访问数据库的服务不再需要配置凭据:它们可以从 Vault 请求凭据,并使用 Vault 的租赁机制更容易地滚动密钥。

Spring Cloud Vault 与这些后端集成:

使用数据库秘密后台需要在配置中启用后台和spring-cloud-vault-config-databases依赖关系。

Vault 从 0.7.1 开始提供专用的database秘密后端,允许通过插件进行数据库集成。你可以通过使用通用数据库后端来使用该特定的后端。确保指定适当的后端路径,例如spring.cloud.vault.mysql.role.backend=database

例 34. POM.xml

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-vault-config-databases</artifactId>
        <version>3.1.0</version>
    </dependency>
</dependencies>
启用多个符合 JDBC 的数据库将生成凭据,并在默认情况下将它们存储在相同的属性键中,因此需要单独配置 JDBC 秘密的属性名。

# 8.1.数据库

Spring Cloud Vault 可以获得在WWW.vaultproject.io/api/secret/databases/index.html (opens new window)处列出的任何数据库的凭据。可以通过设置spring.cloud.vault.database.enabled=true(默认false)并提供带有spring.cloud.vault.database.role=…的角色名来启用集成。

虽然数据库后端是通用的,但spring.cloud.vault.database专门针对 JDBC 数据库。用户名和密码可从spring.datasource.usernamespring.datasource.password属性中获得,因此使用 Spring 引导将为你的DataSource获取生成的凭据,而无需进一步配置。可以通过设置spring.cloud.vault.database.username-propertyspring.cloud.vault.database.password-property来配置属性名称。

spring.cloud.vault:
    database:
        enabled: true
        role: readonly
        backend: database
        username-property: spring.datasource.username
        password-property: spring.datasource.password

# 8.2.多个数据库

有时,单个数据库的凭据是不够的,因为一个应用程序可能会连接到两个或更多个同类数据库。从版本 3.0.5 开始, Spring Vault 支持在spring.cloud.vault.databases.*名称空间下配置多个数据库秘密后端。

配置接受多个数据库后端,以将凭据具体化到指定的属性中。确保适当地配置username-propertypassword-property

spring.cloud.vault:
    databases:
        primary:
            enabled: true
            role: readwrite
            backend: database
            username-property: spring.primary-datasource.username
            password-property: spring.primary-datasource.password
        other-database:
            enabled: true
            role: readonly
            backend: database
            username-property: spring.secondary-datasource.username
            password-property: spring.secondary-datasource.password
  • <name>数据库配置的描述性名称。

  • <name>.enabled将该值设置为true可启用数据库后台配置使用

  • <name>.role设置数据库角色定义的角色名

  • <name>.backend设置要使用的数据库挂载的路径

  • <name>.username-property设置存储数据库用户名的属性名。确保使用唯一的属性名称,以避免属性跟踪。

  • <name>.password-property设置存储数据库密码的属性名称,确保使用唯一的属性名称,以避免属性跟踪。

另见:保险库文档:数据库秘密后端 (opens new window)

Spring Cloud Vault 不支持在达到最大租赁时间时获取新的凭据并用它们配置你的DataSource
即,如果 Vault 中数据库角色的max_ttl被设置为24h,这意味着在你的应用程序启动 24 小时后,它将不再能够使用数据库进行身份验证。

# 8.3.Apache Cassandra

cassandra后端在 Vault0.7.1 中已被弃用,建议使用database后端并将其挂载为cassandra

Spring Cloud Vault 可以获得 Apache Cassandra 的凭据。可以通过设置spring.cloud.vault.cassandra.enabled=true(默认false)并提供带有spring.cloud.vault.cassandra.role=…的角色名来启用集成。

用户名和密码可从spring.data.cassandra.usernamespring.data.cassandra.password属性中获得,因此使用 Spring 引导将获取生成的凭据,而无需进一步配置。可以通过设置spring.cloud.vault.cassandra.username-propertyspring.cloud.vault.cassandra.password-property来配置属性名称。

spring.cloud.vault:
    cassandra:
        enabled: true
        role: readonly
        backend: cassandra
        username-property: spring.data.cassandra.username
        password-property: spring.data.cassandra.password
  • enabled将该值设置为true可启用 Cassandra 后台配置使用

  • role设置 Cassandra 角色定义的角色名

  • backend设置要使用的 Cassandra 坐骑的路径

  • username-property设置存储 Cassandra 用户名的属性名

  • password-property设置存储 Cassandra 密码的属性名

另见:Vault 文档:使用 Vault 设置 Apache Cassandra (opens new window)

# 8.4.CouchBase 数据库

Spring Cloud Vault 可以获得 CouchBase 的凭据。可以通过设置spring.cloud.vault.couchbase.enabled=true(默认false)并提供带有spring.cloud.vault.couchbase.role=…的角色名来启用集成。

用户名和密码可从spring.couchbase.usernamespring.couchbase.password属性中获得,因此使用 Spring 引导将获取生成的凭据,而无需进一步配置。可以通过设置spring.cloud.vault.couchbase.username-propertyspring.cloud.vault.couchbase.password-property来配置属性名。

spring.cloud.vault:
    couchbase:
        enabled: true
        role: readonly
        backend: database
        username-property: spring.couchbase.username
        password-property: spring.couchbase.password
  • enabled将该值设置为true可启用 CouchBase 后台配置使用

  • role设置 Couchbase 角色定义的角色名

  • backend设置要使用的 CouchBase 挂载的路径

  • username-property设置存储 CouchBase 用户名的属性名

  • password-property设置存储 Couchbase 密码的属性名

另见:CouchBase 数据库插件文档 (opens new window)

# 8.5.Elasticsearch

Spring Cloud Vault 可以获得自 3.0 版本以来用于 ElasticSearch 的凭据。可以通过设置spring.cloud.vault.elasticsearch.enabled=true(默认false)并提供带有spring.cloud.vault.elasticsearch.role=…的角色名来启用集成。

用户名和密码可从spring.elasticsearch.rest.usernamespring.elasticsearch.rest.password属性中获得,因此使用 Spring 引导将获取生成的凭据,而无需进一步配置。可以通过设置spring.cloud.vault.elasticsearch.username-propertyspring.cloud.vault.elasticsearch.password-property来配置属性名称。

spring.cloud.vault:
    elasticsearch:
        enabled: true
        role: readonly
        backend: mongodb
        username-property: spring.elasticsearch.rest.username
        password-property: spring.elasticsearch.rest.password
  • enabled将该值设置为true可启用 ElasticSearch 数据库后台配置使用

  • role设置 ElasticSearch 角色定义的角色名

  • backend设置要使用的 ElasticSearch 挂载的路径

  • username-property设置存储 ElasticSearch 用户名的属性名

  • password-property设置存储 ElasticSearch 密码的属性名

另见:Vault 文档:使用 Vault 设置 ElasticSearch (opens new window)

# 8.6.MongoDB

mongodb后端在 Vault0.7.1 中已被弃用,建议使用database后端并将其挂载为mongodb

Spring Cloud Vault 可以获得 MongoDB 的凭据。可以通过设置spring.cloud.vault.mongodb.enabled=true(默认false)并提供带有spring.cloud.vault.mongodb.role=…的角色名来启用集成。

用户名和密码存储在spring.data.mongodb.usernamespring.data.mongodb.password中,因此使用 Spring 引导将获取生成的凭据,而无需进一步配置。可以通过设置spring.cloud.vault.mongodb.username-propertyspring.cloud.vault.mongodb.password-property来配置属性名。

spring.cloud.vault:
    mongodb:
        enabled: true
        role: readonly
        backend: mongodb
        username-property: spring.data.mongodb.username
        password-property: spring.data.mongodb.password
  • enabled将该值设置为true可启用 MongoDB 后台配置使用

  • role设置 MongoDB 角色定义的角色名

  • backend设置要使用的 MongoDB mount 的路径

  • username-property设置存储 MongoDB 用户名的属性名

  • password-property设置存储 MongoDB 密码的属性名

另见:Vault 文档:使用 Vault 建立 MongoDB (opens new window)

# 8.7. MySQL

mysql后端在 Vault0.7.1 中已被弃用,建议使用database后端并将其挂载为mysql
spring.cloud.vault.mysql的配置将在未来的版本中删除。

Spring Cloud Vault 可以获得 MySQL 的凭据。可以通过设置spring.cloud.vault.mysql.enabled=true(默认false)并提供带有spring.cloud.vault.mysql.role=…的角色名来启用集成。

用户名和密码可从spring.datasource.usernamespring.datasource.password属性中获得,因此使用 Spring 引导将获取生成的凭据,而无需进一步配置。可以通过设置spring.cloud.vault.mysql.username-propertyspring.cloud.vault.mysql.password-property来配置属性名称。

spring.cloud.vault:
    mysql:
        enabled: true
        role: readonly
        backend: mysql
        username-property: spring.datasource.username
        password-property: spring.datasource.password
  • enabled将该值设置为true可启用 MySQL 后台配置使用

  • role设置 MySQL 角色定义的角色名

  • backend设置要使用的 MySQL 挂载的路径

  • username-property设置存储 MySQL 用户名的属性名

  • password-property设置存储 MySQL 密码的属性名

另见:Vault 文档:使用 Vault 设置 MySQL (opens new window)

# 8.8.PostgreSQL

postgresql后端在 Vault0.7.1 中已被弃用,建议使用database后端并将其挂载为postgresql
spring.cloud.vault.postgresql的配置将在未来的版本中删除。

Spring Cloud Vault 可以获得 PostgreSQL 的凭据。可以通过设置spring.cloud.vault.postgresql.enabled=true(默认false)并提供带有spring.cloud.vault.postgresql.role=…的角色名来启用集成。

用户名和密码可从spring.datasource.usernamespring.datasource.password属性中获得,因此使用 Spring 引导将获取生成的凭据,而无需进一步配置。可以通过设置spring.cloud.vault.postgresql.username-propertyspring.cloud.vault.postgresql.password-property来配置属性名称。

spring.cloud.vault:
    postgresql:
        enabled: true
        role: readonly
        backend: postgresql
        username-property: spring.datasource.username
        password-property: spring.datasource.password
  • enabled将该值设置为true可启用 PostgreSQL 后台配置使用

  • role设置 PostgreSQL 角色定义的角色名

  • backend设置要使用的 PostgreSQL 挂载的路径

  • username-property设置存储 PostgreSQL 用户名的属性名

  • password-property设置存储 PostgreSQL 密码的属性名

另见:Vault 文档:使用 Vault 设置 PostgreSQL (opens new window)

# 9.自定义要作为 PropertySource 公开的秘密后端

Spring Cloud Vault 使用基于属性的配置来为键值和已发现的秘密后台创建PropertySources。

已发现的后端提供VaultSecretBackendDescriptorbean 来描述使用秘密后端的配置状态为PropertySource。需要一个SecretBackendMetadataFactory来创建一个SecretBackendMetadata对象,该对象包含路径、名称和属性转换配置。

SecretBackendMetadata用于支持特定的PropertySource

你可以注册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通常是保存配置数据的对象,例如VaultDatabaseProperties。 Spring Cloud Vault 要求用@ConfigurationProperties对类型进行注释,以便从配置中实现类。

SecretBackendMetadataFactory接受VaultSecretBackendDescriptor以创建实际的SecretBackendMetadata对象,该对象保存 Vault 服务器内的上下文路径、解析参数化上下文路径所需的任何路径变量和PropertyTransformer

VaultSecretBackendDescriptorSecretBackendMetadataFactory类型都必须在spring.factories中注册,这是 Spring 提供的一种扩展机制,类似于 Java 的 ServiceLoader。

# 11.服务注册中心配置

你可以使用DiscoveryClient(例如来自 Spring Cloud Consul)通过设置 Spring.cloud.vault.discovery.enabled=true(默认false)来定位 Vault 服务器。这样做的最终结果是,你的应用程序需要一个具有适当的发现配置的 application.yml(或环境变量)。好处是,只要发现服务是一个固定点,保险库就可以更改其坐标。默认的服务 ID 是vault,但是你可以在客户机上使用spring.cloud.vault.discovery.serviceId更改它。

发现客户机实现都支持某种元数据映射(例如,对于 Eureka,我们有 eureka.instance.metadatamap)。服务的一些附加属性可能需要在其服务注册元数据中进行配置,以便客户端能够正确地连接。不提供传输层安全性详细信息的服务注册中心需要提供一个scheme元数据条目,将其设置为httpshttp。如果没有配置任何方案,并且服务不作为安全服务公开,那么在未设置配置时,配置默认为spring.cloud.vault.scheme,即https

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

# 12.Vault 客户端快速失败

在某些情况下,如果服务无法连接到 Vault 服务器,则可能希望服务启动失败。如果这是所需的行为,那么设置 BootStrap 配置属性spring.cloud.vault.fail-fast=true,客户端将异常停止。

spring.cloud.vault:
    fail-fast: true

# 13.Vault Enterprise 命名空间支持

Vault Enterprise 允许使用名称空间来隔离单个 Vault 服务器上的多个 Vault。在使用 vaultRestTemplateWebClient时,通过设置spring.cloud.vault.namespace=…来配置名称空间,可以在每个传出的 HTTP 请求上启用名称空间标头X-Vault-Namespace

请注意,Vault Community Edition 不支持此功能,并且对 Vault 操作没有影响。

spring.cloud.vault:
    namespace: my-namespace

另见:Vault Enterprise:名称空间 (opens new window)

# 14.Vault 客户端 SSL 配置

可以通过设置各种属性来声明性地配置 SSL。你可以设置javax.net.ssl.trustStore来配置 JVM 范围内的 SSL 设置,也可以设置spring.cloud.vault.ssl.trust-store来仅为 Spring Cloud Vault 配置设置 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 客户机位于类路径上时才能应用。

# 15.租赁生命周期管理(更新和撤销)

对于每个秘密,Vault 都会创建一个租约:元数据,其中包含诸如时间期限、可更新性等信息。

Vault 承诺,这些数据将在给定的持续时间或生存时间内有效。一旦租约到期,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 之前,Sysleases 版本在以后。

另见:保险库文档:租赁、续订和撤销 (opens new window)

# 16.会话令牌生命周期管理(更新、重新登录和撤销)

Vault 会话令牌(也称为LoginToken)与租赁非常相似,因为它具有 TTL,最大 TTL,并且可能会过期。一旦一个登录令牌过期,它就不能再用于与 Vault 交互。因此, Spring Vault 使用SessionManagerAPI 进行命令和反应使用。

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 seconds

  • expiry-threshold设置到期阈值。该阈值表示将会话令牌视为有效的最小 TTL 持续时间。具有较短 TTL 的令牌将被视为过期,不再使用。应该大于refresh-before-expiry以防止令牌过期。默认值为7 seconds

另见:保险库文档:令牌更新 (opens new window)

# 附录 A:通用应用程序属性

可以在application.properties文件内、application.yml文件内或作为命令行开关指定各种属性。本附录提供了一个常见的 Spring Cloud Vault 属性的列表,以及对使用它们的基础类的引用。

属性贡献可以来自你的 Classpath 上的其他 jar 文件,因此你不应将其视为详尽的列表。
此外,你可以定义自己的属性。
Name Default 说明
spring.cloud.vault.app-id.app-id-path app-id 安装 APPID 身份验证后端的路径。
spring.cloud.vault.app-id.network-interface 网络接口提示为“MAC_Address”用户 ID 机制。
spring.cloud.vault.app-id.user-id MAC_ADDRESS userid 机制。可以是“mac_address”、“ip_address”、字符串或类名。
spring.cloud.vault.app-role.app-role-path approle Approle 身份验证后端的挂载路径。
spring.cloud.vault.app-role.role 角色的名称,可选的,用于拉模式.
spring.cloud.vault.app-role.role-id 罗里德。
spring.cloud.vault.app-role.secret-id 秘密组织。
spring.cloud.vault.application-name application 用于 APPID 身份验证的应用程序名称。
spring.cloud.vault.authentication
spring.cloud.vault.aws-ec2.aws-ec2-path aws-ec2 安装 AWS-EC2 身份验证后端的路径。
spring.cloud.vault.aws-ec2.identity-document [169.254.169.254/latest/dynamic/instance-identity/pkcs7](http://169.254.169.254/latest/dynamic/instance-identity/pkcs7) AWS-EC2PKCS7 身份文档的 URL。
spring.cloud.vault.aws-ec2.nonce once 用于 AWS-EC2 身份验证。空的 nonce 默认为 nonce 生成。
spring.cloud.vault.aws-ec2.role 角色的名称,可选的。
spring.cloud.vault.aws-iam.aws-path aws 安装 AWS 身份验证后端的路径。
spring.cloud.vault.aws-iam.endpoint-uri STS 服务器 URI。@ 自 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 cloud.aws.credentials.accessKey 获取的访问密钥的目标属性。
spring.cloud.vault.aws.backend aws AWS 后端路径。
spring.cloud.vault.aws.credential-type AWS 凭据类型
spring.cloud.vault.aws.enabled false 启用 AWS 后端使用。
spring.cloud.vault.aws.role 凭证的角色名。
spring.cloud.vault.aws.role-arn 假定的 _role 的 Role ARN 如果我们有多个与 vault 角色相关的角色。@since3.0.2
spring.cloud.vault.aws.secret-key-property cloud.aws.credentials.secretKey 获取的密钥的目标属性。
spring.cloud.vault.aws.session-token-key-property cloud.aws.credentials.sessionToken 获取的密钥的目标属性。
spring.cloud.vault.aws.ttl 0 STS 代币的 TTL。默认情况下,无论保险库角色可能对 MAX 有什么影响。也仅限于 AWS 支持的 STS 的最大值。@since3.0.2
spring.cloud.vault.azure-msi.azure-path azure 安装 Azure MSI 认证后端的路径。
spring.cloud.vault.azure-msi.identity-token-service 身份令牌服务 URI。@since3.0
spring.cloud.vault.azure-msi.metadata-service 实例元数据服务 URI。@since3.0
spring.cloud.vault.azure-msi.role 角色的名称。
spring.cloud.vault.cassandra.backend cassandra Cassandra 后端路径。
spring.cloud.vault.cassandra.enabled false 启用 Cassandra 后端使用。
spring.cloud.vault.cassandra.password-property spring.data.cassandra.password 获取的密码的目标属性。
spring.cloud.vault.cassandra.role 凭证的角色名。
spring.cloud.vault.cassandra.static-role false 启用静态角色用法。@ 自 2.2 起
spring.cloud.vault.cassandra.username-property spring.data.cassandra.username 获取的用户名的目标属性。
spring.cloud.vault.config.lifecycle.enabled true 启用生命周期管理。
spring.cloud.vault.config.lifecycle.expiry-threshold 到期日门槛。{@link lease}在给定的{@link duration}到期前更新。@ 自 2.2 起
spring.cloud.vault.config.lifecycle.lease-endpoints 将{@Link LeaseEndpoints}设置为将续订/撤销调用委托给。{@link leaseendpoints}封装了影响更新/撤销端点位置的 Vault 版本之间的差异。对于 Vault 的 0.8 或更高版本,可以使用{@Link LeaseEndpoints#sysleases},对于较旧的版本,可以使用{@Link LeaseEndpoints#Legacy}(默认)。@ 自 2.2 起
spring.cloud.vault.config.lifecycle.min-renewal 在续租前至少需要的时间。@ 自 2.2 起
spring.cloud.vault.config.order 0 用于设置{@link org.springframework.core.ENV.PropertySource}的优先级。这对于使用 Vault 作为对其他属性源的覆盖是有用的。@see org.springframework.core.priorityordered
spring.cloud.vault.connection-timeout 5000 连接超时。
spring.cloud.vault.consul.backend consul 领事后台路径。
spring.cloud.vault.consul.enabled false 启用 Consul 后端使用。
spring.cloud.vault.consul.role 凭证的角色名。
spring.cloud.vault.consul.token-property spring.cloud.consul.token 获取的令牌的目标属性。
spring.cloud.vault.couchbase.backend database Couchbase 后端路径。
spring.cloud.vault.couchbase.enabled false 启用 CouchBase 后端使用。
spring.cloud.vault.couchbase.password-property spring.couchbase.password 获取的密码的目标属性。
spring.cloud.vault.couchbase.role 凭证的角色名。
spring.cloud.vault.couchbase.static-role false 启用静态角色用法。
spring.cloud.vault.couchbase.username-property spring.couchbase.username 获取的用户名的目标属性。
spring.cloud.vault.database.backend database 数据库后端路径。
spring.cloud.vault.database.enabled false 启用数据库后端使用。
spring.cloud.vault.database.password-property spring.datasource.password 获取的密码的目标属性。
spring.cloud.vault.database.role 凭证的角色名。
spring.cloud.vault.database.static-role false 启用静态角色用法。
spring.cloud.vault.database.username-property spring.datasource.username 获取的用户名的目标属性。
spring.cloud.vault.databases
spring.cloud.vault.discovery.enabled false 标志,指示已启用 Vault Server Discovery(将通过 Discovery 查找 Vault Server URL)。
spring.cloud.vault.discovery.service-id vault 定位保险库的服务 ID。
spring.cloud.vault.elasticsearch.backend database 数据库后端路径。
spring.cloud.vault.elasticsearch.enabled false 启用 ElasticSearch 后端使用。
spring.cloud.vault.elasticsearch.password-property spring.elasticsearch.rest.password 获取的密码的目标属性。
spring.cloud.vault.elasticsearch.role 凭证的角色名。
spring.cloud.vault.elasticsearch.static-role false 启用静态角色用法。
spring.cloud.vault.elasticsearch.username-property spring.elasticsearch.rest.username 获取的用户名的目标属性。
spring.cloud.vault.enabled true 启用 Vault Config 服务器。
spring.cloud.vault.fail-fast false 如果不能从保险库获取数据,则会迅速失效。
spring.cloud.vault.gcp-gce.gcp-path gcp Kubernetes 身份验证后端的挂载路径。
spring.cloud.vault.gcp-gce.role 尝试登录所针对的角色的名称。
spring.cloud.vault.gcp-gce.service-account 可选服务帐户 ID。如果未配置,则使用默认 ID。
spring.cloud.vault.gcp-iam.credentials.encoded-key base64 以 JSON 格式对 OAuth2 帐户私钥的内容进行了编码。
spring.cloud.vault.gcp-iam.credentials.location OAuth2 凭证私钥的位置。<p>由于这是一个资源,私钥可以位于多种位置,例如本地文件系统、 Classpath、URL 等。
spring.cloud.vault.gcp-iam.gcp-path gcp Kubernetes 身份验证后端的挂载路径。
spring.cloud.vault.gcp-iam.jwt-validity 15m 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 localhost Vault 服务器主机。
spring.cloud.vault.kubernetes.kubernetes-path kubernetes Kubernetes 身份验证后端的挂载路径。
spring.cloud.vault.kubernetes.role 尝试登录所针对的角色的名称。
spring.cloud.vault.kubernetes.service-account-token-file /var/run/secrets/kubernetes.io/serviceaccount/token 服务帐户令牌文件的路径。
spring.cloud.vault.kv.application-name application 用于上下文的应用程序名。
spring.cloud.vault.kv.backend secret 默认后端名称。
spring.cloud.vault.kv.backend-version 2 键值后端版本。当前支持的版本有:<ul><li>版本 1(未版本化键-值后端)。</li><li>版本 2(版本化键-值后端)。</li></ul>
spring.cloud.vault.kv.default-context application 默认上下文的名称。
spring.cloud.vault.kv.enabled true 启用 kev-value 后端。
spring.cloud.vault.kv.profile-separator / profile-separator 组合应用程序名和 profile。
spring.cloud.vault.kv.profiles 活动配置文件列表。@since3.0
spring.cloud.vault.mongodb.backend mongodb MongoDB 后端路径。
spring.cloud.vault.mongodb.enabled false 启用 MongoDB 后端使用。
spring.cloud.vault.mongodb.password-property spring.data.mongodb.password 获取的密码的目标属性。
spring.cloud.vault.mongodb.role 凭证的角色名。
spring.cloud.vault.mongodb.static-role false 启用静态角色用法。@ 自 2.2 起
spring.cloud.vault.mongodb.username-property spring.data.mongodb.username 获取的用户名的目标属性。
spring.cloud.vault.mysql.backend mysql MySQL 后端路径。
spring.cloud.vault.mysql.enabled false 启用 MySQL 后端使用。
spring.cloud.vault.mysql.password-property spring.datasource.password 获取的用户名的目标属性。
spring.cloud.vault.mysql.role 凭证的角色名。
spring.cloud.vault.mysql.username-property spring.datasource.username 获取的用户名的目标属性。
spring.cloud.vault.namespace Vault 名称空间(需要 Vault Enterprise)。
spring.cloud.vault.pcf.instance-certificate 到实例证书的路径。默认为{@code cf_instance_CERT}ENV 变量。
spring.cloud.vault.pcf.instance-key 实例键的路径。默认为{@code cf_instance_key}ENV 变量。
spring.cloud.vault.pcf.pcf-path pcf Kubernetes 身份验证后端的挂载路径。
spring.cloud.vault.pcf.role 尝试登录所针对的角色的名称。
spring.cloud.vault.port 8200 Vault 服务器端口。
spring.cloud.vault.postgresql.backend postgresql PostgreSQL 后端路径。
spring.cloud.vault.postgresql.enabled false 启用 PostgreSQL 后端使用。
spring.cloud.vault.postgresql.password-property spring.datasource.password 获取的用户名的目标属性。
spring.cloud.vault.postgresql.role 凭证的角色名。
spring.cloud.vault.postgresql.username-property spring.datasource.username 获取的用户名的目标属性。
spring.cloud.vault.rabbitmq.backend rabbitmq RabbitMQ 后端路径。
spring.cloud.vault.rabbitmq.enabled false 启用 RabbitMQ 后端使用。
spring.cloud.vault.rabbitmq.password-property spring.rabbitmq.password 获取的密码的目标属性。
spring.cloud.vault.rabbitmq.role 凭证的角色名。
spring.cloud.vault.rabbitmq.username-property spring.rabbitmq.username 获取的用户名的目标属性。
spring.cloud.vault.reactive.enabled true 指示激活了反应性发现的标志
spring.cloud.vault.read-timeout 15000 读超时。
spring.cloud.vault.scheme https 协议方案。可以是“HTTP”或“HTTPS”。
spring.cloud.vault.session.lifecycle.enabled true 启用会话生命周期管理。
spring.cloud.vault.session.lifecycle.expiry-threshold 7s {@link logintoken}的过期阈值。该阈值表示将登录令牌视为有效的最小 TTL 持续时间。具有较短 TTL 的令牌将被视为过期,不再使用。应该大于{@code refreshbeForexilless}以防止令牌过期。
spring.cloud.vault.session.lifecycle.refresh-before-expiry 5s 更新{@link logintoken}之前至少需要的时间段。
spring.cloud.vault.ssl.cert-auth-path cert 安装路径的 TLS CERT 身份验证后端。
spring.cloud.vault.ssl.enabled-cipher-suites 启用的 SSL/TLS 密码套件的列表。@since3.0.2
spring.cloud.vault.ssl.enabled-protocols 启用的 SSL/TLS 协议的列表。@since3.0.2
spring.cloud.vault.ssl.key-store 保存证书和私钥的信任存储区。
spring.cloud.vault.ssl.key-store-password 用于访问密钥存储区的密码。
spring.cloud.vault.ssl.key-store-type 类型的密钥存储。@since3.0
spring.cloud.vault.ssl.trust-store 持有 SSL 证书的信任存储区。
spring.cloud.vault.ssl.trust-store-password 用于访问信任存储区的密码。
spring.cloud.vault.ssl.trust-store-type 信任存储的类型。@since3.0
spring.cloud.vault.token 静态保险库令牌。如果{@link#authentication}是{@code token},则需要。
spring.cloud.vault.uri Vault Uri。可以用方案、主机和端口进行设置.