はじめに
AWS Transfer Family は、AWS で提供されている SFTP, FTPS, FTP のプロトコルが使える安全なファイル転送のサービスである。
今回はそのTransfer Familyを使ってVPCにSFTPサーバーを立て、セキュリティーグループを使って特定のIPアドレスしかアクセスできないようにする。
そして、S3に接続することでSFTPサーバーを経由し、S3バケットにオブジェクトが送信される機構を構築する。
前提
- IAMロール、VPC、S3バケット、セキュリティーグループ、秘密鍵、公開鍵は既に作成済みである
- OSはMac(Windowsでももちろん可能だが、今回はMacでの実装を紹介している)
目次
1. SFTPサーバーを作成する
2. ユーザーを追加する
3. ファイルを送信してみる
1. SFTPサーバーを作成する
プロトコルを選択する
選択するプロトコルはもちろん今回はSTTPサーバーを立てるので、SFTPサーバーを選択する。
IDプロバイダーを選択する
後ほど作成するユーザーはこのTransfer Familyで作成・管理したいので、ここでは「サービスマネージド」を選択する。
エンドポイントを選択する
- 「エンドポイントのタイプ」は今回事前に作成したセキュリティーグループを使ってアクセス制限をするので、「VPCでホスト」を選択する。
- 「アクセス」は今回VPCの外からのアクセスになるので「インターネット向け」を選択する。
- 「VPC」は事前に作成したVPCを選択する。
アベイラビリティーゾーン(AZ)を選択する
- VPCを選択すると、以下にある「アベイラビリティーゾーン」選択欄が出てくる。
- 使用するアベイラビリティーゾーンを選択し、それぞれにサブネットとIPアドレスを割り当てる。
- この時、サブネットはパブリックサブネットを選択しないとサーバーに接続できなくなるので注意する。
セキュリティーグループを選択する
- ここでは事前に作成したセキュリティーグループを選択する
ドメインを選択する
- 今回はサーバーに送信されたファイルはS3に保存するため「Amazon S3」を選択する。
追加の詳細を設定する
* ドメインを設定し、「次へ」を押すと、追加の詳細を設定できる。
* 今回設定するのは「CloudWatchログ記録」のみ。それ以外はデフォルトで構わない。
* 「CloudWatchログ記録」ではサーバーがCloudWatchにあるログに記録するためのロールを選択する。
「次へ」を選択し、各種設定を確認後、「サーバーを作成」をクリックするとサーバーが作成できる。
2. ユーザーを追加する
サーバーを作成したら次にユーザーを追加する。
先ほど作成したサーバーを覗いてみると、以下のような「ユーザー」欄がある。
ここにユーザーを追加する。「ユーザーを追加」を選択する。
ユーザー設定
- 「ユーザー名」を設定する。
- 「ロール」はAmazon S3にアクセス権限が付与されたIAMロールを選択する。
- 「ポリシー」はデフォルトで構わない。
- 「ホームディレクトリ」は事前に作成したS3バケットを選択する。
SSHパブリックキーを設定する
ここには事前に作成したssh公開鍵をコピペする。
「タグ」に関しては、今回は何も設定しなくても大丈夫。
各種設定完了後、右下の「追加」を押すとユーザーが作成される。
3. ファイルを送信してみる
サーバー・ユーザーを作成し終えたら、実際にサーバーにファイルを送信してみる。
- マックの「ターミナル」アプリを開き、以下のコマンドを実行する。
sftp -i 事前に作成した秘密鍵のパス 事前に作成したユーザー名@SFTPサーバーのエンドポイント
SFTPサーバーのエンドポイントはサーバー名→「エンドポイントの詳細」欄に記載されている。
コマンドを実行すると、SFTPサーバーに接続され、成功すると以下のような状態になる。
...
Connected to エンドポイント名
sftp>
これでSFTPサーバーに接続されたので以下のコマンドを実行する。
sftp> put 送信したいファイル名
putコマンドを実行すると、指定したファイルがSFTPサーバーを経由してS3バケットに送信される。
あとは、無事にS3バケットに送信できているかを確認し、以下のように格納されていれば成功。
このシステムの構築により、特定のIPアドレスのみがSFTPサーバーを経由してS3バケットにアクセスできるようになり、よりセキュアなファイル送受信が可能となった。