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 アドレスを割り当てる

  1. 当該サーバーと同じ AWS リージョンに、Amazon VPC を作成します。
  2. サーバーを使用したいアベイラビリティゾーンで、VPC 内にサブネットを作成します。
    注: 1 つの AWS Transfer Family でサポートできるアベイラビリティゾーンは 3 つまでです。
  3. サーバーと同じリージョン内で、最大で 3 つまでの Elastic IP アドレスを割り当てます。あるいは、独自の IP アドレス範囲を選択(BYOIP)することもできます。
    注: Elastic IP アドレスの数は、サーバーエンドポイントを使用するアベイラビリティゾーンの数と、一致している必要があります。

内部 VPC エンドポイントタイプを使用して AWS Transfer Family SFTP 対応サーバーを作成する

  1. 次の手順に従い、VPC 内からのみアクセス可能な、サーバーエンドポイントを作成します
  2. サーバー作成後、AWS Transfer Family コンソールから、サーバーの詳細を確認します。[エンドポイントの設定] の下にある プライベート IPv4 アドレスを記録しておきます。この IP アドレスは、Network Load Balancer の作成手順で必要になります。

Network Load Balancer を作成し、サーバーの VPC エンドポイントを、ロードバランサーのターゲットとして定義する

  1. Amazon Elastic Compute Cloud (Amazon EC2) コンソールを開きます。
  2. ナビゲーションペインで、[ロードバランサー] をクリックします。
  3. [ロードバランサーを作成] を選択します。
  4. [Network Load Balancer] で、[作成] を選択します。
  5. ステップ 1: ロードバランサーの設定で、次を入力します。
    [名前] に、ロードバランサーの名前を指定します。
    [スキーム] で、[インターネット向け] を選択します。
    リスナーで、ロードバランサープロトコルTCP のままにします。関連付けられているロードバランサーのポートを、自分のカスタムリスナーポートに変更します。
    [VPC] で、先に作成した Amazon VPC を選択します。
    [アベイラビリティゾーン] では、サーバーエンドポイントを使用する VPC 内で使用可能なパブリックサブネットに関連付けられた、アベイラビリティゾーンを選択します。
    各サブネットの [IPv4 アドレス] では、先に割り当て済みの Elastic IP から 1 つ選択します。
  6. [次へ: セキュリティ設定の構成] をクリックします。
  7. [次へ: ルーティングの設定] をクリックします。
  8. [ステップ 3: ルーティングの設定] で、次を入力します。
    [ターゲットグループ] で、[新しいターゲットグループ] を選択します。
    [名前] に、ターゲットグループの名前を入力します。
    [ターゲットタイプ] では、[IP] を選択します。
    [プロトコル] で、[TCP] を選択します。
    [ポート] には、22 を入力します。
    注: AWS Transfer Family サーバーでは、ポート 22 でのトラフィックのみがサポートされます。ロードバランサーからサーバーへは、ポート 22 での通信が必要になります。
    [ヘルスチェック] の下にある [プロトコル] で、[TCP] を選択します。
  9. [次へ: ターゲットの登録] をクリックします。
  10. [ステップ 4: ターゲットの登録] で、次のように入力します。
    [ネットワーク] で、使用する Amazon VPC が選択されていることを確認します。
    [IP] には、使用するサーバーエンドポイントのための、プライベート IPv4 アドレスを入力します。この IP アドレスは、サーバーを作成した際に記録しておいた値です。
  11. [リストに追加] をクリックします。
  12. 手順 10 と 11 をくり返し、すべてのサーバーエンドポイントにプライベート IP アドレスを指定します。
  13. [次へ: 内容を確認] を選択します。
  14. [作成] を選択します。

サーバーとロードバランサーのセットアップが完了すると、クライアントは、カスタムポートのリスナー経由で、ロードバランサーと通信できるようになります。ロードバランサーからは、ポート 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であることを確認します。