AWS Transfer Family SFTP 対応サーバーエンドポイントで、カスタムリスナーポートを使用して Elastic IP アドレスを有効にする方法を教えてください。
最終更新日: 2021 年 8 月 9 日
AWS Transfer Family SFTP 対応サーバーで、Elastic IP アドレスによるアクセスを可能にしたいのですが、リスナーポート を 22 にすることができません。
解決方法
仮に、ポート 22 をリスナーポートとして使用可能であるなら、ご使用のサーバーでインターネット向けのエンドポイントを作成することで、これを実現できます。
しかし、リスナーポートを(移行のためなどで)ポート 22 以外にする必要がある場合には、以下の手順に従い解決します。
Amazon Virtual Private Cloud (Amazon VPC) を作成し IP アドレスを割り当てる
- 当該サーバーと同じ AWS リージョンに、Amazon VPC を作成します。
- サーバーを使用したいアベイラビリティゾーンで、VPC 内にサブネットを作成します。
注: 1 つの AWS Transfer Family でサポートできるアベイラビリティゾーンは 3 つまでです。 - サーバーと同じリージョン内で、最大で 3 つまでの Elastic IP アドレスを割り当てます。あるいは、独自の IP アドレス範囲を選択(BYOIP)することもできます。
注: Elastic IP アドレスの数は、サーバーエンドポイントを使用するアベイラビリティゾーンの数と、一致している必要があります。
内部 VPC エンドポイントタイプを使用して AWS Transfer Family SFTP 対応サーバーを作成する
- 次の手順に従い、VPC 内からのみアクセス可能な、サーバーエンドポイントを作成します。
- サーバー作成後、AWS Transfer Family コンソールから、サーバーの詳細を確認します。[エンドポイントの設定] の下にある プライベート IPv4 アドレスを記録しておきます。この IP アドレスは、Network Load Balancer の作成手順で必要になります。
Network Load Balancer を作成し、サーバーの VPC エンドポイントを、ロードバランサーのターゲットとして定義する
- Amazon Elastic Compute Cloud (Amazon EC2) コンソールを開きます。
- ナビゲーションペインで、[ロードバランサー] をクリックします。
- [ロードバランサーを作成] を選択します。
- [Network Load Balancer] で、[作成] を選択します。
- ステップ 1: ロードバランサーの設定で、次を入力します。
[名前] に、ロードバランサーの名前を指定します。
[スキーム] で、[インターネット向け] を選択します。
リスナーで、ロードバランサープロトコルを TCP のままにします。関連付けられているロードバランサーのポートを、自分のカスタムリスナーポートに変更します。
[VPC] で、先に作成した Amazon VPC を選択します。
[アベイラビリティゾーン] では、サーバーエンドポイントを使用する VPC 内で使用可能なパブリックサブネットに関連付けられた、アベイラビリティゾーンを選択します。
各サブネットの [IPv4 アドレス] では、先に割り当て済みの Elastic IP から 1 つ選択します。 - [次へ: セキュリティ設定の構成] をクリックします。
- [次へ: ルーティングの設定] をクリックします。
- [ステップ 3: ルーティングの設定] で、次を入力します。
[ターゲットグループ] で、[新しいターゲットグループ] を選択します。
[名前] に、ターゲットグループの名前を入力します。
[ターゲットタイプ] では、[IP] を選択します。
[プロトコル] で、[TCP] を選択します。
[ポート] には、22 を入力します。
注: AWS Transfer Family サーバーでは、ポート 22 でのトラフィックのみがサポートされます。ロードバランサーからサーバーへは、ポート 22 での通信が必要になります。
[ヘルスチェック] の下にある [プロトコル] で、[TCP] を選択します。 - [次へ: ターゲットの登録] をクリックします。
- [ステップ 4: ターゲットの登録] で、次のように入力します。
[ネットワーク] で、使用する Amazon VPC が選択されていることを確認します。
[IP] には、使用するサーバーエンドポイントのための、プライベート IPv4 アドレスを入力します。この IP アドレスは、サーバーを作成した際に記録しておいた値です。 - [リストに追加] をクリックします。
- 手順 10 と 11 をくり返し、すべてのサーバーエンドポイントにプライベート IP アドレスを指定します。
- [次へ: 内容を確認] を選択します。
- [作成] を選択します。
サーバーとロードバランサーのセットアップが完了すると、クライアントは、カスタムポートのリスナー経由で、ロードバランサーと通信できるようになります。ロードバランサーからは、ポート 22 経由でサーバーと通信します。
Elastic IP アドレスからサーバーへのアクセスをテストする
Elastic IP アドレス、もしくは、Network Load Balancer の DNS 名を使用して、カスタムポート経由でサーバーに接続します。たとえば、次に示す OpenSSH のコマンドでは、Elastic IP とカスタムポートを使用して、サーバーへの接続を行っています。
注: [port] の部分を、実際のカスタムポートに置き換えます。また、192.0.2.3 の部分は、割り当てた Elastic IP アドレスに置き換えます。
sftp -i sftpuserkey -P [port] sftpuser@192.0.2.3
重要: サーバーに対するクライアント IP アドレスからのアクセスは、ロードバランサーで構成されたサブネット用の、ネットワークアクセスコントロールリスト(ネットワーク ACL)により管理します。ネットワーク ACL によるアクセス許可は、サブネットレベルで設定されるため、そのサブネットを使用するすべてのリソースに対し、このルールが適用されます。クライアント IP アドレスからのアクセスを、セキュリティグループにより制御することはできません。なぜなら、ロードバランサーのターゲットタイプが、インスタンスではなく IP に設定されているためです。つまり、ロードバランサーは、送信元の IP アドレスを保持しません。Network Load Balancer のヘルスチェックでエラーが発生する場合、ロードバランサーがサーバーエンドポイントに接続できていません。この問題を解決するには、以下を確認してください。
- サーバーエンドポイントに関連つけられたセキュリティグループが、ロードバランサーで構成されたサブネットからのインバウンド接続を、許可していることを確認します。ロードバランサーは、サーバーエンドポイントに対し、ポート 22 を使用して接続できる必要があります。
- サーバーの状態が、Onlineであることを確認します。