[アップデート] AWS Transfer Family のパブリック SFTP サーバーでカスタムポートが使えるようになりました
いわさです。
AWS Transfer Family の SFTP サーバーのパブリックエンドポイントは、これまで待ち受けポートが 22 だけで、通信の開始方法も server-first(サーバーが先に応答する方式)のみでした。(VPC エンドポイントタイプの場合だと一部カスタムポート(2222・2223・22000)も使えた)
先日のアップデートで、パブリックエンドポイントの SFTP サーバーでもカスタムポートを設定できるようになり、さらにポートごとに通信の開始方法(client-first / server-first)も指定できるようになりました。
今回こちらを確認してみたので紹介します。
実際に確認してみる
今回のカスタムポートはパブリックエンドポイントの SFTP サーバー専用です。
VPC ホストエンドポイントや、FTP / FTPS プロトコルのサーバーでは設定できません。
ということで、まずはパブリックエンドポイントの SFTP サーバーをマネジメントコンソールから作成しましょう。
サーバー作成ウィザードの「追加設定」を見てみると「SFTP custom ports」の項目が追加されていました。

「Configure SFTP custom ports」にチェックを入れると、カスタマイズできるようになるようです。

ポート番号と通信モードの入力欄が出てきました。
デフォルトの 22 番の Server talks first が設定されていますね。
コンソールによると 1 台のサーバーあたり最大3つまでカスタムポートが設定できるようです。
また、ドキュメントによるとポートは 22、または 2000 から 65535 の範囲で指定する必要があり、1 から 1999 は選べないとのことです。
なお、VPC ホストエンドポイントの場合は 22 以外に固定ポート(2222・2223・22000)が従来から使えていたのですが、今回のアップデート後も VPC の場合は固定ポートのみが利用できます。今回はパブリックタイプのみが対象です。
今回はポートを 3 つ、通信モードを混在させた構成にしました。

通信モードは Server talks first と Client talks first の 2 つが選択できます。
Server talks first は、サーバーが先に応答してから SSH ネゴシエーションに入るモードで、Client talks first は、クライアントからのデータパケットを受け取ってからサーバーが応答するモードです。
確かレガシークライアントの多くは Server talks first が多いとかだった気がします。
作成後、サーバーの詳細画面ではこんな感じで「SFTP custom ports」に設定した 3 ポートが表示されていました。

この状態で、各ポートに実際に SFTP 接続してみましょう。
SERVICE_MANAGED のユーザーに SSH 公開鍵を登録し、同じユーザー・同じ鍵のままポート番号だけ変えて接続します。
まずデフォルトのポート 22(Server talks first)です。
S3 に事前にアップロードしておいたファイルをダウンロードできました。
$ sftp -P 22 -i ./sftp_key bloguser@<エンドポイント>
sftp> ls
testfile.txt
sftp> get testfile.txt
Fetching /hoge-bucket/testfile.txt to testfile.txt
次にカスタムポートの 2222(Client talks first)です。
ポート番号を変えるだけで接続でき、アップロードもできました。
$ sftp -P 2222 -i ./sftp_key bloguser@<エンドポイント>
sftp> put up.txt
Uploading up.txt to /hoge-bucket/up.txt
sftp> ls
testfile.txt up.txt
通信モードが違う 3000(Client talks first)でも同じように接続できたので、設定した 3 ポートがそれぞれ使えていそうです。
なお、設定していないポート(たとえば 2201)に接続しようとすると、TCP が応答せずそのままタイムアウトしました。
SftpPorts に指定したポートだけが応答し、それ以外は応答しないようだ。
ポートの変更はサーバーを停止してから
作成後にポート構成を変えたくなって詳細画面から編集しようとしたのですが、稼働中は変更できませんでした。
設定画面にも、ポートを変更するにはサーバーを停止する必要がある、と注記があります。

サーバーを停止してから編集すると、今度は変更を受け付けてくれました。
稼働中のサーバーのポートを変えるときは、一時的に停止する必要があるので覚えておきましょう。
さいごに
本日は AWS Transfer Family のパブリックエンドポイントの SFTP サーバーでカスタムポートと通信モードが選べるようになったので確認してみました。
ポート 22 以外で待ち受けできるようになったことで、特定のポート番号を指定される運用や、22 番ポートへの自動スキャンを避けたいケースに対応しやすくなりました。
また想定クライアントにあわせて通信モードも変更できるようになりました。こっちのほうが嬉しいかもしれないですね。ワークロードによって指定されるケースあるので。









