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

如何在Kubernetes ConfigMap中访问AWS Secrets Manager密钥

如何在Kubernetes ConfigMap中访问AWS Secrets Manager的密钥

Kubernetes ConfigMap本身无法直接读取AWS Secrets Manager的密钥,需通过以下两种常见方式实现需求:

方案一:部署时静态注入(适合无需动态更新的场景)

通过AWS CLI拉取Secrets Manager的密钥内容,手动填充到ConfigMap中,步骤如下:

  1. 拉取密钥内容
    执行命令获取/app/dev/密钥的JSON格式内容:

    aws secretsmanager get-secret-value --secret-id /app/dev/ --query SecretString --output text > secret.json
    
  2. 生成带密钥值的ConfigMap
    使用jq工具提取对应键值,生成ConfigMap配置文件:

    cat << EOF > configmap.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: your-configmap-name
    data:
      value1: $(jq -r '.value1' secret.json)
      Value2: $(jq -r '.Value2' secret.json)
    EOF
    
  3. 应用ConfigMap到集群

    kubectl apply -f configmap.yaml
    

方案二:运行时动态同步(支持密钥自动更新)

借助Secrets Store CSI Driver和AWS Secrets and Configuration Provider(ASCP),将Secrets Manager的密钥同步到Kubernetes Secret,再让Pod同时使用ConfigMap和Secret:

  1. 安装依赖组件

    • 安装Secrets Store CSI Driver:通过kubectl部署官方提供的RBAC规则、CRD及CSI驱动组件。
    • 安装AWS ASCP:部署AWS官方提供的组件,用于对接Secrets Manager。
  2. 创建SecretProviderClass
    配置同步规则,将/app/dev/中的键值对同步到Kubernetes Secret:

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: aws-secrets-provider
    spec:
      provider: aws
      parameters:
        objects: |
          - objectName: "/app/dev/"
            objectType: "secretsmanager"
            jmesPath:
              - path: "value1"
                objectAlias: "value1"
              - path: "Value2"
                objectAlias: "Value2"
      secretObjects:
        - data:
            - key: value1
              objectName: value1
            - key: Value2
              objectName: Value2
          secretName: synced-aws-secrets
          type: Opaque
    
  3. 部署Pod并引用资源
    同时挂载ConfigMap和同步后的Secret,让应用通过环境变量读取:

    apiVersion: v1
    kind: Pod
    metadata:
      name: your-app-pod
    spec:
      containers:
        - name: app-container
          image: your-app-image
          env:
            # 从ConfigMap读取普通配置
            - name: APP_CONFIG_KEY
              valueFrom:
                configMapKeyRef:
                  name: your-configmap-name
                  key: your-config-key
            # 从同步后的Secret读取密钥
            - name: SECRET_VALUE1
              valueFrom:
                secretKeyRef:
                  name: synced-aws-secrets
                  key: value1
            - name: SECRET_VALUE2
              valueFrom:
                secretKeyRef:
                  name: synced-aws-secrets
                  key: Value2
          # 可选:将Secret挂载为文件供应用读取
          volumeMounts:
            - name: secrets-store-inline
              mountPath: "/mnt/secrets-store"
              readOnly: true
      volumes:
        - name: secrets-store-inline
          csi:
            driver: secrets-store.csi.k8s.io
            readOnly: true
            volumeAttributes:
              secretProviderClass: "aws-secrets-provider"
    

注意:若要求ConfigMap的data字段直接包含密钥值,只能采用方案一的静态注入方式,因为ConfigMap的内容是静态存储的,无法动态引用Secret中的值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:52:47