EC2にS3をマウントする方法

| 3 min read
Author: nozomu-tanaka nozomu-tanakaの画像

FTPサーバーとして使用しているEC2がファイルを受け取った際に、S3トリガーでLambdaを動かすようにしたときのメモです。

AWS Transfer for SFTPも検討しましたが、コストの問題からEC2にS3をマウントする方式を採用しました。

以下、その手順です。

参考

#

Amazon Linux2でIAMロールを使ったs3fsの設定をやってみた

AWS Transfer Family の料金

1.IAMロールに権限を追加

#

FTPサーバーとして使用するEC2がマウントするS3のファイルを読み書きできるよう、
EC2のIAMロールにS3への読み書き権を追加しておきます。

【追加したIAMポリシー】

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::{マウントするバケット名}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObjectVersion",
                "s3:DeleteObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::{マウントするバケット名}/*"
            ]
        }
    ]
}

2.s3fsのインストール

#

EC2にS3をマウントできるようにするため、EC2にs3fsをインストールします。

以下をEC2のコマンドラインからroot権限で実行します。(sudo - root)

# yumアップデート(不要かも)
yum -y update
# s3fsのパッケージを入れるためにライブラリを追加
amazon-linux-extras install -y epel
# s3fsインストール
yum -y install s3fs-fuse
# バージョン確認
s3fs --version

3.S3のマウント

#

以下の手順でS3をマウントします。

  • バケットのルートからのみマウント可能です
  • なぜかS3バケット作成後1日待たないとマウントできないことがありました
# S3のマウントポイントを作成
mkdir /mnt/sftp
# EC2再起動時もS3がマウントされるよう/etc/fstabに以下を追加
# umaskを指定しないとftpユーザーが読み書きできない
echo "backet1 /mnt/sftp fuse.s3fs _netdev,allow_other,iam_role=auto,umask=022 0 0" | sudo tee -a /etc/fstab
# マウント実行
mount -a
# マウント確認
df -h

以降の手順はSFTPを使用しない場合は不要です。

4.SSHの設定

#

FTPユーザーのホームディレクトリがS3のマウントポイント以下になるようにします。

参考:セキュアなSSHサーバの設定

# FTPユーザーのホームディレクトリ作成
mkdir /mnt/sftp/home
# グループ追加
groupadd -g 510 sftps3users

sftps3usersに属するユーザーのホームディレクトリがS3のマウントポイント以下になるよう/etc/ssh/sshd_configに以下を追加します。

Match Group sftps3users
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no
    PermitRootLogin no
    PasswordAuthentication yes
    PubkeyAuthentication yes

SSHを再起動して設定を有効化します。

systemctl restart sshd.service

5.FTPユーザー追加

#

以下の手順でFTPユーザーを追加します。

# FTPユーザー(ftpuser1)追加
useradd -g sftps3users -d /mnt/sftp/home/ftpuser1 -s /sbin/nologin ftpuser1
# homeをrootでマウントできるようにする
chown root:root /mnt/sftp/home/ftpuser1
# 受信フォルダ(recv)作成
mkdir /mnt/sftp/home/ftpuser1/recv
chown ftpuser1 /mnt/sftp/home/ftpuser1/recv
chmod 770 /mnt/sftp/home/ftpuser1/recv
# パスワード(pass1)設定
echo ftpuser1:pass1 | chpasswd

6.FTP接続確認

#

FTP接続し、recvフォルダ以下のみ書き込みできることを確認します。

sftp ftpuser1@ftp-server1
パスワード:***

豆蔵では共に高め合う仲間を募集しています!

recruit

具体的な採用情報はこちらからご覧いただけます。