0

除了为 Spring Cloud Config Server 提供 AppRole 或静态令牌来访问所有应用程序中的所有机密之外,是否可以将 Spring Cloud Vault Config 配置为在配置请求中使用给定令牌?

这种通信将通过 2-way SSL 与标头中的令牌进行。向外发送这样的令牌并不理想,但在这种情况下似乎是正确的解决方案。

请记住,这是一个使用 Git + Vault 作为后端的 Spring Cloud Config Server,以便将机密、变量等解析为所需的配置。这不仅用于 Spring 配置,还用于传递到临时环境的其他文件,例如 Apache 的 httpd.conf(将秘密塞入的坏示例)

这里的目标是尽可能限制访问,并将其限制在请求配置的最终应用程序中。也很高兴不要在 Spring Config AND Vault 策略上使用 AuthZ 重复 RBAC 工作。

4

1 回答 1

1

您可以配置每个与 Config Server 对话的 Spring Boot 应用程序,以将其自己的唯一令牌发送到 Config Server,然后将其传递给 Vault。

保险柜将根据定义对该资源的访问权限和授予令牌的权限的策略允许访问所请求的资源。

第 1 步:定义策略。

cat ./rules/application-a.hcl <<EOF
path "secret/application" {
  capabilities = ["read", "list"]
}
path "secret/application-a" {
  capabilities = ["read", "list"]
}
EOF

第 2 步:将策略写入 Vault。

vault write sys/policy/policy-application-a rules=@./rules/application-a.hcl

第 3 步:使用定义的策略创建令牌。

vault token-create -display-name="My Application A" -policy="policy-application-a"

第 4 步:将一些数据写入 Vault

vault write secret/application-a @application-a-config.json

第 5 步:配置 Spring Boot 应用程序以使用其令牌。

使用上面第 3 步中创建的令牌。在应用程序的bootstrap.yml文件中设置以下内容。如果您在容器化环境中运行,您也可以在运行时通过它。

spring:
  cloud:
    config:
      uri: https://configserver:8888/
      token: <secret token>

Spring 处理从客户端应用程序到 Config Server 再到 Vault 的令牌传输。

对于任何其他应用程序,您可以在 HTTP 请求的标头中设置令牌。

来自 Vault 文档: https ://www.vaultproject.io/intro/getting-started/apis.html

curl -X GET -H "X-Vault-Token:$VAULT_TOKEN" http://127.0.0.1:8200/v1/secret/application-a

我希望这可以帮助你。

于 2017-11-30T09:40:48.543 回答