はじめに
こんにちは、エンジニアの わた です。
今回は、業務で AWS Transfer Family を使う機会があったので、
その復習もかねて備忘録としてまとめてみました。
初学者の方にもわかりやすいように、できるだけ手順を丁寧にわかりやすく記載していきます。
AWS Transfer Family とは
AWS Transfer Family とは、AWS上のストレージ(S3やEFSなど)に対して、ファイル転送を簡単に実現できるマネージドサービスです。
対応しているプロトコルは、SFTP・FTP・FTPS・AS2 などがあり、さまざまなシステムとの連携に活用できます。
今回はこの Transfer Family を使って、S3 バケットへのファイル転送環境を構築してみます。
アーキテクチャ(概要図)
EC2 から Transfer Family のエンドポイントを通じて、S3 バケットへアクセスするという、シンプルな構成を試してみました。
触ってみる
流れ
今回は、以下の流れに沿って構築を進めていきます。
No. | 目次 |
---|---|
1 | S3バケットの作成 |
2 | IAM Roleの作成 |
3 | Security Group の作成 |
4 | Transfer Familyの作成 |
5 | SSHキーの作成 |
6 | ユーザの作成 |
7 | 動作確認 |
1. S3バケットの作成
Transfer Family を経由してファイルを保存するための S3 バケットを作成します。
バケット名だけ指定し、それ以外の設定はすべてデフォルトのままとします。
2. IAM Roleの作成
Transfer Family のユーザーが S3 バケットを操作できるように、ロールを作成します。
具体的には、S3 へのアクセスを許可するための「信頼ポリシー」と「アクセス権限ポリシー」を作成し、それらをロールにアタッチします。
アクセス権限ポリシーの作成
${transfer:HomeBucket} は、実際に作成したバケット名に書き換えて使用してください。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowListingOfUserFolder",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::${transfer:HomeBucket}"
]
},
{
"Sid": "HomeDirObjectAccess",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject",
"s3:DeleteObjectVersion",
"s3:GetObjectVersion",
"s3:GetObjectACL",
"s3:PutObjectACL"
],
"Resource": "arn:aws:s3:::${transfer:HomeDirectory}/*"
}
]
}
ロールの作成
信頼ポリシーを設定したロールを作成していきます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "transfer.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
3. Security Groupの作成
今回は SFTP を使い、VPC 内からのみアクセスできるように設定します。
そのため、セキュリティグループのインバウンドルールでは、自分の VPC からのポート 22 へのアクセスだけを許可しています。
Transfer Family から外部への通信は発生しないため、アウトバウンドルールの設定は特に必要ありません。
4. Transfer Familyの作成
メインとなる Transfer Family の作成を行います。
AWS マネジメントコンソールの検索窓に「Transfer Family」と入力して検索してください。
プロトコルの選択
Transfer Family で使用するファイル転送プロトコルは、4つの中から選べます。
複数選択も可能です。
今回は、その中から「SFTP」を選択しました。
IDプロバイダーの選択
Transfer Family では、S3 バケットへアクセスする際のユーザー管理や認証方法を選べます。
今回は Transfer Family の「サービスマネージド」機能を使って、
ユーザー管理と認証をシンプルに行っていきます。
エンドポイントの選択
エンドポイントでは、Transfer Family へのアクセス方法を設定できます。
アクセス方法は大きく分けて2つあり、
・ パブリックからのみアクセス可能にする方法
・ VPC 内(+パブリックも可)からアクセスさせる方法
のどちらかを選べます。
今回は、VPC 内からのみアクセスできるように設定したいため、
「VPC 内でホスト」かつ「アクセス:内部」を選択しました。
さらに、配置する VPC と AZ を指定し、先ほど作成したセキュリティグループをアタッチしています。
ドメインを選択
ここでは、Transfer Family を経由してファイルを保存するストレージを選べます。
冒頭でお伝えしたように、選択肢は「S3 バケット」と「EFS」の2つです。
追加の詳細の設定
ここでは、ログの記録先やファイルがアップロードされたときに実行するワークフローの設定、暗号化など、さまざまなオプションを設定できます。
「ログの記録」で「新しいロググループの作成」を選ぶと、CloudWatch のロググループが自動で作成されます。
今回は特にオプションは触らず、すべてデフォルトの設定のままで進めます。
確認と作成
ここまで設定した内容を確認し、問題がなければ「作成」をクリックして進めます。
無事に作成が完了しました。
「状態」は最初「開始中」になっていますが、しばらくすると「オンライン」に変わります。
1分もかからず、すぐにオンラインになりました。
ここまでは S3 バケットを使うことにしましたが、
Transfer Family ではユーザーごとに使うバケットを紐づけるので、
どのバケットを使うかは、このあとの「ユーザーの作成」で決めていきます。
5. SSHキーの作成
ここでは、EC2(Linux)から SFTP 接続をするために、EC2 上で以下のコマンドを実行して SSH キーを作成します。
ssh-keygen -t rsa -b 2048
実行すると、以下の3つのファイルが作成されます。
・ authorized_keys
・ id_rsa
・ id_rsa.pub
id_rsa が秘密鍵、id_rsa.pub が公開鍵になります。
この公開鍵は、後ほどユーザー作成時に Transfer Family に登録します。
6. ユーザの作成
Transfer Family の作成が完了したので、次は実際に使うユーザーを作成していきます。
作成した Transfer Family にチェックを入れて、「ユーザーの追加」をクリックしてください。
「ユーザ名」を設定し、先ほど作成したロールと S3 バケットを紐づけます。
今回の例では、ユーザ名を「sftp-user」にすると、SFTP 接続時に「sftp-bucket-20250719」という S3 バケットにアクセスする形になります。
「SSHパブリックキー」欄に、先ほど作成した公開鍵の内容を貼り付けます。
無事に作成できました。
SSHパブリックキーには必ず公開鍵の内容を貼り付けてください。
秘密鍵を貼るとエラーになるだけでなく、セキュリティ面でもよくないので気をつけましょう。
7. 動作確認
自分のPCから Transfer Family に SFTP 接続を試してみます。
接続先は Transfer Family のエンドポイントです。
まずは「エンドポイントの詳細」から、「エンドポイントのタイプ」を選択しましょう。
エンドポイントのIPアドレスを確認する。
確認ができたら、接続したい EC2 にログインして、以下のコマンドを実行します。
sftp -i {秘密鍵のパス} {SFTPユーザ名}@{エンドポイントのIPアドレス}
sftp -i /home/ec2-user/.ssh/id_rsa sftp-user@192.168.100.154
接続時に「接続してもよいですか?」と確認されるので、「yes」と入力します。
これで無事、SFTP 接続ができました。
ファイルを転送してみる
EC2 上で、「test」と書かれたテキストファイルを作成します。
vi /home/ec2-user/test.txt
再度 SFTP 接続を行い、put コマンドを使って先ほど作成したファイルを転送します。
put /home/ec2-user/test.txt
無事にファイルの転送ができました。
ls コマンドで確認したところ、ちゃんとアップロードされていることも確認できました。
AWS コンソールからも、S3 バケットにファイルが配置されたことを確認できました。
まとめ
今回は、AWS Transfer Family を使って、EC2 から S3 バケットへ SFTP でファイルを転送する構成を試してみました。
構築も非常にシンプルで、わざわざ専用の SFTP サーバを立てる必要がない点がとても魅力的でした。
Transfer Family を使えば、マネージドでセキュアなファイル転送環境を簡単に構築できるため、運用の手間も大きく軽減できます。
この記事は、特に AWS 初学者の方にとって少しでも参考になるよう、手順を丁寧にまとめたつもりです。
どなたかの学びや、今後の環境構築の助けになれば嬉しいです。