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
可以通过将 Secret 的路径添加到应用程序名称(以逗号分隔)来从 key-value backend 中的其他上下文中获取。
例如,给定 application name ,将使用以下每个文件夹: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
将此值设置为禁用 secret 后端配置使用false
-
backend
设置要使用的 secret 挂载的路径 -
default-context
设置所有应用程序使用的上下文名称 -
application-name
覆盖应用程序名称以在 key-value 后端中使用 -
profiles
覆盖活动配置文件以在 key-value 后端中使用 -
profile-separator
使用 Profiles 将 Profile 名称与 Property Sources 中的上下文分开
键值密钥后端可以在版本控制 (v2) 和非版本控制 (v1) 模式下运行。 |
另请参阅:
7.2. 领事
Spring Cloud Vault 可以获取 HashiCorp Consul 的凭据。
Consul 集成需要 dependency。spring-cloud-vault-config-consul
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-vault-config-consul</artifactId>
<version>3.0.4</version>
</dependency>
</dependencies>
可以通过设置 (default ) 并为角色名称提供 来启用集成。spring.cloud.vault.consul.enabled=true
false
spring.cloud.vault.consul.role=…
获取的令牌存储在其中,因此使用 Spring Cloud Consul 无需进一步配置即可获取生成的凭据。
您可以通过设置 来配置属性名称。spring.cloud.consul.token
spring.cloud.vault.consul.token-property
spring.cloud.vault:
consul:
enabled: true
role: readonly
backend: consul
token-property: spring.cloud.consul.token
-
enabled
将此值设置为启用 Consul 后端配置使用true
-
role
设置 Consul 角色定义的角色名称 -
backend
设置要使用的 Consul 挂载的路径 -
token-property
设置存储 Consul ACL 令牌的属性名称
7.3. RabbitMQ
Spring Cloud Vault 可以获取 RabbitMQ 的凭据。
RabbitMQ 集成需要依赖项。spring-cloud-vault-config-rabbitmq
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-vault-config-rabbitmq</artifactId>
<version>3.0.4</version>
</dependency>
</dependencies>
可以通过设置 (default ) 并为角色名称提供 来启用集成。spring.cloud.vault.rabbitmq.enabled=true
false
spring.cloud.vault.rabbitmq.role=…
用户名和密码存储在其中,因此使用 Spring Boot 将获取生成的凭据,而无需进一步配置。
您可以通过设置 和 来配置属性名称。spring.rabbitmq.username
spring.rabbitmq.password
spring.cloud.vault.rabbitmq.username-property
spring.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
将此值设置为启用 RabbitMQ 后端配置使用true
-
role
设置 RabbitMQ 角色定义的角色名称 -
backend
设置要使用的 RabbitMQ 挂载的路径 -
username-property
设置存储 RabbitMQ 用户名的属性名称 -
password-property
设置存储 RabbitMQ 密码的属性名称
7.4. AWS
Spring Cloud Vault 可以获取 AWS 的凭证。
AWS 集成需要依赖项。spring-cloud-vault-config-aws
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-vault-config-aws</artifactId>
<version>3.0.4</version>
</dependency>
</dependencies>
可以通过设置 (default ) 并为角色名称提供 来启用集成。spring.cloud.vault.aws=true
false
spring.cloud.vault.aws.role=…
支持的 AWS 凭证类型:
-
iam_user (默认)
-
assumed_role (STS)
-
federation_token (STS)
访问密钥和密钥存储在 和 中。因此,使用 Spring Cloud,AWS 将获取生成的凭证,而无需进一步配置。cloud.aws.credentials.accessKey
cloud.aws.credentials.secretKey
您可以通过设置 和 来配置属性名称。spring.cloud.vault.aws.access-key-property
spring.cloud.vault.aws.secret-key-property
对于 STS 安全令牌,您可以通过设置 来配置属性名称。安全令牌存储在 (defaults) 下。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
示例:assumed_role (STS)
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
将此值设置为启用 AWS 后端配置使用true
-
role
设置 AWS 角色定义的角色名称 -
backend
设置要使用的 AWS 挂载的路径 -
access-key-property
设置存储 AWS 访问密钥的属性名称 -
secret-key-property
设置存储 AWS Secret Key 的属性名称 -
session-token-key-property
设置存储 AWS STS 安全令牌的属性名称。 -
credential-type
设置用于此后端的 AWS 凭证类型。默认为iam_user
-
ttl
在使用 或 时设置 STS 令牌的 TTL。默认为 vault 角色指定的 ttl。最小值/最大值也仅限于 AWS 对 STS 的支持值。assumed_role
federation_token
-
role-arn
在使用 .assumed_role