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

如何配置AWS EFS策略,仅允许指定Fargate任务访问?

问题:Fargate任务无法挂载指定权限的EFS文件系统

我有一个AWS EFS文件系统,当资源策略的主体设为"AWS":"*"时,Fargate任务可以正常挂载读写,但这样会允许所有AWS实体访问,不符合安全要求。我想仅让指定的Fargate任务访问该EFS卷,于是把主体换成Fargate任务执行角色my-fargate-role的ARN,但任务挂载失败,报错如下:

Task stopped at: 3/14/2023, 18:35:47 UTC ResourceInitializationError:
failed to invoke EFS utils commands to set up EFS volumes: stderr:
b'mount.nfs4: access denied by server while mounting 127.0.0.1:/' :
unsuccessful EFS utils command execution; code: 32

当前EFS文件系统策略:

{
    "Version": "2012-10-17",
    "Id": "my-app-efs-pol",
    "Statement": [
        {
            "Sid": "my-app-efs-pol-sid",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123123123123:role/my-fargate-role"
            },
            "Action": [
                "elasticfilesystem:ClientMount",
                "elasticfilesystem:ClientWrite",
                "elasticfilesystem:ClientRootAccess",
                "elasticfilesystem:DescribeMountTargets"
            ],
            "Resource": "arn:aws:elasticfilesystem:us-east-1:123123123123:file-system/fs-0d12312312312312c",
            "Condition": {
                "Bool": {
                    "aws:SecureTransport": "true",
                    "elasticfilesystem:AccessedViaMountTarget": "true"
                }
            }
        }
    ]
}

my-fargate-role附加的权限策略(另有两个SSM和任务执行相关策略,与EFS问题无关):

{
    "Statement": [
        {
            "Action": [
                "elasticfilesystem:ClientMount",
                "elasticfilesystem:ClientRootAccess",
                "elasticfilesystem:ClientWrite",
                "elasticfilesystem:CreateFileSystem",
                "elasticfilesystem:CreateMountTarget",
                "elasticfilesystem:DescribeMountTargets"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ],
    "Version": "2012-10-17"
}

请问如何正确配置,实现仅允许该Fargate任务访问EFS文件系统?


解决方案
  1. 解决挂载方式与策略条件的冲突
    报错中的挂载地址127.0.0.1:/说明Fargate使用的是EFS弹性网络接口直接挂载,而非通过EFS挂载目标。但当前策略中elasticfilesystem:AccessedViaMountTarget设为true,会直接拒绝这种挂载请求。要么移除该条件,要么配置任务通过EFS挂载目标进行挂载。

  2. 修正EFS资源策略的身份匹配逻辑
    Fargate任务挂载EFS时使用的是任务执行角色的临时凭证,直接指定角色ARN作为Principal可能存在匹配问题。改用aws:PrincipalArn条件精确匹配角色ARN,确保只有该角色发起的请求被允许。

  3. 调整并简化EFS资源策略
    移除不必要的elasticfilesystem:DescribeMountTargets权限(挂载EFS无需此权限),同时优化权限范围。调整后的策略示例:

{
    "Version": "2012-10-17",
    "Id": "my-app-efs-pol",
    "Statement": [
        {
            "Sid": "my-app-efs-pol-sid",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": [
                "elasticfilesystem:ClientMount",
                "elasticfilesystem:ClientWrite",
                "elasticfilesystem:ClientRootAccess"
            ],
            "Resource": "arn:aws:elasticfilesystem:us-east-1:123123123123:file-system/fs-0d12312312312312c",
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalArn": "arn:aws:iam::123123123123:role/my-fargate-role"
                }
            }
        }
    ]
}

这里Principal用*但通过条件限制仅指定角色可访问,比直接指定角色ARN更适配临时凭证的身份匹配逻辑。

  1. 验证任务执行角色的信任关系
    确保任务执行角色的信任策略允许ECS任务服务扮演它,否则任务无法获取有效访问凭证。信任策略需包含以下内容:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "ecs-tasks.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
  1. 逐步测试安全条件
    调整策略后重启Fargate任务验证挂载。如果仍失败,可暂时移除aws:SecureTransport条件(若任务未使用TLS挂载EFS),确认挂载正常后再重新添加安全限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 07:07:12