本記事では、オンプレミスからAWS Transfer FamilyでSFTPを利用してS3へファイルを送る方法を記載します。
はじめに
オンプレミスからSFTP*1を利用したファイル送信を行う手順について記載します。
AWS Transfer FamilyではAmazon S3とAmazon EFSにファイルを送信することが可能ですが、本記事ではAmazon S3へのファイル送信を行う手順とします。
AWS Transfer Familyとは
概要
AWS Transfer Family *2は、AWS ストレージサービスとの間でファイルを送受信できる安全な転送サービスです。
メリット
AWS Transfer Family では、高可用性のフルマネージド型のファイル転送サービスを利用できます。自動スケーリング機能が組み込まれているため、ファイル転送関連インフラストラクチャを管理する必要がなくなります。
また、SFTPなど企業間 (B2B) のファイル転送のための複数のプロトコルをサポートしているため、ステークホルダー、サードパーティーベンダー、ビジネスパートナー、お客様間でデータを簡単かつ安全に交換することができます。
料金
AWS Transfer Family で SFTPを利用する場合の料金です。時間単位の課金と容量単位の料金が発生します。
エンドポイントが作成されてから削除されるまで課金し続けるため、AWS Transfer Familyを停止しても課金されるので注意が必要です。本格利用される際は$0.3×24h×30日=$216となるため少なくとも月$216課金されます。
参考:マネージドファイル転送 – AWS Transfer Family の料金 – Amazon Web Services
設定方法
事前準備
主にAWS Transfer Familyを設定するにあたって必要なサービスは以下となります。
- VPC環境
- IAMロール
- Elastic IP
- CloudWatch Logsロググループ
- S3バケット
- SSHキー*5
手順
手順は大まかに以下となります。
- Amazon S3バケットの作成
- IAMロールの作成
- Amazon S3の許可
- CloudWatch Logsロググループ作成
- Transfer Family作成
- Transfer Familyユーザー作成
- SFTPサーバに接続
- putコマンドでファイルをアップロード
Amazon S3バケットの作成
ファイル転送先となるAmazon S3を作成します。設定項目は以下となります。(なお、キャプチャは例をもとに設定しておりますが、実際に作成される場合は要件にあった設定値を入力してください。)
設定項目 | デフォルト値 | 例 |
---|---|---|
バケット名 | - | test |
AWSリージョン | アジアパシフィック(東京) | アジアパシフィック(東京) |
オブジェクト所有者 | ACL無効(推奨) | ACL無効(推奨) |
ブロックパブリックアクセス設定 | パブリックアクセスをすべてブロック | パブリックアクセスをすべてブロック |
バケットのバージョニング*6 | 無効にする | 無効にする |
タグ | - | Name test |
暗号化キータイプ | SSE-S3 | SSE-S3 |
バケットキー | 有効にする | 有効にする |
オブジェクトロック*7 | 無効にする | 無効にする |
以上で、Amazon S3バケットの作成が完了です。
IAMロールの作成
Transfer Familyを設定するにあたって「Amazon S3許可のIAMロール」が必要となります。以下ポリシーでIAMロールを作成します。
赤字の「test」はバケット名となります。適宜変更して作成して下さい。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ReadWriteS3",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::aizawam-nxt-test"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectTagging",
"s3:DeleteObject",
"s3:DeleteObjectVersion",
"s3:GetObjectVersion",
"s3:GetObjectVersionTagging",
"s3:GetObjectACL",
"s3:PutObjectACL"
],
"Resource": [
"arn:aws:s3:::aizawam-nxt-test/*"
]
}
]
}
1. AWSコンソール「IAM」から「ポリシー」を選択して上記のJSONを入力します。
2. 左ペインからロールを選択して1で作成したIAMポリシーを選択します。
以上で、IAMロールの作成が完了です。
CloudWatch Logsロググループ作成
CloudWatch Logsロググループを作成します。(Transfer Family作成時に自動で生成することも可能です。*8)
設定項目は以下となります。キャプチャは例をもとに設定しておりますが、実際に作成される場合は要件にあった設定値を入力してください。
設定項目 | デフォルト値 | 例 |
---|---|---|
ロググループ名 | - | test |
保持期間の設定 | 失効しない | 失効しない |
KMS key ARN-option | - | - |
タグ | - | - |
以上で、CloudWatch Logsロググループ作成が完了です。
Transfer Family作成
設定項目は以下となります。キャプチャは例をもとに設定しておりますが、実際に作成される場合は要件にあった設定値を入力してください。
設定項目 | デフォルト値 | 例 |
---|---|---|
プロトコル | SFTP | SFTP |
ID プロバイダー | サービスマネージド | サービスマネージド |
エンドポイントタイプ | パブリックアクセス可能 | パブリックアクセス可能 |
カスタムホスト名 | なし | なし |
ドメイン | Amazon S3 | Amazon S3 |
CloudWatch ロググループ | 新しいロググループを作成 | 既存のロググループを選択(test) |
ログ記録ロール | - | - |
マネージドワークフロー | - | - |
マネージドワークフロー実行ロール | - | - |
暗号化アルゴリズムのオプション | TransgerSecurityPolicy-2020-06 | TransgerSecurityPolicy-2020-06 |
サーバーホストキー | - | - |
タグ | - | - |
表示バナー | - | - |
追加設定 | - | - |
1. インターネットを通った接続を行うにはSFTPかFTPSを選択する必要があります。ここでは「SFTP」にチェックを入れ「サービスマネージド*9」を選択します。
また、インターネットを通るので「パブリックアクセス可能」にチェックを入れます。ここではカスタムホスト名を「なし」で進めます。
2. 前述の手順で作成した「CloudWatch Logsロググループ」「S3許可用IAMロール」を選択します。他はデフォルトの設定で作成します。
以上で、Transfer Familyサーバの作成が完了です。
Transfer Familyユーザー作成
サービスマネージド型認証では、SSH キーを使用して SFTP ユーザーを認証します。
作成したTransfer Familyサーバを選択してユーザー「ユーザーを追加」から作成します。
以上で、Transfer Familyユーザーの作成が完了です。
SFTPサーバに接続
オンプレミス環境からコマンドを実行してSFTPサーバに接続します。
オンプレミス環境から以下コマンドを実行すると、SFTPプロンプトが開始されます。
サーバーのエンドポイントはコンソールから確認することができます。
以上で、SFTPサーバに接続が完了です。
putコマンドでファイルをアップロード
SFTPプロンプトで以下のコマンドを実行するとファイルをS3へアップロードすることができます。
以上で、putコマンドでファイルをアップロードが完了です。
注意事項
- Transfer Familyのサーバ作成時、カスタムホスト名を「なし」と選択すると、自動でVPCエンドポイントが作成されますが、VPCエンドポイントに紐づいたデフォルトのセキュリティグループでは通信ができないため、オンプレミスからのSSH(TCP 22番ポート)通信を追加する必要があります。
- SSHキーではなくID/PW認証も可能です。ただし、AWS Seacrets Manager,CloudFormation,API Gateway,Lambdaが必要となります。
AWS シークレットマネージャーを使用した AWS 転送ファミリーのパスワード認証を有効にする (更新) |AWS ストレージブログ (amazon.com)
おわりに
本記事では、SFTPを利用したファイル転送について記載しました。
AWS Transfer FamilyはSFTPの他にも、FTPS、FTP、AS2のプロトコルを利用することが可能です。AWS Storageサービスへの定期的な企業間ファイル転送を安全にスケールする際にぜひ参考にして頂ければと思います。
*1:SFTP:Secure Shell (SSH) File Transfer Protocol の略称で、インターネット経由の安全なデータ転送に使用されるネットワークプロトコルです。このプロトコルは、SSH のセキュリティ機能と認証機能に完全対応し、金融サービス、医療、メディアと娯楽、小売り、広告など、多種多様な業界のビジネスパートナー間のデータ交換で幅広く使用されています。
*2:AWS Transfer Family とは? - AWS Transfer Family (amazon.com)
*3:FTP/FTPSも同じ料金です
*4:FTP/FTPSも同じ料金です
*5:SSHキーについてはオンプレミスのサーバで取得する必要があります。手順では記載していないので各自で取得お願いいたします。
*6:バージョニング無効の場合すべ絵のオブジェクトは現行バージョンとして扱われ、現行バージョンオブジェクトを削除すると完全に削除された状態となります。有効化することで以前のバージョンという概念が生まれます。以前のバージョンオブジェクトが発生するケースとしては現行バージョンのオブジェクトが削除されたり変更が加えられた場合となります。
S3 バケットでのバージョニングの使用 - Amazon Simple Storage Service
*7:
オブジェクトロックはオブジェクトが削除及び上書きされるのを一定期間または無期限に防止できる機能です。バケットのオブジェクトロックを有効にすると、自動的にバージョニングも有効 になり、無効化はできません。
S3 オブジェクトロックの仕組み - Amazon Simple Storage Service
*8:/aws/transfer/{server-id} という命名規則となります。
*9:IDプロバイダー選択時にサービスマネージドを利用できるのはSFTPのみです。FTPSやFTPを利用する場合はAWS Directory Serviceかカスタムプロバイダーを利用します。