发布于: Nov 30, 2022
【概要】EFS 在 NFS 文件权限控制的基础上,结合安全组 (Security Group),身份与访问管理服务 (IAM) 和 EFS 独特的接入点 (Access Point) 机制,简化权限控制的配置工作,并进行细粒度的权限管理和审计。
在这个接入点配置里,我们设置了:
- POSIX 用户: 这里我们可以设置通过该接入点访问时,强制使用的操作系统用户 ID /组 ID。本示例中我们使用了用户 ID 和组 ID 均为 1003,以便与现有操作系统用户区分。
- 目录:这里我们可以设置通过接入点访问时做为根目录的路径,如果该目录不存在,则在第一次通过接入点访问时 EFS 会自动创建。如果不指定则默认使用文件系统根目录。本示例中我们指定了/data 做为根目录
- 拥有者用户与权限:这里我们可以设置根目录拥有者的用户 ID 和组 ID,同时我们也可以指定这个根目录的权限。本示例我们指定拥有者用户 ID 和组 ID 均为 1003,权限是 755
接着我们需要修改管理员所使用的 IAM 角色 (即 FSWrite) 的策略,限制其只能通过该接入点访问时才赋予写权限:
{ "Version": "2012-10-17", "Id": "efsid", "Statement": [ { "Sid": "efssid", "Effect": "Allow", "Action": [ "elasticfilesystem:ClientWrite", "elasticfilesystem:ClientRootAccess" ], "Resource": "arn:aws-cn:elasticfilesystem:cn-northwest-1:402202783068:file-system/fs-57789eb2", "Condition": { "StringEquals": { "elasticfilesystem:AccessPointArn": "arn:aws-cn:elasticfilesystem:cn-northwest-1:402202783068:access-point/fsap-068adf52269d7df77" } } } ] }
可以看到这个策略修改的地方是最后的 ”Condition” 段,增加了指定接入点 ARN 为 fsap-068adf52269d7df77 。
接下来我们在管理节点的 EC2 实例(附加了 FSWrite 角色)上,通过这个接入点进行挂载,挂载时需要使用 -o tls, iam,- accesspoint 参数指定接入点,启用 TLS 和 IAM 权限认证:
$ sudo mount -t efs fs-57789eb2:/ -o tls,iam,accesspoint=fsap-068adf52269d7df77 /mnt/efs
接入我们进行写入测试:
$ touch /mnt/efs/test1 $ ls -l /mnt/efs/test1 -rw-rw-r-- 1 1003 1003 0 Feb 7 13:25 /mnt/efs/test1 $ id uid=1000(ec2-user) gid=1000(ec2-user) groups=1000(ec2-user),4(adm),10(wheel),190(systemd-journal)
可以看到我们获得了写入权限,同时写入的文件所有者用户 ID 和组 ID 均为接入点所指定的 1003,而不是当前命令行的用户 id 1000
注意到我们角色的策略里虽然赋予了 Rootaccess 的权限,但此时即使客户端使用 root 用户发起请求,EFS 还是会以接入点的用户 id 为准:
$ sudo touch /mnt/efs/test2 $ ls -l /mnt/efs/test2 -rw-rw-r-- 1 1003 1003 0 Feb 7 14:47 /mnt/efs/test2
接下来我们检查接入点是否指定了/data 做为根目录。我们重新挂载文件系统,这次挂载不使用任何接入点:
$ sudo umount /mnt/efs $ sudo mount -t efs fs-57789eb2:/ /mnt/efs
检查相关的目录和文件:
$ ls -l /mnt/efs/data total 8 -rw-rw-r-- 1 1003 1003 0 Feb 7 13:25 test1 -rw-rw-r-- 1 1003 1003 0 Feb 7 14:47 test2
可以看到/data 目录被自动创建出来,刚才通过接入点挂载后创建的文件 test1 和 test2 也在其中。
接下来我们检查,如果不通过这个接入点,我们是否还可以通过 IAM 角色 FSWrite 获取写入权限:
$ sudo umount /mnt/efs $ sudo mount -t efs fs-57789eb2:/ -o tls,iam /mnt/efs $ touch /mnt/efs/test2 touch: cannot touch '/mnt/efs/test2': Read-only file system
可以看到不通过这个接入点访问时,这个角色 (FSWrite) 也就没有对文件系统的写入权限。
上述示例可以看到,通过将 IAM 策略与接入点进行结合,我们可以更细粒度的进行 NFS 客户端的权限设置,以便满足日常管理维护的安全需求。
通过上面的演示,我们可以看到,EFS 在 NFS 文件权限控制的基础上,结合安全组 (Security Group),身份与访问管理服务 (IAM) 和 EFS 独特的接入点 (Access Point) 机制,简化权限控制的配置工作,并进行细粒度的权限管理和审计。
相关文章