S3にSFTPでファイルを転送したかったので調べてみると「AWS Transfer Family」というサービスがあったので早速使ってみました。
「AWS Transfer Family」を使う事でかなり簡単にSFTPの環境を構築する事ができたので説明してみたいと思います。
構成としてはこのような構成です、今回はSFTPを行うサービスとして「AWS Transfer Family」、FTPユーザーの管理として「AWS Secrets Manager」を使います。
ユーザー認証処理を行うために、間に「Lambda」を使用します。
一見複雑そうな構成ですが、こちらの一通りの構成を「Cloud Formation」を使う事で簡単に構築できます。
それでは順番に構築していきます。
S3にバケットを作成する
まずはS3にバケットを作成します。
好きなバケット名で何も変更せずバケットを作成してください。
Cloud Formationで一気に構築
Cloud Formationでスタックの作成を行います。
「スタックの作成」ボタンでスタックの作成画面を開いたら、テンプレートの指定のテンプレートソースで「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”
「スタック名」に好きな名前を入力して「次へ」をクリック
次のスタックオプションの設定画面とその次のレビュー画面は次へ次へで進んでください。
すると必要なサービスを構築が始まります。
それなりに時間がかかるのでしばらくお待ちください。
完了すると、スタックの部分が「CREATE_COMPLETE」になります。
完了すると「AWS Transfer Family」「Lambda」に新しく作成されていると思います。
AWS Secrets Managerでユーザー管理
次はFTPユーザーを管理するための「AWS Secrets Manager」を設定します。
その前に、AWS Secrets Managerで使用するIAMロールを作成します。
ユースケースは「Transfer」を選びます。
追加するポリシーは「AmazonS3FullAccess」の権限を持ったロールを作成しておきます。
そしたら「AWS Secrets Manager」に戻って新しくシークレットを作成します。
「新しいシークレットを保存する」をクリック
シークレットのタイプを選択する画面になるので、「その他のシークレットのタイプ」を選択。
キー/値のペアで「Password」「Role」「HomeDirectory」の3つを作成します。
それぞれ、
・Password:FTPユーザーのパスワード
・Role:先ほど作成したIAMロールのARN
・HomeDirectory:FTPでのファイル保存先のS3バケットのkey
を指定して「次へ」
次のシークレットを設定画面で名前を付けます。
この名前の命名規則が重要で、
”aws/transfer/” + [AWS Transfer Familyに作成されたサーバーのID] + ”/” + [FTPユーザー名]
で名前を付けます。
最後のFTPユーザー名はFTPログインするときに使うユーザーをここで初めて指定します。
そのあとは次へ次へで保存します。
ここまで設定すると、作成した「AWS Transfer Family」のエンドポイントをホスト名に、ユーザー、パスワードは「AWS Secrets Manager」で設定したシークレット名とパスワードを使ってSFTPでS3に接続できるようになります。
ホスト:「AWS Transfer Family」のエンドポイント
ユーザー:「AWS Secrets Manager」のシークレット名の最後の部分(Ftp-User)
パスワード:「AWS Secrets Manager」に設定したPassword(123456789)
簡単なので、S3でSFTPが使いたいという言う場合は試してみてください。
コメント