S3にSFTPでファイルを転送したかったので調べてみると「AWS Transfer Family」というサービスがあったので早速使ってみました。
「AWS Transfer Family」を使う事でかなり簡単にSFTPの環境を構築する事ができたので説明してみたいと思います。
構成としてはこのような構成です、今回はSFTPを行うサービスとして「AWS Transfer Family」、FTPユーザーの管理として「AWS Secrets Manager」を使います。
ユーザー認証処理を行うために、間に「Lambda」を使用します。
![構成図](https://tech.omablo.com/wp-content/uploads/sites/5/2023/09/image-23.png)
一見複雑そうな構成ですが、こちらの一通りの構成を「Cloud Formation」を使う事で簡単に構築できます。
それでは順番に構築していきます。
S3にバケットを作成する
まずはS3にバケットを作成します。
好きなバケット名で何も変更せずバケットを作成してください。
![S3でバケットを作成](https://tech.omablo.com/wp-content/uploads/sites/5/2023/09/image-12-1024x274.png)
Cloud Formationで一気に構築
Cloud Formationでスタックの作成を行います。
![Cloud Formationでスタックの作成](https://tech.omablo.com/wp-content/uploads/sites/5/2023/09/image-13-1024x238.png)
「スタックの作成」ボタンでスタックの作成画面を開いたら、テンプレートの指定のテンプレートソースで「Amazon S3 URL」を選択して、その下の「Amazon S3 URL」を入力する欄にこちらのURLを指定して、「次へ」をクリック
”https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-secrets-manager-lambda.template.yml”
![テンプレートの指定](https://tech.omablo.com/wp-content/uploads/sites/5/2023/09/image-14-1024x402.png)
「スタック名」に好きな名前を入力して「次へ」をクリック
![スタックの詳細を指定](https://tech.omablo.com/wp-content/uploads/sites/5/2023/09/image-15-1024x370.png)
次のスタックオプションの設定画面とその次のレビュー画面は次へ次へで進んでください。
すると必要なサービスを構築が始まります。
それなりに時間がかかるのでしばらくお待ちください。
![スタック作成中](https://tech.omablo.com/wp-content/uploads/sites/5/2023/09/image-16-1024x427.png)
完了すると、スタックの部分が「CREATE_COMPLETE」になります。
![スタックCREATE_COMPLETE](https://tech.omablo.com/wp-content/uploads/sites/5/2023/09/image-17.png)
完了すると「AWS Transfer Family」「Lambda」に新しく作成されていると思います。
AWS Secrets Managerでユーザー管理
次はFTPユーザーを管理するための「AWS Secrets Manager」を設定します。
その前に、AWS Secrets Managerで使用するIAMロールを作成します。
ユースケースは「Transfer」を選びます。
![IAMロールを作成](https://tech.omablo.com/wp-content/uploads/sites/5/2023/09/image-22-1024x504.png)
追加するポリシーは「AmazonS3FullAccess」の権限を持ったロールを作成しておきます。
![ポリシーの指定](https://tech.omablo.com/wp-content/uploads/sites/5/2023/09/image-19-1024x172.png)
そしたら「AWS Secrets Manager」に戻って新しくシークレットを作成します。
「新しいシークレットを保存する」をクリック
![AWS Secrets Manager](https://tech.omablo.com/wp-content/uploads/sites/5/2023/09/image-18-1024x188.png)
シークレットのタイプを選択する画面になるので、「その他のシークレットのタイプ」を選択。
キー/値のペアで「Password」「Role」「HomeDirectory」の3つを作成します。
それぞれ、
・Password:FTPユーザーのパスワード
・Role:先ほど作成したIAMロールのARN
・HomeDirectory:FTPでのファイル保存先のS3バケットのkey
を指定して「次へ」
![シークレットタイプを選択](https://tech.omablo.com/wp-content/uploads/sites/5/2023/09/image-20.png)
次のシークレットを設定画面で名前を付けます。
この名前の命名規則が重要で、
”aws/transfer/” + [AWS Transfer Familyに作成されたサーバーのID] + ”/” + [FTPユーザー名]
で名前を付けます。
最後のFTPユーザー名はFTPログインするときに使うユーザーをここで初めて指定します。
そのあとは次へ次へで保存します。
![シークレット名を設定](https://tech.omablo.com/wp-content/uploads/sites/5/2023/09/image-21.png)
ここまで設定すると、作成した「AWS Transfer Family」のエンドポイントをホスト名に、ユーザー、パスワードは「AWS Secrets Manager」で設定したシークレット名とパスワードを使ってSFTPでS3に接続できるようになります。
ホスト:「AWS Transfer Family」のエンドポイント
ユーザー:「AWS Secrets Manager」のシークレット名の最後の部分(Ftp-User)
パスワード:「AWS Secrets Manager」に設定したPassword(123456789)
簡単なので、S3でSFTPが使いたいという言う場合は試してみてください。
コメント