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

如何在AWS EKS中安全将Secrets Manager密钥设为Pod环境变量及相关疑问

在AWS EKS中将AWS Secrets Manager密钥转为Pod环境变量的方案

方案1:CSI挂载+容器内脚本注入环境变量

先通过Secrets Manager CSI驱动将密钥挂载到Pod的指定路径,再在容器启动时通过脚本读取文件内容并设置为环境变量。示例Pod配置:

apiVersion: v1
kind: Pod
metadata:
  name: django-app
spec:
  containers:
  - name: django-container
    image: your-django-image
    command: ["/bin/sh", "-c"]
    args:
      - >
        export DB_PASSWORD=$(cat /mnt/secrets/db-password) &&
        export SECRET_KEY=$(cat /mnt/secrets/secret-key) &&
        python manage.py runserver 0.0.0.0:8000
    volumeMounts:
    - name: secrets-store-inline
      mountPath: "/mnt/secrets"
      readOnly: true
  volumes:
  - name: secrets-store-inline
    csi:
      driver: secrets-store.csi.k8s.io
      readOnly: true
      volumeAttributes:
        secretProviderClass: "aws-secrets" # 替换为你已配置的SecretProviderClass

方案2:用External Secrets Operator同步为K8s Secret后导入

通过External Secrets Operator(ESO)将Secrets Manager中的密钥同步为Kubernetes原生Secret,再从Secret导入环境变量:

  1. 先在EKS集群部署ESO
  2. 创建ExternalSecret资源关联Secrets Manager密钥:
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
  name: django-secrets
spec:
  secretStoreRef:
    name: aws-secrets-manager # 替换为你的SecretStore名称
    kind: SecretStore
  target:
    name: django-k8s-secret # 同步生成的K8s Secret名称
  data:
  - secretKey: db-password
    remoteRef:
      key: your-sm-secret-name # Secrets Manager中的密钥名称
      property: db-password # 密钥内的字段名
  - secretKey: secret-key
    remoteRef:
      key: your-sm-secret-name
      property: secret-key
  1. 在Pod中引用该K8s Secret作为环境变量:
apiVersion: v1
kind: Pod
metadata:
  name: django-app
spec:
  containers:
  - name: django-container
    image: your-django-image
    env:
    - name: DB_PASSWORD
      valueFrom:
        secretKeyRef:
          name: django-k8s-secret
          key: db-password
    - name: SECRET_KEY
      valueFrom:
        secretKeyRef:
          name: django-k8s-secret
          key: secret-key

环境变量并非唯一安全选项

对于依赖环境变量存密钥的应用,环境变量是便捷方案,但不是唯一安全选择,还有更安全的替代方式:

  • 直接读取挂载的密钥文件:Django支持通过config.read_file()读取文件中的配置,把挂载的密钥文件路径传入配置,避免环境变量泄露(比如容器内执行env命令可能暴露变量)。
  • Kubernetes Secret卷挂载:将K8s Secret挂载为文件,应用直接读取文件内容,和CSI驱动挂载逻辑类似。
  • 服务网格密钥注入:如Istio这类服务网格可以直接将密钥注入应用进程内存,无需暴露为文件或环境变量,安全性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 02:50:25