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

EKS中使用角色注解ServiceAccount时AWS SDK凭证缺失问题排查

EKS Pod IAM角色认证调试方案

我们通过带角色注解的ServiceAccount让Pod获取IAM角色用于AWS SDK认证,该配置在旧集群正常,但新集群使用AWS SDK v2 SQS客户端时出现错误:

Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1

已确认Pod环境变量、ServiceAccount注解、Deployment关联、IAM信任关系配置均符合要求,但JavaScript SDK未读取到AWS_WEB_IDENTITY_TOKEN_FILE中的凭证,以下是可用于调试的日志及验证方法:

一、AWS SDK v2 内置调试日志

  • 启用SDK调试模式:在Pod环境变量中添加AWS_DEBUG_LOG=true,或在代码中设置客户端日志级别为trace:
    const { SQSClient } = require("@aws-sdk/client-sqs");
    const client = new SQSClient({
      logger: {
        trace: (msg) => console.log(msg),
        debug: (msg) => console.log(msg),
      },
    });
    
    该日志会输出SDK获取凭证的完整流程,包括是否尝试读取令牌文件、STS调用的请求/响应细节。

二、Pod内部文件与权限验证

  • 进入Pod内部,检查令牌文件的存在性与可读性:
    # 查看文件权限与状态
    ls -l /var/run/secrets/eks.amazonaws.com/serviceaccount/token
    # 验证文件可读取(注意:令牌内容敏感,请勿泄露)
    cat /var/run/secrets/eks.amazonaws.com/serviceaccount/token
    
    若文件不存在或权限不足,需查看节点kubelet日志排查挂载问题:
    # 查看kubelet实时日志(适配containerd等容器运行时)
    journalctl -u kubelet -f
    
    重点查找与aws-iam-token挂载相关的错误信息,如挂载失败、权限配置异常。

三、EKS Pod Identity Webhook 日志

如果新集群使用EKS Pod Identity组件(而非旧版kube-aws-iam-controller),查看webhook日志:

# 获取webhook Pod列表
kubectl get pods -n kube-system -l app.kubernetes.io/name=eks-pod-identity-webhook
# 查看实时日志
kubectl logs <webhook-pod-name> -n kube-system -f

日志会显示是否成功处理ServiceAccount注解,是否为Pod注入了正确的环境变量与挂载卷。

四、手动STS调用测试日志

在Pod内部手动调用STS的AssumeRoleWithWebIdentity接口,验证凭证获取流程:

# 安装curl和jq(若Pod中未预装)
apt-get update && apt-get install -y curl jq
# 发起STS调用
curl -X POST "https://sts.us-east-1.amazonaws.com/" \
  -d "Action=AssumeRoleWithWebIdentity" \
  -d "Version=2011-06-15" \
  -d "RoleArn=arn:aws:iam::**************:role/dev-node-api" \
  -d "RoleSessionName=test-session" \
  -d "WebIdentityToken=$(cat /var/run/secrets/eks.amazonaws.com/serviceaccount/token)"

调用失败时,返回的错误信息会直接定位问题(如信任关系不匹配、令牌无效等)。

五、IAM信任关系验证日志

检查信任关系中的sub字段是否与ServiceAccount的命名空间、名称完全匹配:

  • 当前信任关系中sub值为system:serviceaccount:apis:node-api-service-account,但ServiceAccount的命名空间是app,存在命名空间不匹配,需修正为system:serviceaccount:app:node-api-service-account。
  • 使用AWS CLI模拟权限验证:
    aws iam simulate-principal-policy \
      --policy-source-arn "arn:aws:iam::************:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/********************************1F61" \
      --action-names "sts:AssumeRoleWithWebIdentity" \
      --resource-arns "arn:aws:iam::**************:role/dev-node-api" \
      --context-entries "Key=oidc.eks.us-east-1.amazonaws.com/id/********************************1F61:sub,Value=system:serviceaccount:app:node-api-service-account" \
      --context-entries "Key=oidc.eks.us-east-1.amazonaws.com/id/********************************1F61:aud,Value=sts.amazonaws.com"
    
    模拟结果会明确显示该调用是否被允许。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 10:20:27