尝试在 kubernetes 上使用 Spring boot 应用程序访问任何保管库秘密引擎时出现权限被拒绝错误

问题描述 投票:0回答:1

我构建了一个 Spring Boot 应用程序,并将其部署在 kuberenetes 上以及库访问权限上。当我尝试使用 kuberenets 角色访问保管库秘密引擎(任何 kv、秘密等..)时,出现权限被拒绝错误。

仅供参考,我能够访问保管库服务并从应用程序窗格中提取数据。

我的应用程序 yaml

spring:
  config:
    import: vault://
  cloud:
    vault:
      config.lifecycle:
        enabled: true
        min-renewal: 100s
        expiry-threshold: 300s
      uri: http://vault.vault:8200
      authentication: kubernetes
      kubernetes:
        role: simple-test
      generic:
        enabled: false
      kv:
        enabled: true
        backend: kv
        profile-separator: /
        application-name: my-app
    kubernetes:
      secrets:
        enabled: true
        namespace: app
        fail-fast: true
        retry:
          enabled: true

部署yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: spring-vault-write
  labels:
    app: spring-vault-write
spec:
  replicas: 3
  selector:
    matchLabels:
      app: spring-vault-write
  template:
    metadata:
      name: spring-vault-write
      labels:
        app: spring-vault-write
    spec:
      imagePullSecrets:
        - name: registry-secret
      containers:
        - name: spring-vault-write
          image: xxxxdocker629/spring-vault-write:latest
          imagePullPolicy: Always

          ports:
            - containerPort: 80
              protocol: TCP
      restartPolicy: Always


      

我的控制器(我的应用程序位于 kv2 秘密引擎下,它有 data.key 和 data.password 条目)

@RestController
@RequestMapping("/api")
public class SpringVaultWriterController {
    Logger logger = LogManager.getLogger(SpringVaultWriterController.class);

    @Value("${data.key}")
    private String username;

    @Value("${data.password}")
    private String password;
    @GetMapping("/secrets")
    public String getList(){

        logger.info("get list is : ", username + " ::  " + password);

        return "we got the list as : List";
    }
}

为 kubernetes 角色附加策略。

path "kv/data/my-app" {
  capabilities = [ "create", "read", "update", "list" ]
}

有人可以帮助我哪里出了问题或有任何解决办法吗?

根据我的观察,我发现 /var/run/secrets/kubernetes.io/serviceaccount/token 下的令牌在应用程序 pod 和保管库中是不同的。这是问题的根本原因吗?

spring-boot docker kubernetes hashicorp-vault spring-cloud-vault-config
1个回答
0
投票

该问题可能是由于应用程序 pod 中的 Kubernetes 服务帐户令牌与 Vault 之间不匹配造成的。

确保 JWT 令牌已正确安装在 Pod 中,位置为

/var/run/secrets/kubernetes.io/serviceaccount/token

还要验证您的策略路径应该是

kv/data/my-app/*
而不是只是
kv/data/my-app

© www.soinside.com 2019 - 2024. All rights reserved.