You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过EKS+Vault CSI Provider仅提取Secret核心数据?

问题:Vault CSI Provider生成的JSON包含额外元数据,需提取data字段内容

场景:在EKS中使用Vault CSI Provider,将Vault KV中的密钥加载到Deployment并生成JSON文件,服务期望读取指定格式的密钥文件。

现有配置:

SecretProviderClass配置

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: CENSORED-secret-provider-class
  namespace: CENSORED
spec:
  parameters:
    objects: |
      - objectName: "CENSORED"
        secretPath: "CENSORED"
        secretKey: ""
        template: |
          {
            "BotToken": "{{ .data.BotToken }}",
            "Mongo": {
              "db": "{{ .data.Mongo.db }}",
              "host": "{{ .data.Mongo.host }}",
              "password": "{{ .data.Mongo.password }}",
              "port": {{ .data.Mongo.port }},
              "username": "{{ .data.Mongo.username }}"
            }
          }
    roleName: CENSORED
    vaultAddress: CENSORED
  provider: vault

Vault KV存储内容

/ $ vault kv get CENSORED
====== Data ======
Key         Value
---         -----
BotToken    CENSORED
Mongo       map[db:CENSORED host:CENSORED password:CENSORED port:CENSORED username:CENSORED]

Deployment相关配置

volumeMounts:
            - name: secret
              mountPath: CENSORED
              readOnly: true
      volumes:
      - name: secret
        csi:
          driver: secrets-store.csi.k8s.io
          readOnly: true
          volumeAttributes:
            secretProviderClass: "CENSORED"
            secretKey: ""

当前问题:
成功加载密钥后,生成的JSON文件包含request_id、lease_id等Vault API响应元数据,格式如下:

{
  "request_id": "...",
  "lease_id": "",
  "lease_duration": 2764800,
  "renewable": false,
  "data": {
    "BotToken": "...",
    "Mongo": {
      "db": "...",
      "host": "...",
      "password": "...",
      "port": ...,
      "username": "..."
    }
  }
}

期望结果:
仅保留data字段下的内容,格式如下:

{
  "BotToken": "...",
  "Mongo": {
    "db": "...",
    "host": "...",
    "password": "...",
    "port": ...,
    "username": "..."
  }
}

解决方案

1. 开启模板渲染功能

在SecretProviderClass的spec.parameters中添加enableTemplates: "true",这是模板生效的必要条件。

2. 完整调整后的SecretProviderClass配置

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: CENSORED-secret-provider-class
  namespace: CENSORED
spec:
  parameters:
    enableTemplates: "true"  # 新增:启用模板渲染逻辑
    objects: |
      - objectName: "ENV.json"  # 指定生成的目标文件名(匹配服务期望的文件名)
        secretPath: "CENSORED"
        template: |
          {
            "BotToken": "{{ .data.BotToken }}",
            "Mongo": {
              "db": "{{ .data.Mongo.db }}",
              "host": "{{ .data.Mongo.host }}",
              "password": "{{ .data.Mongo.password }}",
              "port": {{ .data.Mongo.port }},
              "username": "{{ .data.Mongo.username }}"
            }
          }
    roleName: CENSORED
    vaultAddress: CENSORED
  provider: vault

3. 清理Deployment冗余配置

移除volumes.csi.volumeAttributes中的secretKey: "",使用模板时无需该配置:

volumes:
      - name: secret
        csi:
          driver: secrets-store.csi.k8s.io
          readOnly: true
          volumeAttributes:
            secretProviderClass: "CENSORED-secret-provider-class"  # 确保与SecretProviderClass名称一致

原理说明

  • enableTemplates: "true"会让Vault CSI Provider跳过默认的完整API响应输出,转而使用你定义的模板生成文件。
  • objectName直接指定生成的文件名,设置为服务期望的名称即可(比如ENV.json)。
  • 模板中的{{ .data.BotToken }}等变量会直接引用Vault KV中存储的对应字段,渲染后生成纯净的目标JSON结构。

内容的提问来源于stack exchange,提问作者character

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 01:05:00