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

AWS EKS容器IRSA角色扮演异常:使用EC2 IAM角色而非配置IRSA角色

排查EKS容器未使用IRSA角色而 fallback到EC2实例角色的问题

以下是逐步排查步骤:

1. 确认Pod关联了目标ServiceAccount

执行命令检查Pod是否指定了正确的ServiceAccount:

kubectl get pod <你的Pod名称> -o yaml | grep serviceAccountName

返回结果必须是serviceAccountName: web,若未指定或为其他值,Pod会使用默认ServiceAccount,而默认SA未绑定IRSA时会自动使用EC2实例角色。

2. 验证IRSA角色的信任策略配置

登录AWS IAM控制台,检查arn:aws:iam::xxxxxxxx:role/web角色的信任策略,必须包含以下核心配置:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::xxxxxxxx:oidc-provider/oidc.eks.<你的区域>.amazonaws.com/id/<集群OIDC ID>"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "oidc.eks.<你的区域>.amazonaws.com/id/<集群OIDC ID>:sub": "system:serviceaccount:<SA所在命名空间>:web"
        }
      }
    }
  ]
}

需确保:

  • Federated字段的OIDC提供商ARN与你的EKS集群OIDC issuer一致(可通过aws eks describe-cluster --name <集群名称> --query "cluster.identity.oidc.issuer"获取)
  • Condition中的sub字段包含ServiceAccount所在的正确命名空间

3. 检查EKS集群是否已配置OIDC提供商

执行命令确认集群的OIDC issuer存在:

aws eks describe-cluster --name <集群名称> --query "cluster.identity.oidc.issuer"

若返回null,说明未创建OIDC提供商,需先创建(这是IRSA生效的前提条件)。

4. 验证容器内IRSA相关环境变量与挂载

进入容器执行以下检查:

  • 查看是否存在IRSA核心环境变量:
    echo $AWS_ROLE_ARN && echo $AWS_WEB_IDENTITY_TOKEN_FILE
    
    应分别返回arn:aws:iam::xxxxxxxx:role/web和/var/run/secrets/eks.amazonaws.com/serviceaccount/token
  • 检查挂载目录是否存在有效文件:
    ls /var/run/secrets/eks.amazonaws.com/serviceaccount/
    
    应包含token和ca.crt文件,若缺失则IRSA未正确注入凭证。

5. 确认AWS CLI/SDK版本支持Web Identity Credentials

容器内的AWS CLI版本需≥1.16.156,SDK需对应支持Web Identity的版本。执行命令检查版本:

aws --version

若版本过低,需升级AWS CLI或SDK,否则会自动 fallback到EC2实例元数据服务(IMDS)获取凭证。

6. 检查Pod是否禁用IMDS(可选)

若Pod未禁用IMDS,且EC2实例角色有IMDS访问权限,当IRSA失效时会自动使用EC2角色。可在Pod配置中添加以下内容强制使用IRSA:

spec:
  serviceAccountName: web
  volumes:
    - name: aws-iam-token
      projected:
        sources:
          - serviceAccountToken:
              path: token
              expirationSeconds: 86400
              audience: sts.amazonaws.com
  containers:
    - name: <你的容器名称>
      volumeMounts:
        - name: aws-iam-token
          mountPath: /var/run/secrets/eks.amazonaws.com/serviceaccount
          readOnly: true
      env:
        - name: AWS_ROLE_ARN
          value: arn:aws:iam::xxxxxxxx:role/web
        - name: AWS_WEB_IDENTITY_TOKEN_FILE
          value: /var/run/secrets/eks.amazonaws.com/serviceaccount/token

7. 确认ServiceAccount与Pod同属一个命名空间

IRSA信任策略的sub字段包含命名空间信息,若Pod和ServiceAccount不在同一命名空间,信任策略匹配失败,IRSA无法生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 05:45:29