🔒

AWS Transfer Family SFTP で「固定IP」「接続元IP制限」「パスワード認証」を実現する

2024/12/09に公開

はじめに

気がついたら華金の投稿が多くなっている @___nix___ です。

背景

AWS Transfer Familyを使用してSFTPサーバーを構築し、ファイルをS3バケットにアップロードするワークフローを設定することは、多くの企業にとって重要なタスクです。
このTerraform構成は、AWSのさまざまなサービスを組み合わせて、セキュアでスケーラブルなファイル転送ソリューションを提供します。

概要

このプロジェクトは、AWS Transfer Familyを使用してSFTPサーバーを設定し、ファイルをS3バケットにアップロードするためのワークフローを構築します。
アップロードされたファイルはSQSキューを介して管理され、Lambda関数によって処理されます。
SFTPサーバーは、SSHキー認証とパスワード認証の2つの認証方法をサポートしており、ユーザーのニーズに応じて選択できます。
この記事で紹介するポイントはここで、パスワード認証を許可しようとするとフルマネージドでは無くなってしまう為、自前で構築するにはやや面倒な部分を隠蔽できるという点です。

特徴

  • SFTPサーバーのIP固定化
    • 厳しい接続元の場合、接続先IPを固定化する要件がある
  • 接続元IP制限
    • 流石にどこからでも接続できてしまうのはリスクがある
  • マルチ(鍵+パスワード)認証対応
    • クライアントの都合でパスワード認証を求められることがある

アーキテクチャ

image.png

リポジトリ

https://github.com/nix-tkobayashi/terraform-aws-sftp-multi-auth

導入

  1. リポジトリのクローン: このリポジトリをクローンします。
  2. 変数の設定: terraform.tfvarsファイルを作成し、必要な変数を設定します。
  3. Terraformの初期化: terraform initを実行してTerraformを初期化します。
  4. リソースの確認: terraform planを実行して作成されるリソースを確認します。
  5. インフラのデプロイ: terraform applyを実行してインフラをデプロイします。

終わりに

このTerraform構成は、AWS Transfer Familyを使用したSFTPサーバーの設定を簡素化し、ファイル転送のセキュリティと効率を向上させます。SSHキー認証とパスワード認証の両方をサポートしており、ユーザーのニーズに応じた柔軟な設定が可能です。S3バケット、SQSキュー、Lambda関数を組み合わせることで、ファイルのアップロードと処理を自動化し、運用の効率化を図ります。

【謝辞】
以下の公式ブログのコードを利用させて頂きました。

https://aws.amazon.com/jp/blogs/storage/enable-password-authentication-for-aws-transfer-for-sftp-using-aws-secrets-manager/

一言

最初の要件は、メディア変換用としてのSFTPサーバーでした。
ただ、固定費用が意外にお高いのね、と感じた記憶がありますが、マネージドサービスなのでそこも踏まえての金額なので仕方が無いですね。

この記事良かったと少しでも思って頂けたら是非 @___nix___ をフォローしてあげてください。或いは記事に対してリアクションをお願い致します。

Discussion