AWS Transfer for SFTP ローカルとS3間をSFTPでやり取りする

# 初めに

以前投稿したこちらの記事は、プロトコルは HTTPS でした。SFTP でやり取りしたかったので良いサービスがないか探してみたところ、Transfer for SFTP というサービスによって実現できることがわかりました。こちらのサーバー作成から接続手順について書きました。

https://qiita.com/quryu/items/61af9f9362edc7c01ff9

# Transfer for SFTP

- AWS ストレージサービスとの間でファイルを転送するためのセキュアな転送サービス

- 以下の AWS ストレージサービスとの間でデータの転送をサポート

  - S3
  - EFS

- 次のプロトコルによるデータ転送をサポート

  - SFTP
  - FTPS
  - FTP

# サーバー作成手順

SFTP を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/c4b4dad0-2652-7403-3d6e-9139c135cec3.png)

「サービスマネジメント」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/c183074e-b843-9ab5-e08b-befee3eb8587.png)

「パブリックアクセス可能」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/795fa9c4-62e1-7bf3-924f-aca745d4ffa5.png)

「Amazon S3」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/33c72da0-3234-f848-ef06-a6699e1970e1.png)

ログ記録用に「新しいロールの作成」を選択します。暗号化アルゴリズムはデフォルトのものを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/4396ac40-f91a-721c-9ee0-130172b04a62.png)

「サーバーホストキー」は空のまま「次へ」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/bf3a1e5b-8482-1f61-1140-8d141e35fa33.png)

以下のようにサーバーが立ち上がりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/70cee034-8900-17f2-7c5b-7cdb2dac9405.png)

# ユーザー作成手順

サーバーにユーザーを登録します。今立ち上げたサーバーを選択し「ユーザーを追加」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/8df0d9b2-1bed-c37f-94bc-1b648650df1f.png)

次のような画面に遷移しますので、別タブでこのユーザーの IAM ロールを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/e190fcc8-d62e-0cd8-25df-628f37cc3fd2.png)

ユースケースには「Transfer」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/7f28e94e-cbfc-2a72-19e0-6b80c4f389d2.png)

ポリシーは 「AmazonS3FullAccess」を選択し、ロールを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/b2b3f026-0037-feb9-8edc-1fa931743dfd.png)

先ほどのユーザー作成画面に戻り、任意のユーザー名を入力し、「ロール」には先ほど作成したロールを選択します。ユーザーに適用する「ポリシー」は「なし」を選択します。ログイン後のホームディレクトリは接続したい S3 バケットを選択します。オプションでログイン後のフォルダを選択することができます。今回は空のまま進めます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/c56cda8d-0a55-2284-f2d6-b19f4344cedb.png)

SSH で接続するための公開鍵と秘密鍵を作成するために EC2 インスタンスを起動します。鍵が作成できればよいので、ローカルマシンでも構いません。以下のコマンドを実行します。

```
ssh-keygen -P "" -m PEM -f transfer_key
```

`transfer_key` という秘密鍵と `transfer_key.pub` という公開鍵がカレントディレクトリに作成されます。秘密鍵には `pem` という拡張子を付けておき、ローカルフォルダに格納します。秘密鍵は作成したSFTP サーバーにログインする際に必要になります。

```
mv transfer_key transfer_key.pem
```

公開鍵の中身を丸ごとコピーします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/a7815b23-8469-eeef-3054-ad693869ae9e.png)

コピーした公開鍵の中身を「SSH パブリックキー」に貼り付けます。その後「追加」を選択するとユーザー作成完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/c54ef1dd-03a4-0439-8147-9e22ded8040f.png)

# SSH 接続手順

サーバーのエンドポイントをコピーします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/702eb420-6126-044a-9af2-228da1e86938.png)

winSCP を起動し、コピーしたエンドポイントを「ホスト名」に貼り付けます。「ユーザー名」には作成したユーザー名を入力します。パスワードは空のままにします。「設定」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/bd6f2717-9c10-b3c6-4a0b-7be9ecc16b18.png)

ローカルフォルダに保存した秘密鍵を選択します。鍵の変換には「OK」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/89ac5bd5-b473-8103-2602-6499f6c76d6b.png)

以下の確認ポップアップ画面が出ますが、「はい」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/f73631fe-5dc9-e264-887f-c114d650bc92.png)

以下の警告が出ますが、「はい」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/dd0be423-17c7-92a4-3a7d-3cfff7378125.png)


接続に成功しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/b6a76792-f2b3-1bd0-88ab-a1bf3e7dab15.png)

# 参考記事

https://docs.aws.amazon.com/ja_jp/transfer/latest/userguide/what-is-aws-transfer-family.html