96. Secret 后端

96.1 通用后端

Spring Cloud Vault 支持基本的 level 通用 secret 后端。通用 secret 后端允许将任意值存储为 key-value store。单个 context 可以 store 存储一个或多个 key-value tuples。可以按层次结构组织上下文。 Spring Cloud Vault 允许将 Application name 和默认 context name(application)与 active profiles 结合使用。

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

application name 由 properties 确定:

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

  • spring.cloud.vault.application-name

  • spring.application.name

通过将_path 添加到 application name,用逗号分隔,可以从通用后端的其他文件夹中获取秘密。对于 example,给定 application name usefulapp,mysql1,projectx/aws,将使用以下每个文件夹:

  • /secret/usefulapp

  • /secret/mysql1

  • /secret/projectx/aws

Spring Cloud Vault 将所有 active profiles 添加到可能的 context paths 列表中。没有 active profiles 将跳过使用 profile name 访问上下文。

Properties 被暴露,就像它们被存储一样(i.e.没有额外的前缀)。

spring.cloud.vault:
    generic:
        enabled: true
        backend: secret
        profile-separator: '/'
        default-context: application
        application-name: my-app
  • enabled将此 value 设置为false会禁用 secret 后端配置使用情况

  • backend _set 要使用 secret mount 的路径

  • default-context sets _所有 applications 使用的 context name

  • application-name覆盖 application name 以在通用后端中使用

  • profile-separator使用 profiles 将 profile name 与 property 源中的 context 分开

另见:Vault 文档:使用通用 secret 后端

96.2 Consul

Spring Cloud Vault 可以获得 HashiCorp Consul 的凭据。 Consul integration 需要spring-cloud-vault-config-consul依赖项。

示例 96.1. pom.xml

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

可以通过设置spring.cloud.vault.consul.enabled=true(默认false)并使用spring.cloud.vault.consul.role=…提供角色 name 来启用 integration。

获取的令牌存储在spring.cloud.consul.token中,因此使用 Spring Cloud Consul 可以在不进一步 configuration 的情况下获取生成的凭据。您可以通过设置spring.cloud.vault.consul.token-property来配置 property name。

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

  • role _set Consul 角色定义的角色 name

  • backend _set 要使用 Consul 挂载的路径

  • token-property _set_in property name,其中存储了 Consul ACL 令牌

另见:Vault 文档:使用 Vault 设置 Consul

96.3 RabbitMQ

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

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

示例 96.2. pom.xml

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

可以通过设置spring.cloud.vault.rabbitmq.enabled=true(默认false)并使用spring.cloud.vault.rabbitmq.role=…提供角色 name 来启用 integration。

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

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

  • role sets 设置 RabbitMQ 角色定义的角色 name

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

  • username-property sets 设置存储 RabbitMQ 用户名的 property name

  • password-property设置存储 RabbitMQ 密码的 property name

另见:Vault 文档:使用 Vault 设置 RabbitMQ

96.4 AWS

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

AWS integration 需要spring-cloud-vault-config-aws依赖项。

示例 96.3. pom.xml

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

可以通过设置spring.cloud.vault.aws=true(默认false)并使用spring.cloud.vault.aws.role=…提供角色 name 来启用 integration。

访问 key 和 secret key 存储在cloud.aws.credentials.accessKeycloud.aws.credentials.secretKey中,因此使用 Spring Cloud AWS 将获取生成的凭据,而无需进一步 configuration。您可以通过设置spring.cloud.vault.aws.access-key-propertyspring.cloud.vault.aws.secret-key-property来配置 property 名称。

spring.cloud.vault:
    aws:
        enabled: true
        role: readonly
        backend: aws
        access-key-property: cloud.aws.credentials.accessKey
        secret-key-property: cloud.aws.credentials.secretKey
  • enabled将此 value 设置为true可启用 AWS 后端配置使用

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

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

  • access-key-property设置存储 AWS access key 的 property name

  • secret-key-property sets 设置存储 AWS secret key 的 property name

另见:Vault 文档:使用 Vault 设置 AWS