7. Secret Backends

7.1. 键值后端

Spring Cloud Vault 支持 Key-Value 秘密后端,包括版本化(v2)和非版本化(v1)。 键值后端允许将任意值存储为键值存储。 一个上下文可以存储一个或多个键值对。 上下文可以按层次组织。 Spring Cloud Vault 会根据情况判断一个秘密是否使用版本化,并将路径映射到相应的 URL。 Spring Cloud Vault 允许使用应用程序名称和默认上下文名称(application)与活动的 profiles 结合使用。spring-doc.cadn.net.cn

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

应用程序名称由属性决定:spring-doc.cadn.net.cn

profiles 通过以下属性确定:spring-doc.cadn.net.cn

可以从键值后端的其他上下文中通过将它们的路径添加到应用程序名称,用逗号分隔来获取Secrets。 例如,给定应用程序名称 usefulapp,mysql1,projectx/aws,这些文件夹都会被使用:spring-doc.cadn.net.cn

Spring Cloud Vault 会将所有活动的 profiles 添加到可能的 context 路径列表中。 如果没有活动的 profiles,将跳过访问带有 profile 名称的上下文。spring-doc.cadn.net.cn

属性以它们存储的方式暴露(即不带任何额外前缀)。spring-doc.cadn.net.cn

Spring Cloud Vault会在mount路径和实际上下文路径之间根据mount是否使用版本化的键值后端添加data/上下文。
spring.cloud.vault:
    kv:
        enabled: true
        backend: secret
        profile-separator: '/'
        default-context: application
        application-name: my-app
        profiles: local, cloud
键值秘密后端可以以版本化(v2)和非版本化(v1)模式运行。

7.2. Consul

Spring Cloud Vault 可以从 HashiCorp Consul 获取凭据。 Consul 集成需要 spring-cloud-vault-config-consul 的依赖。spring-doc.cadn.net.cn

示例 31. pom.xml
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-vault-config-consul</artifactId>
        <version>3.0.4</version>
    </dependency>
</dependencies>

该集成可以通过将 spring.cloud.vault.consul.enabled=true(默认值为 false) 并使用 spring.cloud.vault.consul.role=… 提供角色名称来启用。spring-doc.cadn.net.cn

The obtained token is stored in spring.cloud.consul.token so using Spring Cloud Consul can pick up the generated credentials without further configuration. You can configure the property name by setting spring.cloud.vault.consul.token-property.spring-doc.cadn.net.cn

spring.cloud.vault:
    consul:
        enabled: true
        role: readonly
        backend: consul
        token-property: spring.cloud.consul.token

7.3. RabbitMQ

Spring Cloud Vault 可获取 RabbitMQ 的凭据。spring-doc.cadn.net.cn

RabbitMQ 集成需要 spring-cloud-vault-config-rabbitmq 的依赖项。spring-doc.cadn.net.cn

示例 32. pom.xml
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-vault-config-rabbitmq</artifactId>
        <version>3.0.4</version>
    </dependency>
</dependencies>

该集成可以通过将 spring.cloud.vault.rabbitmq.enabled=true(默认值为 false) 并使用 spring.cloud.vault.rabbitmq.role=… 提供角色名称来启用。spring-doc.cadn.net.cn

用户名和密码存储在spring.rabbitmq.usernamespring.rabbitmq.password,因此使用Spring Boot可以无需进一步配置地拾取生成的凭据。 可以通过设置spring.cloud.vault.rabbitmq.username-propertyspring.cloud.vault.rabbitmq.password-property来配置属性名称。spring-doc.cadn.net.cn

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

7.4. AWS

Spring Cloud Vault 可以获取 AWS 的凭据。spring-doc.cadn.net.cn

AWS 集成需要 spring-cloud-vault-config-aws 的依赖项。spring-doc.cadn.net.cn

示例 33. pom.xml
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-vault-config-aws</artifactId>
        <version>3.0.4</version>
    </dependency>
</dependencies>

该集成可以通过将 spring.cloud.vault.aws=true(默认值为 false) 并使用 spring.cloud.vault.aws.role=… 提供角色名称来启用。spring-doc.cadn.net.cn

支持的 AWS 凭证类型:spring-doc.cadn.net.cn

访问密钥和秘密密钥存储在cloud.aws.credentials.accessKeycloud.aws.credentials.secretKey。因此使用Spring Cloud AWS将无需进一步配置即可获取生成的凭据。spring-doc.cadn.net.cn

你可以通过设置 spring.cloud.vault.aws.access-key-propertyspring.cloud.vault.aws.secret-key-property 来配置属性名称。spring-doc.cadn.net.cn

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

示例:iam_userspring-doc.cadn.net.cn

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

示例: assumed_role (STS)spring-doc.cadn.net.cn

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