如何在EFS和EC2之间配置权限

问题描述

我正在尝试使用CloudFormation通过EFS存储设置mongod实例,但是在理解如何配置文件系统权限以使其正常工作时遇到了问题。

任何现有系统都不会访问EFS,因此我可以根据需要进行完全配置。

我试图以以下AWS示例作为起点...

https://docs.amazonaws.cn/en_us/AWSCloudFormation/latest/UserGuide/aws-resource-efs-accesspoint.html

AccesspointResource:
Type: 'AWS::EFS::Accesspoint'
Properties:
  FileSystemId: !Ref FileSystemResource
  PosixUser:
    Uid: "13234"
    Gid: "1322"
    SecondaryGids:
      - "1344"
      - "1452"
  RootDirectory:
    CreationInfo:
      OwnerGid: "708798"
      OwnerUid: "7987987"
      Permissions: "0755"
    Path: "/testcfn/abc"

在上面的示例中,他们似乎分配了任意的组和用户ID。上面给出了我要找出的内容,如何将EC2上的用户帐户配置为允许完全读/写访问?

我已经到了可以安装访问点的地步,但是我无法成功写入它。

我尝试过的...

在EC2上创建了一个新用户,并像这样分配了uid和gid ...

sudo usermod -u 13234 testuser1
sudo groupmod -g 1322 testuser1

然后我对那个用户进行sudo并尝试将文件写入安装点...不走运

然后我尝试像这样分配uid和gid ...

sudo usermod -u 7987987 testuser1
sudo groupmod -g 708798 testuser1

再次,写文件没有运气。

我真正要寻找的是最简单的配置,其中我可以让一个EC2用户具有对EFS文件夹的完全读/写访问权限。它将是新的EFS和新的EC2,因此,如果有帮助,我可以完全控制其设置。

可能的例子是假定我可能缺少一些有关NFS运作的现有知识。

解决方法

为了防万一,我最终像这样定义了我的访问点...

   AccessPointResource:
    Type: 'AWS::EFS::AccessPoint'
    Properties:
      FileSystemId: !Ref FileSystemResource
      PosixUser:
        Uid: "9960"
        Gid: "9940"
      RootDirectory:
        CreationInfo:
          OwnerGid: "9940"
          OwnerUid: "9960"
          Permissions: "0755"
        Path: "/mongo-db"

然后在mongodb服务器EC2的用户数据中,添加了此内容...

sudo groupadd --system --gid 9940 mongod
sudo useradd --system --uid 9960 --gid 9940 mongod

我实际上不确定上面的gid和uid是否需要与我在AccessPoint中定义的内容匹配,但这似乎使它更容易,因为服务器会将文件的所有者显示为“ mongod mongod “。

我像这样安装EFS ...

sudo mkdir -p /mnt/var/lib/mongo
sudo sudo mount -t efs -o tls,accesspoint=${AccessPointId} ${FileSystemId}: /mnt/var/lib/mongo

对于原始的AWS提供的示例,我仍然有些困惑。如果我的理解是正确的,似乎它将始终创建一个无法写入的根目录。

也许有人可以弄清楚在哪个目录中拥有与PosixUser中指定的目录不同的目录可能会有所帮助。