【AWS】Amazon S3にSFTPでアクセスしたい(Mountpoint for Amazon S3)
はじめに
S3バケットへのSFTP接続をする手段として、「AWS Transfer for SFTP」が用意されていますが、若干料金が高いです。なるべくコストを抑えつつ実現する方法を模索していたところ、「Mountpoint for Amazon S3」が使えそうだったので、検証してみます。
AWS Transfer for SFTP とは
SFTP、FTPS、FTP プロトコルを使用して、Amazon S3 および Amazon EFSに直接ファイル転送できます。AWSのマネージドサービスのため、サーバ管理は不要、可用性とパフォーマンスについても申し分ないでしょう。
コストが許すならこちらを使いたいところですが、個人的には安くない料金です。
2023年9月時点の料金で月額を試算すると以下のようになります。
0.30 USD × 24 時間 × 30 日 × 147 円 = 31,752 円
さらにデータ転送(アップロード、ダウンロードともに)GBあたり 0.04USD かかるため、実際にはもう少し料金上乗せになります。
Mountpoint for Amazon S3 とは
S3バケットをローカルファイルシステムとしてマウントするためのファイルクライアントです。オープンソースですが、awslabsが開発しているため安心感があります。自力でSFTPサーバを立て、S3バケットをマウントすることで、料金を節約できそうです。
今回はこれを使用させていただきます。
概要
今回検証する環境は以下の通りです。
- EC2でSFTPサーバを準備します。
- Mountpoint for Amazon S3をインストールし、S3バケットをマウントします。
- クライアントからSFTPでアクセスし、ファイルがアップロードできることを確認します。
作ってみた
前提として以下のセットアップは済ませている状態とします。
- AWSアカウントの作成、権限設定など
- S3バケットの作成
- VPCエンドポイント作成(VPC内からS3にアクセスできるようになっていること)
- セキュリティグループ設定(クライアントからSSH接続可能になっていること)
EC2を起動
今回AMIは Amazon Linux 2023 、アーキテクチャは 64 ビット (Arm) を選択しました。
インスタンスタイプは t4g.small を選択しました。
IAM ロールの設定
EC2にS3を使用する権限を与えます。
EC2の「アクション」 > 「セキュリティ」 > 「IAMロールを変更」からIAMロールを変更します。
ここでは許可ポリシーに「AmazonS3FullAccess」を設定した、IAMロールを設定しました。
SFTPサーバの設定
ここからはEC2にログインして作業します。
SFTPユーザ作成
以下のコマンドでSFTP接続用ユーザを作成します。
sudo useradd sftpuser
sudo passwd sftpuser
SFTP接続設定
以下のコマンドでsshd_configを編集します。
sudo vi /etc/ssh/sshd_config
ファイルの一番下に以下の記述を追加し、パスワード認証を許可する設定を行います。
Match User sftpuser
PasswordAuthentication yes
sshdを再起動します。
sudo systemctl restart sshd
Mountpoint for Amazon S3をインストール
GithubのGetting startedを参考にインストールします。
今回はarm64を選択したため、コマンドもarm64を使用します。wget https://s3.amazonaws.com/mountpoint-s3-release/latest/arm64/mount-s3.rpm
sudo yum install -y ./mount-s3.rpm
S3バケットをマウントする
ここからはSFTPユーザでログインして作業します。
ユーザディレクトリに移動しておきます。
su sftpuser
cd
マウント用ディレクトリを作成し、マウントします。
mkdir mountdir
mount-s3 [バケット名] mountdir
以上で設定は完了です。
SFTPで接続確認
WinSCPで接続してみます。
転送プロトコルにSFTPを選択します。
ホスト名にパブリック DNS名を入力し、ユーザ名、パスワードを入力します。
接続できれば、SFTP設定は問題ありません。
バケットをマウントしたディレクトリmountdir内にファイルをコピーしてみます。
S3バケットの中を確認してみると
コピーできていますね。
まとめ
Mountpoint for Amazon S3を使用して、S3をマウントしたSFTPサーバを構築できました。少しでも節約したい方の参考になれば幸いです。
参考:SFTPユーザをSFTP接続のみに限定する場合は、sshd_configを以下のようにすることで可能です。
Match User sftpuser
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
PasswordAuthentication yes
Discussion