Spring 带有 vault 令牌的配置服务器不遵守 vault 中定义的 acl

Spring config server with vault token doesnt respect the acl defined in vault

我有 spring 配置服务器和保管库作为后端。我使用 acl 策略在保险库中创建了一个令牌。当我在 spring.cloud.config.token 中使用令牌时,它不遵守 acl

我的 sping 配置客户端具有此引导属性

spring:
  application:
    name: app1
  cloud:
    config:
      uri: https://config-server-ur:port
      token: token-associated-to-acl-policy

我创建了一个名为 "app1" 的 acl 策略,它只允许 "app1" 被保险库中的令牌读取。

path "secret/app1" {
  capabilities = ["read", "list"]
}

./vault token create -display-name="app1" -policy="app1"

我使用了在我的客户端中生成的令牌,但它不起作用。

当我将 acl 策略更改为以下时,它起作用了

path "secret/*" {
  capabilities = ["read", "list"]
}

但是,当我使用 X-Vault-token 直接访问保管库时,它按预期完美运行

我找到了解决办法,将spring.cloud.config.server.vault.defaultKey设置为空,就像config-serverbootstrap.yml

中这样
spring.profiles.active=git, vault
spring.cloud.config.server.git.uri=properties-git-repo-url
spring.cloud.config.server.git.username=user
spring.cloud.config.server.git.password=password
spring.cloud.config.server.git.searchPaths=/{application}/xyz
spring.cloud.config.server.git.force-pull=true
spring.cloud.config.server.git.timeout=10
spring.cloud.config.server.git.order=2
spring.cloud.config.server.vault.host=vault-hostname
spring.cloud.config.server.vault.port=8200
spring.cloud.config.server.vault.scheme=https
spring.cloud.config.server.vault.backend=secret
spring.cloud.config.server.vault.defaultKey=
spring.cloud.config.server.vault.profileSeparator=/
spring.cloud.config.server.vault.skipSslValidation=true
spring.cloud.config.server.vault.order=1
spring.cloud.config.server.vault.kvVersion=1

默认情况下 spring.cloud.config.server.vault.defaultKey= 设置为 "application"。