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

K8s+Helm部署场景下安全获取AWS访问权限的方案咨询

安全从AWS Secrets Manager拉取密钥到Kubernetes InitContainer的方案

方案1:使用IAM Roles for Service Accounts (IRSA)

这是AWS EKS原生的安全方案,完全不需要在Helm Chart中嵌入任何凭证:

  • 先确认你的EKS集群已配置OIDC身份提供商(这是IRSA的前提)
  • 将你已创建的、拥有Secrets Manager访问权限的IAM角色,关联到Kubernetes中的一个ServiceAccount(通过IAM角色的信任策略,允许该ServiceAccount的OIDC身份访问)
  • 在Helm Chart的Deployment定义中,给InitContainer指定这个ServiceAccount:
    initContainers:
    - name: secret-fetcher
      image: your-python-script-image
      serviceAccountName: secrets-access-sa
      # 其他配置:挂载卷存储生成的环境文件等
    
  • 你的Python脚本无需修改AWS凭证相关代码,AWS SDK会自动从Pod的元数据服务获取临时IAM凭证,完成Secrets Manager的访问

方案2:使用AWS Secrets Manager CSI Driver

无需自定义Python脚本,直接通过CSI驱动将密钥挂载为文件或环境变量:

  • 先在EKS集群中部署AWS Secrets Manager CSI Driver
  • 创建SecretProviderClass资源,配置要拉取的Secrets Manager密钥信息:
    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: aws-secrets
    spec:
      provider: aws
      parameters:
        objects: |
          - objectName: "your-secret-name"
            objectType: "secretsmanager"
            jmesPath:
              - path: "DB_PASSWORD"
                objectAlias: "DB_PASSWORD"
    
  • 在Helm Chart中,给Pod配置CSI卷挂载,或直接通过环境变量引用:
    containers:
    - name: your-app
      env:
      - name: DB_PASSWORD
        valueFrom:
          secretKeyRef:
            name: aws-secrets
            key: DB_PASSWORD
      volumes:
      - name: secrets-store-inline
        csi:
          driver: secrets-store.csi.k8s.io
          readOnly: true
          volumeAttributes:
            secretProviderClass: "aws-secrets"
    
  • 同样通过IRSA给CSI Driver的ServiceAccount授权访问Secrets Manager,Helm Chart中无需嵌入任何凭证

方案3:使用External Secrets Operator (ESO)

将Secrets Manager的密钥同步到Kubernetes Secret,再在应用中引用:

  • 部署External Secrets Operator到集群,配置其使用IRSA权限访问Secrets Manager
  • 创建ExternalSecret资源,定义要同步的密钥:
    apiVersion: external-secrets.io/v1beta1
    kind: ExternalSecret
    metadata:
      name: app-secrets
    spec:
      secretStoreRef:
        name: aws-secrets-manager
        kind: SecretStore
      target:
        name: app-secrets-k8s
      data:
      - secretKey: DB_PASSWORD
        remoteRef:
          key: your-secret-name
          property: DB_PASSWORD
    
  • 在Helm Chart中,直接从同步后的Kubernetes Secret挂载环境变量:
    envFrom:
    - secretRef:
        name: app-secrets-k8s
    
  • 整个过程Helm Chart无需包含任何凭证,同步操作由ESO自动完成

内容的提问来源于stack exchange,提问作者Mansur Ul Hasan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:23:29