You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

AWS EKS环境下通过Kubernetes ServiceAccount访问EFS的权限认证故障排查求助

排查EFS CSI Driver权限认证失败问题

从你提供的日志和配置来看,核心问题是EFS CSI Controller的ServiceAccount无法通过IRSA(IAM Roles for Service Accounts)获取AWS权限,导致动态创建EFS访问点失败,进而PVC无法绑定、Pod调度异常。下面是按优先级排序的排查步骤:

1. 验证IAM角色的信任策略(Trust Policy)是否正确

IRSA的核心是让K8s ServiceAccount能假定对应的IAM角色,这依赖于角色的信任策略是否允许EKS集群的OIDC提供商进行角色切换。你只提到了权限策略,但信任策略配置错误是这类问题最常见的原因。

检查命令:

aws iam get-role --role-name AmazonEKS_EFS_CSI_Driver_Policy --query Role.AssumeRolePolicyDocument

正确的信任策略模板(需要替换成你的集群OIDC信息):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::111111111111:oidc-provider/oidc.eks.<region>.amazonaws.com/id/<OIDC_ID>"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "oidc.eks.<region>.amazonaws.com/id/<OIDC_ID>:aud": "sts.amazonaws.com",
          "oidc.eks.<region>.amazonaws.com/id/<OIDC_ID>:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa"
        }
      }
    }
  ]
}

说明:

  • <region>替换为你的EKS集群区域
  • <OIDC_ID>是你EKS集群的OIDC提供商ID,可以通过aws eks describe-cluster --name <cluster-name> --query "cluster.identity.oidc.issuer" --output text获取,取最后一段路径的字符串
  • 确保sub字段严格匹配你的ServiceAccount的命名空间和名称(kube-system/efs-csi-controller-sa)

2. 确认ServiceAccount的IRSA注解配置无误

检查你的ServiceAccount注解中的角色ARN是否完全正确:

annotations:
  eks.amazonaws.com/role-arn: arn:aws:iam::111111111111:role/AmazonEKS_EFS_CSI_Driver_Policy
  • 确认账号ID(111111111111)和角色名(AmazonEKS_EFS_CSI_Driver_Policy)没有拼写错误
  • 确保角色在当前AWS账号下存在,并且已经正确创建

3. 验证IAM权限策略是否包含动态配置所需权限

你使用的是efs-ap(动态访问点)模式,官方的EFS CSI Driver权限策略需要包含以下关键权限:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "efs:DescribeAccessPoints",
        "efs:DescribeFileSystems",
        "efs:CreateAccessPoint",
        "efs:DeleteAccessPoint"
      ],
      "Resource": "*"
    }
  ]
}

注意:如果你的EFS文件系统有资源策略,需要确保该IAM角色被允许访问该文件系统。

4. 检查EFS文件系统的资源策略

登录AWS控制台,进入EFS服务,找到你的文件系统(fs-92107410),查看其资源策略是否存在拒绝该IAM角色访问的规则,或者是否显式允许该角色的ARN进行操作。

如果资源策略设置了限制,需要添加允许该角色的语句,例如:

{
  "Version": "2012-10-17",
  "Id": "ExamplePolicy01",
  "Statement": [
    {
      "Sid": "AllowIAMRoleAccess",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111111111111:role/AmazonEKS_EFS_CSI_Driver_Policy"
      },
      "Action": [
        "efs:ClientMount",
        "efs:ClientWrite",
        "efs:DescribeAccessPoints"
      ],
      "Resource": "arn:aws:efs:<region>:111111111111:file-system/fs-92107410"
    }
  ]
}

5. 确认EKS集群已关联OIDC提供商

IRSA要求EKS集群必须启用并关联AWS OIDC提供商,你可以通过以下命令检查:

aws eks describe-cluster --name <cluster-name> --query "cluster.identity.oidc"

如果输出中没有issuer字段,说明你需要先为集群创建OIDC提供商:

eksctl utils associate-iam-oidc-provider --cluster <cluster-name> --approve

最后验证步骤

完成上述排查后,可以重启EFS CSI Controller Pod,让其重新加载权限:

kubectl rollout restart deployment efs-csi-controller -n kube-system

然后查看PVC状态和Pod日志,确认是否能正常创建访问点和绑定卷。

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

火山引擎 最新活动