AWS Transfer Family を使用して Amazon S3 にファイルを転送してみた。

2023.07.12

概要

AWS Transfer Family を使用すると、プロトコル経由で Amazon S3 または Amazon EFS との間でファイルを安全に転送できます。ファイル転送には、OpenSSH、WinSCP、Cyber​​duck などの標準 FTP クライアントを使用できます。

AWS Transfer Family でサポートされているプロトコル:

  • SFTP (SSH File Transfer Protocol)
  • AS2 (Applicability Statement 2)
  • FTPS (File Transfer Protocol Secure)
  • FTP (File Transfer Protocol)

この記事では、SFTP 対応サーバーを作成し、OpenSSH クライアントを使用して Amazon S3 にファイルを転送しました。

 

やってみた

前提条件

  • Amazon S3 バケットを作成します。

IAM ロールの作成

  • 次の権限を持つ IAM ポリシーを作成しておきます。このポリシーは、Amazon S3 バケット内のオブジェクトへの読み取り/書き込みアクセスを許可します。

 

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "01",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::<bucket-name>"
            ]
        },
        {
            "Sid": "02",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::<bucket-name>/*"
        }
    ]
}

 

  • 上記のポリシーで IAM ロールを作成しておきます。
    • Trusted entity type: AWS Service
    • Use case: Transfer
    • Permissions: 上記の手順で作成したポリシー。

 

AWS Transfer Family でサーバーを作成する

  • AWS Transfer Family コンソールで [Create server] を選択しておきます。

 

  • プロトコルとして [SFTP]を選択し、[Next]を選択しておきます。

 

  • [Identity Provider]として [Service managed] を選択し、[Next] を選択しておきます。これにより、ユーザーは Transfer Family サービス内で管理されます。

 

  • [Endpoint type] として [Publicly accessible] を選択し、[Custom hostname] で [None] を選択しておきます。

 

  • ドメインとして [Amazon S3] を選択しておきます。

 

  • ロギング設定は [Create a new log group] を選択して、他の設定はデフォルトのままにしてサーバーを作成しておきます。

 

  • サーバーが作成されるとステータスが [Online] に変わります。

 

サーバーにユーザーを追加する

  • ユーザーを追加するサーバーを選択し、[Add user] を選択しておきます。

 

  • ユーザー名を入力し、前の手順で作成したロールを選択します。 [Home directory]として作成したS3バケットを選択しておきます。[Restricted] を有効にして、ユーザーがそのフォルダーの外部にはアクセスできないようにします。

 

  • SSH公開キーを入力し、ユーザーを追加しておきます。

 

OpenSSH クライアントを使用してファイルを Amazon S3 に転送する

  • 次のコマンドを実行して接続を確立します。実行すると、sftp プロンプトが表示されます。
aws related % sftp -i <SSH-private-key> <User-name>@<service-endpoint>

##Output
Connected to s-00000000000000.server.transfer.us-east-1.amazonaws.com.

 

  • 「put」および「get」コマンドを使用して、Amazon S3 との間でファイルを転送できます。
##Command to transfer file to S3
sftp> put test.txt            

##Output
Uploading test.txt to /test.txt
test.txt                                      100%  206     1.0KB/s   00:00 

##Command to get file from S3
sftp> get test.txt

 

  • S3バケットにファイルが転送されたことが確認できます。

 

まとめ

Transfer Family は、AWS ストレージ サービスへのファイル転送の移行を簡素化します。AWS Transfer Family を使用すると、ファイル転送プロトコルのインフラストラクチャを実行する必要はありません。この記事ではS3へのファイル転送を試しましたが、EFSへのファイル転送も可能です。

Reference: Getting started with AWS Transfer Family