AWS Elastic Load Balancing のセキュリティ
クラウド上でアプリケーションをホストする圧倒的な利点の一つは、サービスへの需要が増加するにつれて、指数関数的にスケールできる能力です。Amazon Web ServiceのElastic Load Balancing(ELB)サービスは、スケーラブルなアーキテクチャに不可欠な要素です。本記事では、ELBの基本、その種類と利点について解説します。
また、ELBリソースを適切に保護し、その背後にあるアプリケーション、サービス、その他のリソースを防御する方法についても深く掘り下げます。加えて、ELBが直面する可能性のある脅威の種類や、ELBを保護するためのベストプラクティスと戦略についても説明します。
ELBとそのしくみ
ELBのしくみについて説明する前に、2つの用語についてご理解いただく必要がございます:リスナーとターゲットグループです。リスナーとは、ロードバランサーへの接続要求を待機するプロセスです。リスナーはプロトコルとポートを設定して構成します。ELBはTCP、TLS、UDP、またはTCP_UTPプロトコルをサポートしています。ポート番号は1から65、535の範囲(例:Webトラフィック用のポート80、暗号化トラフィック用のポート443)で設定可能です。
ターゲットグループとは、ELBを経由して流入するトラフィックの宛先です。ELBはAWSアカウントへのトラフィック流入に対する単一のエントリポイントを提供します。ELBはそのトラフィックを複数の宛先に分散します。宛先はオートスケーリンググループ(ASG)内のEC2インスタンスのクラスターである場合があり、AWS Lambda関数やコンテナ化されたアプリケーションへのルーティングをサポートするものもあります。ELBは、ヘルスチェックの実施、新規リソースの追加、期限切れリソースの削除を必要に応じて行い、健全なターゲットのリストを維持します。ELBは複数のアベイラビリティゾーン(AZ)にまたがるターゲットグループを管理できます。これにより、あるAZのリソースが利用不可になった場合、ELBは自動的に別のAZの可用性のあるリソースへリクエストをルーティングします。
各種ELBは、HTTPスタック内の様々な要素に基づいてトラフィックをルーティングできます。次に、各ELBの種類、そのパフォーマンス特性、動的ルーティングの利点について説明します。ELBサービスは、AWS Certificate Manager(ACM)を使用したSSL証明書を設定することで、クライアントからのHTTPSリクエストを受け入れ、検証することが可能です。
異なるELBの種類とその利点
AWSは、クラウドプラットフォーム上で提供される初期サービスの一つとして、クラシックロードバランサーを発表しました。クラシックELBはほとんどのユースケースをカバーしていますが、その後、より専門的なロードバランサーの種類がリリースされ、それぞれ異なるルーティングオプションとパフォーマンスレベルを提供しています。これらのELBにおけるルーティングオプションは、オープンシステム相互接続モデル(OSI)の異なるレイヤーと連携して動作します。
以下に各タイプのロードバランサーを列挙し、それぞれの利点とメリットについて簡潔に説明いたします。特定のタイプに関する詳細情報や機能についてさらに知りたい場合は、AWSが製品比較表に全機能セットを記載しております。
クラシックロードバランサー(ELB)
クラシックロードバランサーは、AWSで利用可能な最もシンプルなELBです。クライアントに単一のエントリポイントを提供し、着信リクエストをEC2インスタンス間で分散します。ELBはターゲットグループ内の各インスタンスに対して定期的なヘルスチェックを実行し、健全で応答可能なインスタンスのみにリクエストをルーティングすることを保証します。
クラシックELBはTCPおよびSSLリクエストをサポートし、さらにスティッキーセッション機能も備えています。これはアプリケーションが生成するクッキーを利用し、同一クライアントからのリクエストを常に同一のターゲットインスタンスへルーティングします。このELBはシンプルで実績があり、信頼性が高いです。ただし、ルーティングの種類の範囲が限定されており、EC2インスタンスへのルーティングのみをサポートしています。
アプリケーションロードバランサー(ALB)
アプリケーションロードバランサー(ALB)は、OSIモデルの第7層(アプリケーション層)の内容に基づいてリクエストをルーティングしたい場合に特に有用です。これは、ルールまたは一連のルールを用いてALBにリスナーを追加することで実現します。リクエストがこれらのルールに一致した場合、リスナーは関連するターゲットグループへリクエストをルーティングします。
ALBでは、以下の要素に基づいてリクエストをルーティングすることが可能です:
- リクエストのURLパス内のパラメータ
- HTTPヘッダー(例:
- ホスト名
- クエリパラメータ
- 送信元IPアドレス
ALBは、ターゲットとしてLambda関数やAmazon Elastic Container Service(Amazon ECS)内で実行されるコンテナ化されたアプリケーションへのルーティングをサポートします。ALBは各ターゲットグループのヘルスチェックを個別に管理し、耐障害性を向上させます。従来のクラシック ELB よりも詳細なログにアクセスすることも可能です。
ALB を使用する追加の利点として、リスナーを設定して Amazon Cognito などの OpenID Connect (OIDC) 識別プロバイダー (IdP) によるユーザー認証を実現できます。このアプローチにより、ロードバランサーのセキュリティが向上し、アプリケーションの認証負担を軽減できます。
ネットワークロードバランサー(NLB)
アプリケーションが毎秒数百万のリクエストを処理できる高性能なロードバランサーを必要とする場合、ネットワークロードバランサー(NLB)のご利用をご検討ください。NLBはOSIモデルのレイヤ4、すなわちトランスポート層で動作します。
NLBを選択する主な理由は、その速度とスケーラビリティにあります。ただし、他のELBタイプで利用可能な機能(SSL終端やパラメータベースルーティングなど)の一部は、NLB構成では利用できません。
ゲートウェイロードバランサー
AWSが提供するELBの最終的なタイプ(少なくとも現時点では)は、ゲートウェイロードバランサーです。このロードバランサーはOSIモデルの第3層、すなわちネットワーク層で動作します。VPC境界を越えた安全な通信をサポートする必要があり、仮想ネットワークアプライアンスを管理できる場合にも、ゲートウェイロードバランサーは優れた選択肢となります。
ゲートウェイロードバランサーは、ファイアウォール、ディープパケットインスペクション、侵入検知・防止などのネットワークアプライアンスをロードバランシングリソースに追加するユースケースをサポートします。これらの仮想アプライアンスをロードバランサーのターゲットグループとして追加し、ロードバランサー内のルートテーブルエントリで設定します。
責任共有モデルの理解
セキュリティに関して、AWS(ほとんどのクラウドプラットフォームと同様)は責任共有モデルに基づいて運営されています。これを最も適切に説明すると、AWSはクラウドの保護について責任を負い、お客様はクラウド内のセキュリティについて 責任を負います。このモデルは、AWSがハードウェア、ソフトウェア、ネットワーク、インフラストラクチャを収容する施設を含むクラウドインフラストラクチャを保護することを意味します。
AWSはユーザーに広範な機能と設定オプションを提供しています。各AWSサービスのユーザー様は、それらのサービスを正しく設定し、リソースや転送・処理・保存されるデータを保護するための適切なセキュリティ対策を講じる責任を負います。
ELBも他のクラウドサービスと同様に固有のセキュリティ課題を抱えており、AWSはこれらのリスクを軽減するためのツールと設定を提供しています。ELBが直面する可能性のあるリスクを探り、その理解をもとに最適な管理方法について検討しましょう。
ELBのセキュリティリスク
アプリケーションセキュリティを議論する際、主な関心事は攻撃対象領域です。攻撃対象領域とは、アプリケーションのうちインターネットに公開されている部分、つまり悪意のある攻撃者がアクセス可能な部分を指します。ハッカーがこの侵入経路を突破することに成功した場合、アプリケーションやデータへの不正アクセスが可能となります。ELBを利用することで、その背後にホストされているアプリケーションリソースを保護し、安全を確保できます。つまり、アプリケーションの主要な攻撃対象領域はELBとなります。
ELBセキュリティのベストプラクティス
ELBセキュリティについて直接議論する前に、AWSアカウントが適切に保護されていることを確認することが不可欠です。AWS Identity and Access Management(IAM)はアカウントセキュリティの中核をなします。アカウント内のリソースにどれほどセキュリティを適用しても、IAMへのアクセスを許せばすべてが無駄になります。アカウントへのアクセス制御を厳格に管理し、最小権限の原則を実装すること、およびすべてのアカウントで多要素認証(MFA)を必須とすることを確実に行ってください。
ロードバランサーにリスナーを追加する際は、クライアントとロードバランサー間の通信が暗号化されていることをサポートし、要求するように設定してください。選択したロードバランサーの種類に応じて、これを強制するにはTLSリスナーまたはHTTPSリスナーのいずれかを使用するのが最適です。
仮想プライベートクラウド(VPC)内では、内部向けおよび外部向けのELBを作成できます。VPC外部からの着信リクエストを受け付ける必要があるELBにのみ、パブリックIPアドレスを設定してください。VPC外部からのインバウンドを許可するためにALBを使用している場合、リスナーで認証を有効化し、すべての着信リクエストを検証することで、対象アプリケーションの認証負荷を軽減できます。
追加の保護層として、AWS WAFなどのWebアプリケーションファイアウォールを設定し、定義されたIPアドレス範囲、地理的場所、その他の基準に基づく着信リクエストを制限することをご検討ください。また、ネットワークアクセス制御リスト(ACL)を作成することで、VPCへのアクセス権限をさらに詳細に定義することも可能です。
セキュリティグループを使用したELBおよびアプリケーションの保護
VPC内では、セキュリティグループを作成してAWSリソースへのアクセスを定義できます。追加のセキュリティ層として、AWSはセキュリティグループのアクセスルールで明示的に許可されていない限り、リソースへのすべてのアクセスを拒否します。セキュリティグループルールにはプロトコルとポート番号の組み合わせが必要であり、それが適用されるリソースからのインバウンドまたはアウトバウンドトラフィックのいずれかに適用されます。セキュリティグループの設定責任者として、ルールはご希望に応じて広範にも狭くも設定できます。ベストプラクティスとしては、ポートとIPアドレスの範囲を可能な限り制限することが推奨されます。
ELBのターゲットグループには、ELBへの着信リクエストを制限するセキュリティグループを適用し、すべての着信リクエストがロードバランサー経由で送信されるようにしてください。さらに、ロードバランサーにセキュリティグループを追加することで、リクエストを送信できるクライアントを制限することも可能です。
次のステップ
AWS Elastic Load Balancersは、アプリケーションをシームレスかつ可能な限り安全にスケーリングするための重要なアーキテクチャ構成要素です。ご使用のユースケースに応じて、要件に最適なロードバランサーの種類を選択し、安全かつ高性能な環境を維持するためのセキュリティおよびアクセスルールの設定はお客様の責任となります。各種ロードバランシングソリューションに関するAmazonのドキュメントは、最新のユーザーガイドと推奨事項に基づいて常に更新されています。各オプションを検討される際には、それぞれの利点を十分に考慮し、お客様のニーズを満たすスケーラブルなソリューションを設計すると同時に、アプリケーションのセキュリティを維持してください。