EKS集群引用AWS Secrets Manager密钥作为环境变量报错求助
EKS中环境变量引用Secrets Manager同步Secret报错的解决方法
错误原因
报错信息:
pods "domain-74bf89c79-" 被禁止:容器domain-container的环境变量DB_CONNECTION_USERNAME引用secret.secretName="dbsecret"不被允许,因为服务账号secret-manager-sa未引用该密钥
问题出在你的ServiceAccount secret-manager-sa 配置了kubernetes.io/enforce-mountable-secrets: "true"注解,该注解启用了Secret强制校验规则:Pod只能使用ServiceAccount显式声明引用的Secret,环境变量引用Secret的行为也受此规则约束。
解决步骤
1. 修改ServiceAccount,添加对目标Secret的引用
在ServiceAccount的secrets字段中添加dbsecret,明确授权该ServiceAccount可以使用这个Secret:
apiVersion: v1 kind: ServiceAccount metadata: name: secret-manager-sa namespace: dev annotations: eks.amazonaws.com/role-arn: "arn:aws:iam::1234567890:role/dev-secret-sa-role" kubernetes.io/enforce-mountable-secrets: "true" secrets: - name: dbsecret
2. 应用配置并重启Deployment
执行以下命令更新ServiceAccount并重启Deployment,使配置生效:
kubectl apply -f <你的ServiceAccount配置文件路径> -n dev kubectl rollout restart deployment domain -n dev
补充说明
kubernetes.io/enforce-mountable-secrets: "true"是Kubernetes的安全增强配置,限制Pod只能使用ServiceAccount授权的Secret,避免未授权的Secret访问。- 即使你已经通过CSI Driver将Secret挂载到Pod的文件系统,环境变量引用Secret的方式仍需遵守该校验规则,两者的权限控制逻辑是独立的。
内容的提问来源于stack exchange,提问作者andrea-anf
相关产品推荐
相关产品推荐

