8
2

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 - SFTPでS3へファイル転送

Last updated at Posted at 2025-11-28

はじめに

今回はAWS Transfer FamilyのSFTPサーバーを使ってS3にファイルを転送するハンズオン記事を書きました。実務では使っていないのですが、以前SAA試験の対策でサービスの理解を深めるために作成した内容です。

今回やること

AWS Transfer Familyを使ってフルマネージドのSFTPサーバーを構築し、ローカルからAmazon S3にファイルをアップロードする仕組みを作ります。

また、AWS Transfer Familyには、3つのエンドポイントタイプがありますが、今回はVPCの設定が不用でインターネット経由でSFTPプロトコルを使ってファイル転送可能な「パブリックエンドポイント」を利用します。

作成するリソースは以下の通りです。

作成するもの 名前 目的
S3バケット saa-sftp-server-bucket SFTP転送ファイルの保存先として
IAMポリシー SftpS3UserAccessPolicy S3バケット内の特定のパスへの操作権限を定義
IAMロール SftpS3UserAccessRole Transfer FamilyがS3にアクセスするために引き受ける権限。Transfer Familyユーザーにアタッチする。
Transfer Familyサーバー (自動) SFTP経由でファイルを受け入れ、S3と連携する仮想サーバー
Transfer Familyユーザー sftp-test-user01 SFTP接続を行うクライアントユーザー
SSHキーペア(ローカル) sftp_user_key SFTPユーザー認証用の公開鍵と秘密鍵。ローカルで生成し、Transfer Familyに公開鍵を登録する。

AWS Transfer Family とは

ハンズオンの前にAWS Transfer Familyの概要を簡単にまとめます。

AWS Transfer Familyとは、ファイル転送プロトコル(SFTP、FTPS、FTP、AS2)経由でAWSストレージサービス(Amazon S3、Amazon EFS)との間でファイルを転送できる、フルマネージド型のサービスです。

AWS Transfer Familyでは、選択したプロトコルに応じたサーバーとエンドポイントが自動的に作成・管理されるため、自分でEC2を構築してSFTPサーバーを運用するといった必要がなく、安全なファイル転送環境を簡単に利用することが可能になります。

📦 1. S3バケットの作成

ここから、AWSコンソールを開いて手を動かしていきます。

まずはファイル転送先の箱を作ります。
S3 > バケット を開き、バケットを作成してください。設定は全てデフォルトの選択肢でOKです。(バケット名はsaa-sftp-server-bucketとする)

🔐 2. IAMロール作成

AWS Transfer Familyは自分自身ではS3を操作する権限を持たないため、まず最初にS3へのアクセス権限を定義するIAMポリシーと、それをTransfer Familyが利用できるようにするIAMロールを作成する必要があります。

2-1. ポリシー作成

IAM > ポリシー > ポリシーの作成 を開き、次のJSONでポリシーを作成します。(ポリシー名: SftpS3UserAccessPolicy

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::saa-sftp-server-bucket",
            "Condition": {
                "StringLike": {
                    "s3:prefix": "sftp-test-user01/*"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::saa-sftp-server-bucket/sftp-test-user01/*"
        }
    ]
}
  • s3:ListBucket: S3バケット全体の情報を取得する操作。ResourceはバケットARN全体 (:::saa-sftp-server-bucket) に指定し、Conditionでユーザー名プレフィックス配下しか見えないように制限します。
  • s3:GetObject/PutObjectなど: 個々のファイル操作です。Resourceはユーザー専用のパス(:::saa-sftp-server-bucket/sftp-test-user01/*) に指定することで、他のユーザーのファイルへのアクセスを防いでいます。

2-2. ロール作成

IAM > ロール > ロールの作成 を開きます。

  • Step1:
    • 信頼されたエンティティタイプ: 「AWSのサービス」を選択
    • ユースケース: 「Transfer」を選択
  • Step2:
    • 先ほど作成したポリシー SftpS3UserAccessPolicy を選択しアタッチ
  • Step3:
    • SftpS3UserAccessRoleと入力し、ロールを作成

🖥️ 3. SFTPサーバーの作成

AWS Transfer Familyサービスに移動し、「サーバーの作成」をクリックします。

  • Step1:
    • プロトコル:「SFTP」を選択
  • Step2:
    • IDプロパイダーのタイプ:「サービスマネージド」を選択
  • Step3:
    • エンドポイントのタイプ:「パブリック」を選択
  • Step4:
    • ドメイン:「Amazon S3」 を選択
  • Step5:
    • 追加の詳細を設定: 全てデフォルトのまま進む
  • Step6:
    • 以上の設定項目を確認して「サーバーを作成」をクリック

👤 4. ユーザーの追加

サーバー作成後に接続用のユーザーを個別に登録する必要があります。ユーザーごとに認証情報やアクセス可能なS3 パスを設定しできます。

4-1. SSHキーペアの準備

SFTP接続には公開鍵認証を使用するため、まずクライアント側でSSH キーペアを作成しておきます。

# RSA キーペアを作成
ssh-keygen -t rsa -b 4096 -f ~/.ssh/sftp_user_key

作成された公開鍵(.pubファイルの内容)をクリップボードにコピーしておきます。

# ターミナルで公開鍵の内容を確認・コピー (Macの場合)
cat ~/.ssh/sftp_user_key.pub | pbcopy

4-2. ユーザーの追加

AWSコンソールに戻り、作成したサーバーの詳細画面を開き「ユーザーを追加」に進みます。

項目 設定値 SAAポイント/注意点
ユーザー名 sftp-test-user01 IAMポリシーでこのユーザー名を前提に設定しています。
ロール SftpS3UserAccessRole 先ほど作成したロールを指定します。
ポリシー なし ロールにポリシーが含まれているため不要です。
ホームディレクトリ /saa-sftp-server-bucket/sftp-test-user01/ IAMポリシーで制限したパスと完全に一致させます。これにより、ユーザーは自分のホームディレクトリの外に出られなくなります。
SSH パブリックキー (先ほどコピーした公開鍵の内容) 作成したキーペアの公開鍵を貼り付けます。

設定を確認し、ユーザーを作成します。

📡 5. SFTP接続 & ファイル転送

まずはSFTP接続情報を確認します。

  1. Transfer Family > サーバー > {サーバーID} の画面を開く
  2. エンドポイントの詳細にある「エンドポイント」 を確認
    s-xxxxxxxxx.server.transfer.ap-northeast-1.amazonaws.com のような形)

次に、ローカル環境のターミナルやSFTPクライアントソフト(WinSCP、Cyberduckなど)を使用して接続します。ここではmacのターミナルでsftpコマンドを使います。

# ターミナルでの接続コマンド例
sftp -i ~/.ssh/sftp_user_key sftp-test-user01@<サーバーのエンドポイント>

例として、デスクトップにあるtest.htmファイルを次のコマンドでS3にアップロードします。

sftp> lcd ~/Desktop           # ローカルの作業ディレクトリをデスクトップに変更
sftp> put test.html           # ローカルの test.html をS3にアップロード
sftp> ls                      # S3上に test.html が存在することを確認
sftp> exit                    # SFTPセッションを終了

AWS S3コンソールを開き、saa-sftp-server-bucket/sftp-test-user01/ の中に test.html が格納されていることを確認できたら成功です!

image.png

🔥 注意点

最後に、不要なコストを避けるために、使い終わったらサーバーを「削除」してください。
サーバーを停止しただけでは料金は発生し続けるため注意が必要です!

image.png

※ ちゃんと削除すれば、今回のハンズオン内容だけで発生する通信コストはほぼ無視できるレベルで小さいです

参照:

参考

「AWS Black Belt Online Seminar AWS Transfer Family FTP/FTPS/SFTP によるデータ転送」

8
2
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
8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?