Amazon ECS アプリケーションをインターネットに接続する - Amazon Elastic Container Service

Amazon ECS アプリケーションをインターネットに接続する

ほとんどのコンテナ化されたアプリケーションには、少なくとも、インターネットへのアウトバウンドアクセスを必要とするいくつかのコンポーネントが含まれています。たとえば、モバイルアプリのバックエンドでは、プッシュ通知へのアウトバウンドアクセスが必要です。

Amazon Virtual Private Cloud には、VPC とインターネット間の通信を円滑にする主な方法が 2 つあります。

パブリックサブネットとインターネットゲートウェイ

インターネットゲートウェイに接続されたパブリックサブネットのアーキテクチャを示す図。

インターネットゲートウェイへのルートがあるパブリックサブネットを使用すると、コンテナ化されたアプリケーションは、パブリックサブネットの VPC 内のホストで実行できます。コンテナを実行するホストには、パブリック IP アドレスが割り当てられます。このパブリック IP アドレスは、インターネットからルーティング可能です。詳細については、Amazon VPC ユーザーガイドの「インターネットゲートウェイ」を参照してください。

このネットワークアーキテクチャにより、アプリケーションを実行するホストとインターネット上の他のホストとの直接通信が容易になります。通信は双方向です。つまり、インターネット上の他のホストへのアウトバウンド接続を確立できるだけでなく、インターネット上の他のホストもそのホストに接続を試みる可能性があります。そのため、セキュリティグループとファイアウォールのルールには細心の注意を払う必要があります。これにより、インターネット上の他のホストは、開くべきでない接続を開くことができなくなります。

たとえば、アプリケーションが Amazon EC2 で実行されている場合は、SSH アクセス用のポート 22 が開いていないことを確認してください。そうしないと、インスタンスがインターネット上の悪意のあるボットが継続的に SSH 接続を試みる可能性があります。これらのボットはパブリック IP アドレスを総当たり的に調べます。空いている SSH ポートが見つかると、そのようなボットはパスワードをブルートフォース攻撃してインスタンスにアクセスしようとします。このため、多くの組織はパブリックサブネットの使用を制限し、すべてではないにしてもほとんどのリソースをプライベートサブネット内に置くことを好みます。

ネットワークにパブリックサブネットを使用することは、大量の帯域幅や最小のレイテンシーを必要とするパブリックアプリケーションに適しています。該当するユースケースには、ビデオストリーミングやゲームサービスが含まれます。

このネットワークアプローチは、Amazon ECS を Amazon EC2 で使用する場合と、AWS Fargate で使用する場合の両方でサポートされます。

  • Amazon EC2 — パブリックサブネットで EC2 インスタンスを起動できます。Amazon ECS はこれらの EC2 インスタンスをクラスター容量として使用し、インスタンス上で実行されるすべてのコンテナは、ホストの基礎となるパブリック IP アドレスをアウトバウンドネットワークに使用できます。これは host および bridge ネットワークモードの両方に当てはまります。ただし、awsvpc ネットワークモードでは、タスク ENI にパブリック IP アドレスが提供されません。そのため、インターネットゲートウェイを直接使用することはできません。

  • Fargate — Amazon ECS サービスを作成するときは、サービスのネットワーク設定にパブリックサブネットを指定し、[パブリック IP アドレスの割り当て] オプションを使用してください。各 Fargate タスクはパブリックサブネットでネットワーク化されており、インターネットと直接通信するための独自のパブリック IP アドレスを持っています。

プライベートサブネットと NAT ゲートウェイ

NAT ゲートウェイに接続されたプライベートサブネットのアーキテクチャを示す図。

プライベートサブネットと NAT ゲートウェイを使用すると、プライベートサブネット内のホストでコンテナ化されたアプリケーションを実行できます。そのため、このホストのプライベート IP アドレスは VPC 内ではルーティング可能ですが、インターネットからはルーティングできません。つまり、VPC 内の他のホストはプライベート IP アドレスを使用してホストに接続できますが、インターネット上の他のホストはそのホストとのインバウンド通信を行うことができません。

プライベートサブネットでは、ネットワークアドレス変換 (NAT) ゲートウェイを使用して、プライベートサブネット内のホストがインターネットに接続できるようにします。インターネット上のホストは、パブリックサブネット内の NAT ゲートウェイのパブリック IP アドレスから送信されているように見えるインバウンド接続を受信します。NAT ゲートウェイは、インターネットとプライベート VPC の間のブリッジとして機能します。この構成では、VPC がインターネット上の攻撃者による直接アクセスから保護されるため、多くの場合セキュリティ上望ましいものです。詳細については、「Amazon VPC ユーザーガイド」の「NAT ゲートウェイ」を参照してください。

このプライベートネットワークアプローチは、外部からの直接アクセスからコンテナを保護するシナリオに適しています。該当するシナリオには、支払い処理システムや、ユーザーデータとパスワードを格納するコンテナなどがあります。アカウントで NAT ゲートウェイを作成して使用するには料金がかかります。NAT ゲートウェイの時間単位の使用料金とデータ処理料金も適用されます。冗長性を確保するために、アベイラビリティーゾーンごとに NAT ゲートウェイが必要です。こうすることで、1 つのアベイラビリティーゾーンの可用性が失われても、アウトバウンド接続が損なわれなくなります。このため、ワークロードが少ない場合は、プライベートサブネットと NAT ゲートウェイを使用する方が費用対効果が高い可能性があります。

このネットワークアプローチは、Amazon ECS を Amazon EC2 で使用する場合と、AWS Fargate で使用する場合の両方でサポートされます。

  • Amazon EC2 — プライベートサブネットで EC2 インスタンスを起動できます。これらの EC2 ホストで実行されるコンテナは、基盤となるホストのネットワークを使用し、アウトバウンドリクエストは NAT ゲートウェイを経由します。

  • Fargate — Amazon ECS サービスを作成するときは、サービスのネットワーク設定にプライベートサブネットを指定してください。[パブリック IP アドレスの割り当て] オプションは使用しないでください。各 Fargate タスクはプライベートサブネットでホストされます。そのアウトバウンドトラフィックは、そのプライベートサブネットに関連付けた NAT ゲートウェイを経由してルーティングされます。