0

我正在努力实现以下目标:

能够使用 Azure 用户分配的托管标识 (UAMI) 从 Spring Boot 应用程序(在 AKS 中部署)对 vault(部署在 Azure 上)进行身份验证

堆栈:openjdk 8、spring boot 2.5.4、spring-cloud-starter-vault-config 3.0.3、AKS

我在 azure 上安装了 hashcorp 保险库。下面的文档建议在这种情况下我可以使用 UAMI 对保险库进行身份验证。参考https://cloud.spring.io/spring-cloud-vault/reference/html/

春季启动应用程序配置:

应用程序.yml:

server:
  port: 8090

spring:
  application:
     name: my application-service
  cloud:
    config:
      import: vault://secret/somepath_to_secrets
    vault:
      uri: https://my-vault-uri
      scheme: https
      namespace: myapp
      authentication: AZURE_MSI
      azure-msi:
        role: pod_identity_role_name

这在我的本地工作有点好,因为日志说它试图点击上面提到的保险库 URI 并建立连接,当然,由于 azure MSI,我无法在本地端到端测试这个。我正在使用用户分配的托管身份 (UAMI)。

但是当我将它部署到 Azure Kubernetes 集群时,它给了我以下错误,甚至没有尝试连接到保管库。似乎它期望身份验证作为令牌:

Error creating bean with name 'clientAuthentication' defined in class path resource
caused by java.lang.IllegalArgumentException: Token(spring.cloud.vault.token) must not be empty

这对我来说没有意义,因为本地日志和 AK​​S 日志完全不同。我的 JKS 在 local 和 AKS 上都有根证书。

有人可以帮我解决这个问题。我查看了各种文件,但似乎都过时了。

4

1 回答 1

0

根据以下文档使用 Azure POD Identity - Arctiq 将 Hashicorp Vault 与 Azure AKS集成,您可以将 Hashicorp Vault 与 AKS 集成。您可以从 AKS 生成身份验证令牌以对 Hashicorp 保管库进行身份验证。

Azure AD Pod Identity 允许你将 Pod 绑定到在群集外部管理的 Azure Identity。可以将 Vault 配置为使用 Azure AD 作为身份提供程序,这将使 AKS 中的容器化应用程序能够使用 Vault 中的机密,而无需修改任何代码。

  1. 在 AKS 上启用 Azure AD Pod 标识。

  2. 创建 Azure 标识。

  3. 将 Azure 标识部署到 AKS。

  4. 将 Hashicorp 保管库部署到 AKS

  5. 验证 Azure 身份绑定

  6. 从 pod 会话内部,从 Azure 元数据服务获取令牌,然后使用 JWT 令牌向 Vault 进行身份验证

于 2021-09-23T13:48:36.477 回答