AWS Transfer FamilyでIPアドレス制限付きのSFTPサーバーを立てる

### はじめに
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サーバーを作成する

### プロトコルを選択する

![スクリーンショット 2022-12-26 16.01.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2959493/b25c9a59-5610-7fff-c049-3a53fa72587d.png)

選択するプロトコルはもちろん今回はSTTPサーバーを立てるので、SFTPサーバーを選択する。

### IDプロバイダーを選択する

![スクリーンショット 2022-12-26 16.05.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2959493/b86eb609-7dbe-ec4e-5fd6-6eb89c122549.png)

後ほど作成するユーザーはこのTransfer Familyで作成・管理したいので、ここでは「サービスマネージド」を選択する。

### エンドポイントを選択する

![スクリーンショット 2022-12-26 16.29.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2959493/8c0437e7-4044-70ba-c6f9-d430201eec4a.png)

* 「エンドポイントのタイプ」は今回事前に作成したセキュリティーグループを使ってアクセス制限をするので、「VPCでホスト」を選択する。
* 「アクセス」は今回VPCの外からのアクセスになるので「インターネット向け」を選択する。
* 「VPC」は事前に作成したVPCを選択する。

#### アベイラビリティーゾーン（AZ）を選択する
* VPCを選択すると、以下にある「アベイラビリティーゾーン」選択欄が出てくる。

![スクリーンショット 2022-12-26 17.30.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2959493/1125b59e-3460-a76d-7932-6a5e46fced60.png)

* 使用するアベイラビリティーゾーンを選択し、それぞれにサブネットとIPアドレスを割り当てる。
* この時、サブネットはパブリックサブネットを選択しないとサーバーに接続できなくなるので注意する。

#### セキュリティーグループを選択する
![スクリーンショット 2022-12-27 10.57.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2959493/af4f3398-d2c6-49da-de54-3ad8fcd943c8.png)

* ここでは事前に作成したセキュリティーグループを選択する

### ドメインを選択する

![スクリーンショット 2022-12-27 11.13.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2959493/8dbfb2d7-2d2d-f9f9-0444-dde14859bb28.png)

* 今回はサーバーに送信されたファイルはS3に保存するため「Amazon S3」を選択する。

### 追加の詳細を設定する
![スクリーンショット 2022-12-27 11.22.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2959493/fa1e99e3-bdca-387a-a099-2444347abe38.png)

*　ドメインを設定し、「次へ」を押すと、追加の詳細を設定できる。
*　今回設定するのは「CloudWatchログ記録」のみ。それ以外はデフォルトで構わない。
*　「CloudWatchログ記録」ではサーバーがCloudWatchにあるログに記録するためのロールを選択する。

「次へ」を選択し、各種設定を確認後、「サーバーを作成」をクリックするとサーバーが作成できる。

*****
## 2. ユーザーを追加する
サーバーを作成したら次にユーザーを追加する。
先ほど作成したサーバーを覗いてみると、以下のような「ユーザー」欄がある。
![スクリーンショット 2022-12-27 11.30.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2959493/0fb8cd72-191d-8eec-e7e8-1bfce82d9073.png)

ここにユーザーを追加する。「ユーザーを追加」を選択する。

### ユーザー設定
![スクリーンショット 2022-12-27 11.36.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2959493/d1080072-cbab-05d6-4636-a2dcae176fb1.png)

* 「ユーザー名」を設定する。
* 「ロール」はAmazon S3にアクセス権限が付与されたIAMロールを選択する。
* 「ポリシー」はデフォルトで構わない。
* 「ホームディレクトリ」は事前に作成したS3バケットを選択する。


### SSHパブリックキーを設定する
ここには事前に作成したssh公開鍵をコピペする。
「タグ」に関しては、今回は何も設定しなくても大丈夫。

![スクリーンショット 2022-12-27 11.48.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2959493/18da032e-7a88-902c-9746-9422afb1c49f.png)

各種設定完了後、右下の「追加」を押すとユーザーが作成される。

*****
## 3. ファイルを送信してみる
サーバー・ユーザーを作成し終えたら、実際にサーバーにファイルを送信してみる。

* マックの「ターミナル」アプリを開き、以下のコマンドを実行する。
~~~command:ターミナル
sftp -i 事前に作成した秘密鍵のパス　事前に作成したユーザー名@SFTPサーバーのエンドポイント
~~~
SFTPサーバーのエンドポイントはサーバー名→「エンドポイントの詳細」欄に記載されている。
![スクリーンショット 2022-12-27 13.51.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2959493/40896487-c074-bfc6-532c-61a52fd1fd22.png)
コマンドを実行すると、SFTPサーバーに接続され、成功すると以下のような状態になる。
~~~command:ターミナル
...
Connected to エンドポイント名
sftp>
~~~
これでSFTPサーバーに接続されたので以下のコマンドを実行する。
~~~command:ターミナル
sftp>　　put 送信したいファイル名
~~~
putコマンドを実行すると、指定したファイルがSFTPサーバーを経由してS3バケットに送信される。
あとは、無事にS3バケットに送信できているかを確認し、以下のように格納されていれば成功。
![スクリーンショット 2022-12-27 14.24.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2959493/e99dd777-cf11-d367-6568-baa2f2674310.png)

このシステムの構築により、特定のIPアドレスのみがSFTPサーバーを経由してS3バケットにアクセスできるようになり、よりセキュアなファイル送受信が可能となった。