AWS EKS Secrets Store CSI Provider无法拉取Secret求助
问题排查:AWS Secrets Store CSI Provider 挂载失败
问题背景
使用AWS Secrets Store CSI Provider将AWS Secrets Manager中的密钥同步至EKS集群,已配置SecretProviderClass和Pod,但Pod启动失败,报错:
Warning
FailedMount
96s (x10 over 5m47s)
kubelet
MountVolume.SetUp failed for volume "secret-volume" : rpc error: code = Unknown desc = failed to mount secrets store objects for pod pace/secret-dotfiles-pod,
err: rpc error: code = Unknown desc = Failed to fetch secret from all regions: mysecret
已确认Secrets Manager中存在密钥mysecret,内容为:
{ "APP_ENV": "staging", "APP_DEBUG": false }
SecretProviderClass配置:
apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: test-provider spec: provider: aws parameters: objects: | - objectName: mysecret objectType: secretsmanager jmesPath: - path: APP_ENV objectAlias: APP_ENV - path: APP_DEBUG objectAlias: APP_DEBUG
Pod配置:
apiVersion: v1 kind: Pod metadata: name: secret-pod spec: restartPolicy: Never serviceAccountName: my-account terminationGracePeriodSeconds: 2 containers: - name: dotfile-test-container image: registry.k8s.io/busybox volumeMounts: - name: secret-volume readOnly: true mountPath: "/mnt/secret-volume" volumes: - name: secret-volume csi: driver: secrets-store.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: test-provider
排查步骤
1. 检查ServiceAccount权限
Pod使用的my-account ServiceAccount必须具备访问Secrets Manager中mysecret的权限:
- 确认ServiceAccount关联的IAM角色(IRSA)存在,且已绑定包含以下权限的IAM策略:
注意:Secrets Manager的ARN后缀可能包含随机字符,使用通配符{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": "arn:aws:secretsmanager:<region>:<account-id>:secret:mysecret-*" } ] }mysecret-*避免匹配错误。 - 验证IRSA的信任策略是否允许EKS OIDC提供商扮演该角色,信任策略需包含类似内容:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::<account-id>:oidc-provider/oidc.eks.<region>.amazonaws.com/id/<OIDC-ID>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.<region>.amazonaws.com/id/<OIDC-ID>:sub": "system:serviceaccount:<namespace>:my-account" } } } ] }
2. 确认密钥区域与集群区域一致
报错提示Failed to fetch secret from all regions,说明CSI驱动可能在错误的区域查找密钥:
- 检查Secrets Manager中
mysecret所在的区域,确保与EKS集群区域相同。 - 如果密钥和集群不在同一区域,需在
SecretProviderClass的parameters中指定密钥区域:parameters: objects: | - objectName: mysecret objectType: secretsmanager objectRegion: <secret-region> jmesPath: - path: APP_ENV objectAlias: APP_ENV - path: APP_DEBUG objectAlias: APP_DEBUG
3. 验证密钥名称匹配
- 确认
SecretProviderClass中objectName的mysecret与Secrets Manager中的密钥名称完全一致(区分大小写)。 - 检查密钥是否有别名,若使用别名,需确保别名正确,或直接使用密钥的ARN作为
objectName。
4. 检查CSI驱动和Provider版本兼容性
- 确认已部署的Secrets Store CSI Driver和AWS Provider版本兼容,建议使用官方推荐的对应版本组合。
- 验证AWS Provider DaemonSet是否正常运行:
确保所有Pod处于kubectl get pods -n kube-system -l app=secrets-store-csi-driver-provider-awsRunning状态。
5. 查看Provider Pod日志获取详细错误
- 找到对应节点上的AWS Provider Pod:
kubectl get pods -n kube-system -o wide | grep secrets-store-csi-driver-provider-aws - 查看该Pod的日志,获取更详细的错误信息:
日志中可能包含权限拒绝、密钥不存在等具体原因。kubectl logs <provider-pod-name> -n kube-system
6. 验证网络连通性
- 确保EKS节点能够访问AWS Secrets Manager服务,检查节点的安全组和NACL是否允许出站访问Secrets Manager的HTTPS 443端口。
- 如果使用私有集群,需确认已配置VPC接口端点用于Secrets Manager,且节点路由表指向该端点。
内容的提问来源于stack exchange,提问作者Martin Melka
相关产品推荐
相关产品推荐

