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

EFS策略标识符设为*权限过宽,限制后挂载失败求优化方案

解决EFS挂载权限问题:替代宽松的"*"权限配置方案

问题场景

使用Terraform AWS EFS模块配置时,将文件系统策略的principals.identifiers设为"*",Pod可以正常挂载EFS卷;但改为data.aws_caller_identity.current.arn后,出现mount.nfs4: access denied by server挂载错误。需要替换过于宽松的*权限,实现更安全的访问控制。

问题原因

Pod挂载EFS时,并非使用Terraform部署时的调用者身份:

  • 若通过EFS CSI驱动挂载,实际使用的是CSI驱动关联的IAM角色
  • 若直接通过节点挂载,使用的是EKS节点的IAM角色
    因此指定Terraform调用者ARN无法匹配实际挂载请求的身份,导致权限拒绝。

安全权限配置方案

方案1:限制到EFS CSI驱动IAM角色(推荐,K8S环境优先)

针对K8S环境使用EFS CSI驱动的场景,将权限授予CSI驱动的IAM角色,并结合访问点进一步缩小范围:

policy_statements = [
  {
    sid     = "${var.cluster_name}-efs-csi-access"
    actions = ["elasticfilesystem:ClientMount",
               "elasticfilesystem:ClientRootAccess",
               "elasticfilesystem:ClientWrite"]
    principals = [
      {
        type        = "AWS"
        identifiers = ["arn:aws:iam::123456789012:role/eks-cluster-efs-csi-driver-role"] # 替换为你的CSI驱动角色ARN
      }
    ]
    condition = {
      test     = "StringEquals"
      variable = "elasticfilesystem:AccessPointArn"
      values   = [module.efs.access_points["root_dir1"].arn] # 限制到已配置的访问点
    }
  }
]
  • 仅允许指定的CSI角色访问EFS,同时绑定到特定访问点,实现权限最小化
  • 需要确保CSI驱动部署时已关联该IAM角色,并具备对应权限

方案2:限制到指定VPC内的资源(适合信任VPC内部资源场景)

通过aws:SourceVpc条件,仅允许来自当前VPC的资源访问EFS,兼顾安全性和易用性:

policy_statements = [
  {
    sid     = "${var.cluster_name}-vpc-restricted-access"
    actions = ["elasticfilesystem:ClientMount",
               "elasticfilesystem:ClientRootAccess",
               "elasticfilesystem:ClientWrite"]
    principals = [
      {
        type        = "AWS"
        identifiers = ["*"]
      }
    ]
    condition = {
      test     = "StringEquals"
      variable = "aws:SourceVpc"
      values   = [data.aws_vpc.default.id] # 替换为你的VPC ID
    }
  }
]
  • 虽然保留了*,但通过VPC条件限制了访问来源,仅允许当前VPC内的资源挂载,比无限制的*安全得多

方案3:限制到EKS节点IAM角色(无CSI驱动场景)

若直接通过EKS节点挂载EFS,需将权限授予节点的IAM角色:

policy_statements = [
  {
    sid     = "${var.cluster_name}-node-role-access"
    actions = ["elasticfilesystem:ClientMount",
               "elasticfilesystem:ClientRootAccess",
               "elasticfilesystem:ClientWrite"]
    principals = [
      {
        type        = "AWS"
        identifiers = ["arn:aws:iam::123456789012:role/eks-cluster-node-group-role"] # 替换为你的节点角色ARN
      }
    ]
  }
]

注意事项

  1. 确保EFS安全组已开放NFS(2049/TCP)端口给Pod/节点所在的子网(当前配置已满足此要求)
  2. 权限策略变更后,需等待1-2分钟让策略生效,避免IAM缓存导致的权限问题
  3. 使用访问点时,Pod挂载配置中需指定对应的访问点ID,否则会被条件拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:35:48