104. Secret 后端
104.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 分开
key-value secret 后端可以在版本化(v2)和 non-versioned(v1)模式下运行。根据操作模式,访问机密需要不同的 API。确保为 non-versioned key-value 后端启用
generic
secret 后端使用,并为版本化的 key-value 后端启用kv
secret 后端使用。
另见:Vault 文档:使用 KV Secrets Engine - Version 1(通用 secret 后端)
104.2 Versioned Key-Value 后端
Spring Cloud Vault 支持版本化的 Key-Value secret 后端。 key-value 后端允许将任意值存储为 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.kv.application-name
-
spring.cloud.vault.application-name
-
spring.application.name
通过将_path 添加到 application name,用逗号分隔,可以从 key-value 后端的其他上下文中获取秘密。对于 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 在装载路径和实际 context 路径之间添加
data/
context。
spring.cloud.vault:
kv:
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 分开
key-value secret 后端可以在版本化(v2)和 non-versioned(v1)模式下运行。根据操作模式,访问机密需要不同的 API。确保为 non-versioned key-value 后端启用
generic
secret 后端使用,并为版本化的 key-value 后端启用kv
secret 后端使用。
另见:Vault 文档:使用 KV Secrets Engine - Version 2(版本化 key-value 后端)
104.3 Consul
Spring Cloud Vault 可以获得 HashiCorp Consul 的凭据。 Consul integration 需要spring-cloud-vault-config-consul
依赖项。
示例 104.1. pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-vault-config-consul</artifactId>
<version>Finchley.SR2</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
104.4 RabbitMQ
Spring Cloud Vault 可以获取 RabbitMQ 的凭据。
RabbitMQ integration 需要spring-cloud-vault-config-rabbitmq
依赖项。
示例 104.2. pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-vault-config-rabbitmq</artifactId>
<version>Finchley.SR2</version>
</dependency>
</dependencies>
可以通过设置spring.cloud.vault.rabbitmq.enabled=true
(默认false
)并使用spring.cloud.vault.rabbitmq.role=…
提供角色 name 来启用 integration。
用户名和密码存储在spring.rabbitmq.username
和spring.rabbitmq.password
中,因此使用 Spring Boot 将获取生成的凭据,而无需进一步 configuration。您可以通过设置spring.cloud.vault.rabbitmq.username-property
和spring.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
104.5 AWS
Spring Cloud Vault 可以获取 AWS 的凭据。
AWS integration 需要spring-cloud-vault-config-aws
依赖项。
示例 104.3. pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-vault-config-aws</artifactId>
<version>Finchley.SR2</version>
</dependency>
</dependencies>
可以通过设置spring.cloud.vault.aws=true
(默认false
)并使用spring.cloud.vault.aws.role=…
提供角色 name 来启用 integration。
访问 key 和 secret key 存储在cloud.aws.credentials.accessKey
和cloud.aws.credentials.secretKey
中,因此使用 Spring Cloud AWS 将获取生成的凭据,而无需进一步 configuration。您可以通过设置spring.cloud.vault.aws.access-key-property
和spring.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