Spring Cloud Config(Vault后端)太早了

时间:2017-03-20 15:50:14

标签: spring-cloud-config hashicorp-vault spring-cloud-vault-config

我正在使用Spring Cloud Config Server为我的客户端应用程序提供配置。为了便于秘密配置,我使用HashiCorp Vault作为后端。对于配置的其余部分,我使用的是GIT仓库。所以我已经在复合模式下配置了配置服务器。请参阅下面的配置服务器bootstrap.yml: -

server:
    port: 8888

spring:
    profiles:
        active: local, git, vault

    application:
        name: my-domain-configuration-server

    cloud:
        config:
            server:
                git:
                    uri: https://mygit/my-domain-configuration
                    order: 1
                vault:
                    order: 2
                    host: vault.mydomain.com
                    port: 8200
                    scheme: https
                    backend: mymount/generic

这一切都按预期工作。但是,我使用的令牌使用Vault身份验证策略进行保护。见下文: -

{
    "rules": "path "mymount/generic/myapp-app,local" {
                  policy = "read"
              }

              path "mymount/generic/myapp-app,local/*" {
                  policy = "read"
              }

              path "mymount/generic/myapp-app" {
                  policy = "read"
              }

              path "mymount/generic/myapp-app/*" {
                  policy = "read"
              }

              path "mymount/generic/application,local" {
                  policy = "read"
              }

              path "mymount/generic/application,local/*" {
                  policy = "read"
              }

              path "mymount/generic/application" {
                  policy = "read"
              }

              path "mymount/generic/application/*" {
                  policy = "read"
              }"
}

我的问题是我没有在所有这些范围内存储秘密。我需要指定所有这些路径,以便我可以授权令牌从mymount/generic/myapp-app,local读取一个秘密。如果我不授权所有其他路径,VaultEnvironmentRepository.read()方法将返回 403 HTTP 状态代码(Forbidden)并抛出VaultException。这导致完全无法检索应用程序的任何配置,包括基于GIT的配置。这是非常有限的,因为客户端应用程序可能有多个Spring配置文件与检索配置项无关。问题是配置服务器将尝试检索客户端提供的所有活动配置文件的配置。

是否有办法在配置服务器上启用容错或宽容,以便VaultEnvironmentRepository不会中止并返回实际授权返回的任何配置?

1 个答案:

答案 0 :(得分:0)

您绝对需要本地资料吗?你是不是只能通过“金库”和#39;和' git'配置服务器中的配置文件,并使用'默认'每个Spring Boot应用程序中的配置文件?

如果您使用上述建议,那么您在规则(.hcl)文件中只需要两条路径:

path "mymount/generic/application" {
  capabilities = ["read", "list"]
}

path "mymount/generic/myapp-app" {
  capabilities = ["read", "list"]
}

这假设您正在将配置写入

vault write mymount/generic/myapp-app

而不是

vault write mymount/generic/myapp-app,local

或类似。