7. Secret Backends
7.1. 键值后端
Spring Cloud Vault 支持 Key-Value 秘密后端,包括版本化(v2)和非版本化(v1)。
键值后端允许将任意值存储为键值存储。
一个上下文可以存储一个或多个键值对。
上下文可以按层次组织。
Spring Cloud Vault 会根据情况判断一个秘密是否使用版本化,并将路径映射到相应的 URL。
Spring Cloud Vault 允许使用应用程序名称和默认上下文名称(application)与活动的 profiles 结合使用。
/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
profiles 通过以下属性确定:
-
spring.cloud.vault.kv.profiles -
spring.profiles.active
可以从键值后端的其他上下文中通过将它们的路径添加到应用程序名称,用逗号分隔来获取Secrets。
例如,给定应用程序名称 usefulapp,mysql1,projectx/aws,这些文件夹都会被使用:
-
/secret/usefulapp -
/secret/mysql1 -
/secret/projectx/aws
Spring Cloud Vault 会将所有活动的 profiles 添加到可能的 context 路径列表中。 如果没有活动的 profiles,将跳过访问带有 profile 名称的上下文。
属性以它们存储的方式暴露(即不带任何额外前缀)。
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
-
enabled将此值设置为false会禁用 secret 后端配置的使用 -
backend设置将使用的秘密挂载路径 -
default-context设置所有应用程序使用的上下文名称 -
application-name会覆盖用于键值后端的 应用名称 -
profiles重写了键值后端的活动配置文件 for use in the key-value backend -
profile-separator用于在具有 profiles 的属性源中将 profile 名称与 context 分开
| 键值秘密后端可以以版本化(v2)和非版本化(v1)模式运行。 |
见亦:
7.2. Consul
Spring Cloud Vault 可以从 HashiCorp Consul 获取凭据。
Consul 集成需要 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>
该集成可以通过将
spring.cloud.vault.consul.enabled=true(默认值为 false) 并使用 spring.cloud.vault.consul.role=… 提供角色名称来启用。
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.cloud.vault:
consul:
enabled: true
role: readonly
backend: consul
token-property: spring.cloud.consul.token
-
enabled设置此值为true以启用 Consul 后端配置的使用 -
role设置 Consul 角色定义的角色名称 -
backend设置要使用的 Consul 挂载路径 -
token-property设置Consul ACLTokens存储的属性名称
见 also: Vault 文档: 使用 Consul 配置 Vault
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>
该集成可以通过将
spring.cloud.vault.rabbitmq.enabled=true(默认值为 false) 并使用 spring.cloud.vault.rabbitmq.role=… 提供角色名称来启用。
用户名和密码存储在spring.rabbitmq.username
和spring.rabbitmq.password,因此使用Spring Boot可以无需进一步配置地拾取生成的凭据。
可以通过设置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将此值设置为true会启用 RabbitMQ 后端配置的使用。 -
role设置 RabbitMQ 角色定义的角色名称 -
backend设置要使用的RabbitMQ挂载路径 -
username-property设置属性名称,用于存储RabbitMQ用户名 -
password-property设置属性名称,用于存储RabbitMQ密码
见 also: Vault 文档: 使用 Vault 配置 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>
该集成可以通过将
spring.cloud.vault.aws=true(默认值为 false) 并使用 spring.cloud.vault.aws.role=… 提供角色名称来启用。
支持的 AWS 凭证类型:
-
iam_user(默认值)
-
假设的角色 (STS)
-
federation_token (STS)
访问密钥和秘密密钥存储在cloud.aws.credentials.accessKey
和cloud.aws.credentials.secretKey。因此使用Spring Cloud AWS将无需进一步配置即可获取生成的凭据。
你可以通过设置 spring.cloud.vault.aws.access-key-property 和
spring.cloud.vault.aws.secret-key-property 来配置属性名称。
对于STS安全Tokens,可以通过设置spring.cloud.vault.aws.session-token-key-property来配置属性名称。安全Tokens存储在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将此值设置为true以启用 AWS 后端配置使用 -
role设置AWS角色定义的角色名称 -
backend设置要使用的 AWS 挂载路径 -
access-key-property设置属性名称,用于存储AWS访问密钥 -
secret-key-property设置属性名,用于存储AWS密钥 -
session-token-key-property设置用于存储 AWS STS 安全Tokens的属性名称。 -
credential-type将为此后端设置要使用的 AWS 凭证类型。默认值为iam_user -
ttl设置使用assumed_role或federation_token时的STSTokensTTL。默认值为由vault角色指定的TTL。最小/最大值也受限于AWS对STS的支持。 -
role-arn设置在使用assumed_role时,若为 vault 角色配置了多个 IAM 角色需要假设的,则要假设的 IAM 角色。
见 also: Vault 文档: 使用 Vault 配置 AWS