首页 > 解决方案 > 使用微服务 AppRole 到 Spring Cloud Config Server 和 Vault 集成

问题描述

如何将带有 AppRole [in Vault] 的微服务连接到带有 Vault 后端的 Spring Cloud Config Server。

我可以看到使用诸如 curl -X GET http://localhost:8888/my-service/default -H "X-Config-Token: s.TmqaRA2lASdNhJZqqZy7y8pX" 之类的根令牌的示例。但是我找不到任何使用approle连接spring cloud config服务的例子。

但我不想将根令牌从微服务传递到 spring 云配置服务器,而是每个服务都定义了应用角色,它应该能够连接 spring 云配置,然后连接到 Vault 并获取数据。

标签: javaspringspring-bootspring-cloud-confighashicorp-vault

解决方案


使用 Spring Cloud Config Server 作为中央配置代理时,我遇到了同样的问题。

我发现了以下提供解决方案的GitHub 问题。简而言之,您必须将 spring-vault-core 依赖项添加到您的依赖项中,以便为 AppRole 身份验证添加有效的令牌解析器:

马文:

<dependency>
    <groupId>org.springframework.vault</groupId>
    <artifactId>spring-vault-core</artifactId>
</dependency>

摇篮:

implementation "org.springframework.vault:spring-vault-core"

这应该可以直接解决问题。当然,下面的配置必须下注设置:

spring:
  cloud:
    config:
      server:
        vault:
          port: 443
          host: myvault.domain.com
          scheme: https
          backend: mybackend
          kv-version: 2 #required if secrets engine version is v2 (default: v1/1)
          timeout: 5 #seconds
          authentication: APPROLE
          app-role:
            secret-id: 1234567-234567-23456-12341
            role-id: 987654-3456-9865-1235
            role: my-role-name #optional
            app-role-path: approle #optional if non default (default: approle)

添加依赖、配置并启动服务后,出现以下日志消息:

2021-04-30 12:40:31.211 INFO 53327 --- [nio-8888-exec-2] osvaLifecycleAwareSessionManager:调度令牌更新

然后X-Config-Token不再需要标题。

有关 Vault 设置的更多信息,请访问:

  1. AppRole 认证方法
  2. 为服务设置 AppRole 身份验证方法

推荐阅读