3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

EFSのアクセスポイントについて色々試してみた

Posted at

はじめに

こんにちは!社会人一年目?のタレカツです!

今回はEFSのアクセスポイントについて、学習したので備忘録として残しました。いくつか設定を変更して、EC2からのマウントした際の検証を行いました。すでにいくつかやられているような記事もありましたので、できるだけほかの条件で試したいと思います。

EFSとは

Elastic File Systemの略称で、NFSプロトコルを用いた、ファイルストレージを提供するサービスです。
NFSのアクセスはLinuxのユーザ管理で用いられる、User ID(uid)やGroup ID(gid)に則ってアクセス権を判断します。アクセスポイントの設定で、uidやgidの設定項目があったので、EC2側でユーザを作成して、いくつかの条件でアクセスの検証を行いたいと思います。

EFS設定のPosixユーザーとは

PosixとはUNIX系/Linux系のOSで互換性を確保するための規格で、ユーザーの取り扱いなども規定されています。つまり、Linuxなどのユーザーの識別子であるuidやgidで、アクセスを制御する際の設定を行います。

ppt6547.pptm [自動保存済み].jpg

システム構成

画像のユーザやアクセスポイントなどは仮のものとなっています。システム構成としては、EC2で複数のユーザをUIDとGIDを指定して作成しました。EFSではアクセスポイントを変更していくつかの条件で試しています。

image.png

ルートディレクトリパス

アクセスポイントの基準のディレクトリを設定します。たとえば/をルートディレクトリパスとした場合、一番上の階層である青矢印で示した/を基準としてマウントされます。また、/efs-point/を設定した場合/の一つ下の階層のを先頭としてマウントされます。
つまり、/でマウントした場合は下の図の二つのディレクトリは見えますが、/efs-point1/で設定した場合は、/efs-point1/を基準として、その下の階層のディレクトリやファイルしか扱えません。

image.png

POSIXユーザー

指定したUIDとGIDを用いてマウントを行います。この際に、使用されるUIDとGIDはどのユーザでアクセスしようが、設定したUIDやGIDとして扱います。セカンダリグループIDについては、ユーザ管理においてUIDは一意な値となりますが、複数のグループとして扱うことができます。複数のグループでアクセス制御を行いたい場合、必要になると思います。

image.png

ルートディレクトリ作成のアクセス許可

アクセスポイントを作成する際に、まだアクセスポイントのディレクトリがない場合に所有者のUIDと所有グループのGIDを設定して、パーミッションも設定を行い(例えば755)ディレクトリを作成します。

image.png

マウントしてみた

ルートディレクトリパスを/でマウント

とりあえず以下のようなアクセスポイントを作成して、マウントを行いました。マウントの際は以下のマウントヘルパーを使うのがいいと思います。NFSクライアントを使用しても大丈夫ですが、ヘルパーを使った方が楽に適切なオプションでマウントしてくれると思います。

image.png

マウントポイントは以下のように設定して、マウントを行いました。efsヘルパーを使用した場合は、オプションは以下のような形でマウントされます。

[root@nfs-test1 work]# pwd
/work
[root@nfs-test1 work]# ls -l
total 0
drwxr-xr-x. 2 root root 6 Sep 18 13:31 mountpoint
[root@nfs-test1 work]# mount -t efs -o tls,accesspoint=fsap-xxxxxxxxxxxx fs-xxxxxxxxxxxx:/ mountpoint/
[root@nfs-test1 work]# ls -l
total 4
drwxr-xr-x. 2 root root 6144 Sep 19 18:31 mountpoint
[root@nfs-test1 mountpoint]# nfsstat -m
/work/mountpoint from 127.0.0.1:/
 Flags: rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,noresvport,proto=tcp,port=20590,timeo=600,retrans=2,sec=sys,clientaddr=127.0.0.1,local_lock=none,addr=127.0.0.1

マウントしたディレクトリに更にディレクトリを作成しました。

[root@nfs-test1 work]# cd mountpoint/
[root@nfs-test1 mountpoint]# ls
[root@nfs-test1 mountpoint]# mkdir efs-point1
[root@nfs-test1 mountpoint]# ls -l
total 4
drwxr-xr-x. 2 root root 6144 Sep 19 18:49 efs-point1

ただこの条件だとrootユーザの書き込み権限はあるものの、他のユーザでディレクトリの作成やファイルの作成などはできません。

[ec2-user@nfs-test1 ~]$ cd /work/mountpoint/
[ec2-user@nfs-test1 mountpoint]$ ls
[ec2-user@nfs-test1 mountpoint]$ pwd
/work/mountpoint
[ec2-user@nfs-test1 mountpoint]$ ls -l
total 4
drwxr-xr-x. 2 root root 6144 Sep 19 18:49 efs-point1
[ec2-user@nfs-test1 mountpoint]$ mkdir efs-point2
mkdir: cannot create directory ‘efs-point2’: Permission denied

一応このように、他のユーザでも書き込み権限を与えた場合可能ですが、わざわざ一番上の階層に権限を与えるのは良くないとは思います。

[root@nfs-test1 work]# chmod 777 mountpoint/
[root@nfs-test1 work]# ls -l
total 4
drwxrwxrwx. 3 root root 6144 Sep 19 18:49 mountpoint
[ec2-user@nfs-test1 mountpoint]$ ls -ld
drwxrwxrwx. 3 root root 6144 Sep 19 18:49 .
[ec2-user@nfs-test1 mountpoint]$ mkdir efs-point2
[ec2-user@nfs-test1 mountpoint]$ ls -l
total 8
drwxr-xr-x. 2 root     root     6144 Sep 19 18:49 efs-point1
drwxr-xr-x. 2 ec2-user ec2-user 6144 Sep 19 19:02 efs-point2

今のを図で表すと以下のような感じになります。ec2-userからの操作である赤矢印はその他のアカウントに当たるので、読み込みと実行権限のみ許可されています。

image.png

ルートディレクトリパスを/efs-point1でルートディレクトリ作成のアクセス許可を設定してマウント

次は以下のようなアクセスポイントを作成しました。前回までのディレクトリは削除しています。ルートディレクトリパスとルートディレクトリ作成のアクセス許可をec2-userのuidとgidになるように作成しています。
先ほどまでのマウントポイントは残したまま、マウントを行いました。

※前回マウントポイントから確認を行い、ディレクトリの作成は初めてアクセスポイントからマウントを行ったタイミングでディレクトリが作成されていました。

image.png

[root@nfs-test1 work]# mkdir mountpoint2
[root@nfs-test1 work]# ls
mountpoint  mountpoint2
[root@nfs-test1 work]# sudo mount -t efs -o tls,accesspoint=fsap-xxxxxxxxxxxx fs-xxxxxxxxxxxx:/ mountpoint2
[root@nfs-test1 work]# ls -l
total 8
drwxr-xr-x. 3 root     root     6144 Sep 19 19:31 mountpoint
drwxr-xr-x. 2 ec2-user ec2-user 6144 Sep 19 19:31 mountpoint2

このアクセスポイントに対して、マウントを行った場合uidが一致するec2-userでは書き込みができます。また、uid=2001で作成したnfs-test-user1では、書き込みはできません。rootは権限が強いため書き込みは可能です。

[ec2-user@nfs-test1 work]$ ls
mountpoint  mountpoint2
[ec2-user@nfs-test1 work]$ cd mountpoint2
[ec2-user@nfs-test1 mountpoint2]$ ls
[ec2-user@nfs-test1 mountpoint2]$ vi test
 [New] 1L, 5B written
[ec2-user@nfs-test1 mountpoint2]$ ls -l
total 4
-rw-r--r--. 1 ec2-user ec2-user 5 Sep 19 19:41 test
[nfs-test-user1@nfs-test1 ~]$ id
uid=2001(nfs-test-user1) gid=2001(nfs-test-group1) groups=2001(nfs-test-group1) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[nfs-test-user1@nfs-test1 ~]$ cd /work/mountpoint2/
[nfs-test-user1@nfs-test1 mountpoint2]$ ls
test
[nfs-test-user1@nfs-test1 mountpoint2]$ mkdir testdir
mkdir: cannot create directory ‘testdir’: Permission denied
[root@nfs-test1 work]# cd mountpoint2
[root@nfs-test1 mountpoint2]# ls
test
[root@nfs-test1 mountpoint2]# mkdir testdir
[root@nfs-test1 mountpoint2]# ls
test  testdir

今のを図で表すと以下のような感じになります。前回とは違い、ec2-userが所有者として作成されているので、赤矢印の操作は書き込みも可能です。
nfs-test-user1からの操作である黄矢印はその他のアカウントに当たるので、読み込みと実行権限のみ許可されています。

image.png

前の条件にPOSIXユーザを設定してみた

以下のようなアクセスポイントを設定しています。以前とルートディレクトリが同じであり、以前作成されたディレクトリも作成されたままになっております。

image.png

rootとec2-user,nfs-test-user1でそれぞれディレクトリを作成しました。作成されたディレクトリは所有者と所有グループは1000と1000となりました。

[nfs-test-user1@nfs-test1 mountpoint3]$ ls -l
total 12
drwxr-xr-x. 2 ec2-user ec2-user 6144 Sep 21 17:47 testdir-ec2
drwxr-xr-x. 2 ec2-user ec2-user 6144 Sep 21 17:47 testdir-nfs
drwxr-xr-x. 2 ec2-user ec2-user 6144 Sep 21 17:47 testdir-root

今のを図で表すと以下のような感じになります。今回はPOSIXユーザのuidとgidを1000にしているので、実際にec2-userが書いているわけではないですが、作成されるファイルやディレクトリec2-userが作った場合と同じuidとgidになります。

image.png

ケースを考えてマウントしてみた

既にあるディレクトリをルートディレクトリパスとして、ルートディレクトリ作成のアクセス許可を設定

こちら先ほどの/efs-point1/をディレクトリパスとして、ルートディレクトリ作成のアクセス許可をnfs-test-user1のuidで設定を行いました。ルートディレクトリ作成のアクセス許可はディレクトリがない場合に作成されるので、特に変化はなく所有者などの設定は同じようになりました。

image.png

mountpoint3は以前のアクセスポイントでマウントしたままになっていますが、変更はなく同じことが分かります。あくまでもディレクトリがない場合に所有者と所有グループ、パーミッションを設定するもので、以前からあるディレクトリの設定は変更されません。

[root@nfs-test1 work]# ls -l
drwxr-xr-x. 5 ec2-user ec2-user 6144 Sep 21 17:47 mountpoint3
drwxr-xr-x. 5 ec2-user ec2-user 6144 Sep 21 17:47 mountpoint4

image.png

新たにルートディレクトリ作成のアクセス許可を適当な値とし、別のuidとgidでPOSIXユーザを設定

ルートディレクトリ作成のアクセス許可を設定したルートディレクトリパスにディレクトリがない状態で、以下のように設定しました。

image.png

新たに指定したuidとgidでディレクトリが作成されていますが、POSIXユーザーで設定したuidでは、書き込みができないため、ディレクトリを作成できないことが分かります。

[root@nfs-test1 work]# ls -l
drwxr-xr-x. 2     2002     2002 6144 Sep 21 18:14 mountpoint5
[root@nfs-test1 work]# cd mountpoint5
[root@nfs-test1 mountpoint5]# mkdir testdir
mkdir: cannot create directory ‘testdir’: Permission denied

image.png

現在すでにあるディレクトリの下に、新たにルートディレクトリ作成のアクセス許可を別の所有者と所有者グループでアクセスポイントを設定

一つ前で作成したアクセスポイントの下にルートディレクトリを設定して、違う所有者ユーザーと所有者グループを設定しています。

image.png

mountpoint6にマウントしていますが、指定した値でディレクトリが作成されました。以前のアクセスポイントにもマウントしたままになっていますが、ディレクトリが作成されたことが分かります。

[root@nfs-test1 work]# ls -l
drwxr-xr-x. 2     2002     2002 6144 Sep 21 18:14 mountpoint5
drwxr-xr-x. 2 ec2-user ec2-user 6144 Sep 21 18:35 mountpoint6

[root@nfs-test1 work]# cd mountpoint5
[root@nfs-test1 mountpoint5]# ls -l
total 4
drwxr-xr-x. 2 ec2-user ec2-user 6144 Sep 21 18:35 efs1

所有者と所有者グループをec2-userと同じuidとgidにしているため、ec2-userで書き込みできました。

[ec2-user@nfs-test1 work]$ cd mountpoint6
[ec2-user@nfs-test1 mountpoint6]$ mkdir testdir
[ec2-user@nfs-test1 mountpoint6]$ ls -l
total 4
drwxr-xr-x. 2 ec2-user ec2-user 6144 Sep 21 18:36 testdir

image.png

同じルートディレクトリパスでルートディレクトリ作成のアクセス許可を設定したアクセスポイント2つ用意してマウントを行った

以下のようなアクセスポイントを二種類用意して、あえて後に作ったアクセスポイントefs-point3-2にマウントを行った。

image.png

image.png

一度書いた通りにルートディレクトリ作成のアクセス許可の設定で作成されるディレクトリは、初めのマウント時に作成されるため、両方のアクセスポイントでマウントしましたが、先に使用したアクセスポイントの設定でディレクトリが作成されることがわかりました。

[root@nfs-test1 work]# ls -l
drwxr-xr-x. 2 nfs-test-user1 nfs-test-group1 6144 Sep 21 18:52 mountpoint7
drwxr-xr-x. 2 nfs-test-user1 nfs-test-group1 6144 Sep 21 18:52 mountpoint8

image.png

終わりに

EFSを触ってみて、業務で使ったことがないのでどのような使われ方がされているかわからないが、アクセスポイントごとにPosixユーザを設定して接続する際のuidやgidを設定した方がいいように感じました。ただ、ルートディレクトリ作成のアクセス許可を設定するとパーミッションなどが設定されるが、最初にマウントしたときに作成されるので、最初に必要なディレクトリを作った上で、管理をしてもいいのではないかと感じました。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?