0
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?

AWS Transfer Familyを用いたS3バケットへのファイル転送(SFTP)

Last updated at Posted at 2025-07-21

はじめに

こんにちは、エンジニアの わた です。
今回は、業務で AWS Transfer Family を使う機会があったので、
その復習もかねて備忘録としてまとめてみました。

初学者の方にもわかりやすいように、できるだけ手順を丁寧にわかりやすく記載していきます。

AWS Transfer Family とは

AWS Transfer Family とは、AWS上のストレージ(S3やEFSなど)に対して、ファイル転送を簡単に実現できるマネージドサービスです。
対応しているプロトコルは、SFTP・FTP・FTPS・AS2 などがあり、さまざまなシステムとの連携に活用できます。
今回はこの Transfer Family を使って、S3 バケットへのファイル転送環境を構築してみます。

アーキテクチャ(概要図)

EC2 から Transfer Family のエンドポイントを通じて、S3 バケットへアクセスするという、シンプルな構成を試してみました。
image.png

触ってみる

流れ

今回は、以下の流れに沿って構築を進めていきます。

No. 目次
1 S3バケットの作成
2 IAM Roleの作成
3 Security Group の作成
4 Transfer Familyの作成
5 SSHキーの作成
6 ユーザの作成
7 動作確認

1. S3バケットの作成

Transfer Family を経由してファイルを保存するための S3 バケットを作成します。
バケット名だけ指定し、それ以外の設定はすべてデフォルトのままとします。
image.png
image.png
image.png

バケットが無事に作成されたことを確認できました。
image.png

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}/*"
        }
    ]
}     

image.png
image.png

ロールの作成

信頼ポリシーを設定したロールを作成していきます。

信頼ポリシー
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "transfer.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

image.png
image.png

先ほど作成したアクセスポリシーをロールにアタッチします。
image.png

ロールに名前を付けて作成します。
image.png

3. Security Groupの作成

今回は SFTP を使い、VPC 内からのみアクセスできるように設定します。
そのため、セキュリティグループのインバウンドルールでは、自分の VPC からのポート 22 へのアクセスだけを許可しています。
image.png
Transfer Family から外部への通信は発生しないため、アウトバウンドルールの設定は特に必要ありません。

4. Transfer Familyの作成

メインとなる Transfer Family の作成を行います。
AWS マネジメントコンソールの検索窓に「Transfer Family」と入力して検索してください。
image.png

「サーバを作成」から順に設定を進めていきます。
image.png

プロトコルの選択

Transfer Family で使用するファイル転送プロトコルは、4つの中から選べます。
複数選択も可能です。
今回は、その中から「SFTP」を選択しました。
image.png

IDプロバイダーの選択

Transfer Family では、S3 バケットへアクセスする際のユーザー管理や認証方法を選べます。
今回は Transfer Family の「サービスマネージド」機能を使って、
ユーザー管理と認証をシンプルに行っていきます。
image.png

エンドポイントの選択

エンドポイントでは、Transfer Family へのアクセス方法を設定できます。
アクセス方法は大きく分けて2つあり、
・ パブリックからのみアクセス可能にする方法
・ VPC 内(+パブリックも可)からアクセスさせる方法
のどちらかを選べます。

今回は、VPC 内からのみアクセスできるように設定したいため、
「VPC 内でホスト」かつ「アクセス:内部」を選択しました。
さらに、配置する VPC と AZ を指定し、先ほど作成したセキュリティグループをアタッチしています。
image.png
image.png

ドメインを選択

ここでは、Transfer Family を経由してファイルを保存するストレージを選べます。
冒頭でお伝えしたように、選択肢は「S3 バケット」と「EFS」の2つです。

今回は S3 バケットを使って進めていきます。
image.png

追加の詳細の設定

ここでは、ログの記録先やファイルがアップロードされたときに実行するワークフローの設定、暗号化など、さまざまなオプションを設定できます。
「ログの記録」で「新しいロググループの作成」を選ぶと、CloudWatch のロググループが自動で作成されます。

今回は特にオプションは触らず、すべてデフォルトの設定のままで進めます。
image.png
image.png
image.png
image.png

確認と作成

ここまで設定した内容を確認し、問題がなければ「作成」をクリックして進めます。
image.png
image.png

無事に作成が完了しました。
「状態」は最初「開始中」になっていますが、しばらくすると「オンライン」に変わります。
image.png
1分もかからず、すぐにオンラインになりました。
image.png

ここまでは 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 にチェックを入れて、「ユーザーの追加」をクリックしてください。
image.png

「ユーザ名」を設定し、先ほど作成したロールと S3 バケットを紐づけます。
今回の例では、ユーザ名を「sftp-user」にすると、SFTP 接続時に「sftp-bucket-20250719」という S3 バケットにアクセスする形になります。
image.png

「SSHパブリックキー」欄に、先ほど作成した公開鍵の内容を貼り付けます。
image.png

無事に作成できました。
SSHパブリックキーには必ず公開鍵の内容を貼り付けてください。
秘密鍵を貼るとエラーになるだけでなく、セキュリティ面でもよくないので気をつけましょう。
image.png

7. 動作確認

自分のPCから Transfer Family に SFTP 接続を試してみます。
接続先は Transfer Family のエンドポイントです。
まずは「エンドポイントの詳細」から、「エンドポイントのタイプ」を選択しましょう。
image.png
エンドポイントのIPアドレスを確認する。image.png

確認ができたら、接続したい EC2 にログインして、以下のコマンドを実行します。

sftp -i {秘密鍵のパス} {SFTPユーザ名}@{エンドポイントのIPアドレス}
sftp -i /home/ec2-user/.ssh/id_rsa sftp-user@192.168.100.154

接続時に「接続してもよいですか?」と確認されるので、「yes」と入力します。
これで無事、SFTP 接続ができました。
image.png

ファイルを転送してみる

EC2 上で、「test」と書かれたテキストファイルを作成します。

vi /home/ec2-user/test.txt

image.png

再度 SFTP 接続を行い、put コマンドを使って先ほど作成したファイルを転送します。

put /home/ec2-user/test.txt

無事にファイルの転送ができました。
ls コマンドで確認したところ、ちゃんとアップロードされていることも確認できました。
image.png

AWS コンソールからも、S3 バケットにファイルが配置されたことを確認できました。
image.png

まとめ

今回は、AWS Transfer Family を使って、EC2 から S3 バケットへ SFTP でファイルを転送する構成を試してみました。
構築も非常にシンプルで、わざわざ専用の SFTP サーバを立てる必要がない点がとても魅力的でした。
Transfer Family を使えば、マネージドでセキュアなファイル転送環境を簡単に構築できるため、運用の手間も大きく軽減できます。

この記事は、特に AWS 初学者の方にとって少しでも参考になるよう、手順を丁寧にまとめたつもりです。
どなたかの学びや、今後の環境構築の助けになれば嬉しいです。

0
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
0
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?