为什么EKS Pod容器内的Python代码无法下载S3对象,提示AccessDenied?
EKS Pod通过IRSA访问S3报AccessDenied遗漏配置排查项
- ServiceAccount注解检查:确认绑定角色的ServiceAccount是否正确配置了注解
eks.amazonaws.com/role-arn: arn:aws:iam::[你的AWS账号ID]:role/[你的角色名],ARN不要出现拼写、账号ID、角色名错误。 - IAM角色信任策略检查:确认角色的信任策略是否允许EKS集群的OIDC提供商执行
sts:AssumeRoleWithWebIdentity操作,OIDC提供商的ARN、集群ID要和你当前使用的EKS集群完全匹配。 - Pod关联配置检查:执行
kubectl describe pod [你的Pod名称]查看Service Account字段,确认Pod实际关联的是你绑定了角色的ServiceAccount;进入Pod内部检查路径/var/run/secrets/eks.amazonaws.com/serviceaccount/token的WebIdentity token文件是否存在。 - S3桶策略检查:如果S3桶配置了自定义桶策略,确认桶策略没有拒绝你绑定的IAM角色的
s3:GetObject请求;如果是跨账号访问S3桶,需要在桶策略中显式允许该IAM角色的访问权限。 - KMS权限检查:如果S3对象使用KMS密钥加密,除了给IAM角色配置
kms:Decrypt权限外,还需要在KMS密钥的密钥策略中放行该IAM角色的Decrypt调用,仅在角色侧加KMS权限不会生效。 - 凭证优先级检查:进入Pod内部执行
aws sts get-caller-identity,查看返回的ARN是否为你绑定的IAM角色ARN。如果不是,检查Pod是否配置了AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY环境变量、是否存在~/.aws/credentials配置文件,上述配置的优先级高于IRSA凭证,如果存在无效旧配置会优先调用导致报错。 - SDK版本检查:低版本boto3/botocore不支持IRSA凭证自动获取,确认Pod内的boto3版本≥1.16.0、botocore版本≥1.19.0,版本过低可以执行
pip install --upgrade boto3 botocore升级。
内容的提问来源于stack exchange,提问作者Akshay Awate
相关产品推荐
相关产品推荐

