AWS ELB/Auto Scaling

ELB経由でクライアントからWebサーバーまでのすべての通信を暗号化するには、下記2つの方法があります。

○ELBとターゲットにサーバー証明書を導入する
クライアントとELB間、ELBとターゲット間で別の暗号化通信を行う方法です。暗号化接続はELBが終端となり、ELBから別の暗号化接続を確立して通信します。ELB、ターゲットに暗号化・復号による負荷がかかりますが、クライアントからターゲットまでの通信すべてを暗号化できます。ALB、CLBが対応しています。
クライアントとWebサーバー間の暗号化通信はHTTPSを利用します。

○ターゲットにサーバー証明書を導入する
ELBでは暗号化・復号せず、直接クライアントとターゲット間で暗号化通信を行う方法です。ターゲットに暗号化・復号による負荷が発生しますが、ELBによる暗号化・復号の遅延を発生させずに通信全てを暗号できます。NLB、CLBが対応しています。
クライアントとWebサーバー間の暗号化通信にHTTPSを利用しつつ、経由するELBはTCPを利用することにより、HTTPS通信がELBで暗号化・復号されずに通過します。

どちらの方法も、導入するサーバー証明書はAWS Certificate Manager(SSL/TLS証明書を管理するサービス)で管理されている証明書を利用できます。

ALBには、ALBに送られてきたリクエストを別のURLにリダイレクトする機能があります。例えば、ユーザーから「http://www.example.com」(HTTP)へ送られたリクエストを「https://www.example.com」(HTTPS)に変換することで、セキュアな通信が可能になります。HTTPのリクエストをHTTPSに変換するには、ALBでHTTPリスナーを作成し、HTTPSへリダイレクトするルールを設定します。下記の図は、HTTPリスナーのルール設定の例です。

ELBはターゲットグループ内の各ターゲットが正常に動作しているかを定期的にヘルスチェックで確認します。ターゲットから正常に応答が返ってくれば、ELBはそのターゲットへのルーティングを継続します。もしターゲットが異常であると判断された場合は、ELBはそのターゲットへのルーティングを停止します。

ELBにはロードバランシングの方式によって複数の種類があります。

ELBのうちHTTPSをサポートしており、WebSocketに対応しているのは「ALB」です。

ALBでパスベースのルーティングを使用するパスベースのルーティングは、クライアントがリクエストした接続先URLのパスに従ってルーティングできる機能

Auto Scalingでは、スケーリングの発生条件とスケールアウト/インのアクションを「スケーリングポリシー」に設定します。スケーリングポリシーのうち「ターゲット追跡スケーリング」は、1つのメトリクス(CPU使用率などシステムのパフォーマンスに関するデータ)が指定した目標値になるように、インスタンスを増減します。増減するインスタンス数はAWS側で調整されます。

Auto Scalingでは、スケーリングの発生条件とスケールアウト/インのアクションを「スケーリングポリシー」に設定します。スケーリングポリシーのうち「ステップスケーリング」は、1つのメトリクス(CPU使用率などシステムのパフォーマンスに関するデータ)に対する複数のしきい値に基づいて、インスタンスの増減を段階的に行います。

ライフサイクルフックは、スケーリング発生によるEC2インスタンスの起動または終了時に任意の処理を実行する機能です。例えば、スケールアウト(リソースの増加)によって新たに追加したインスタンスに初期化スクリプトを実行させたり、スケールイン(リソースの削減)によって終了するインスタンスのログを収集・退避させるといった処理を行えます。

ELBのうち固定IPアドレスを割り当てることができるのは「NLB」です。NLBをElasitc IPアドレス(固定のパブリックIPアドレス)と関連付けることによって、クライアントからNLB配下のサーバーに、NLBに関連付けられたElastic IPアドレスでアクセスできるようになります。サーバーへのアクセスをドメイン名ではなくIPアドレスで行いたい場合や、クライアントのアクセス先をIPアドレスで管理・制限している環境などで有用です。

ELB経由でクライアントからWebサーバーまでのインターネット通信を暗号化し、Webサーバーには暗号化・復号による負荷をかけないようにするには、以下の方法があります。

○ELBにサーバー証明書を導入する
クライアントとELB間で通信を暗号化し、ELBとターゲット間は平文の通信(暗号化されていない通信)を行う方法です。クライアントとELB間での通信の暗号化・復号をELBが行うため、ターゲットに暗号化・復号による負荷が発生しません。すべてのELBが対応しています。

ELBにサーバー証明書を導入する方法では、クライアントからELBまでの通信が暗号化されるため設問の条件「インターネット上の通信を暗号化する」を満たします。また、暗号化・復号はELBで行われるため、条件「Webサーバーには暗号化・復号による負荷がかからないようにする」にも合致します。

ALBではCLBでは実現できなかった、パスベースのルーティングに対応しています。パスベースのルーティングとは、クライアントがリクエストした接続先URLのパスに従ってルーティングできる機能です。例えば、クライアントの接続先URLが「http://www.example.com/web1/」の場合はWebサーバー1にアクセスさせて、「http://www.example.com/web2/」の場合はWebサーバー2にアクセスさせることができます。ALBではコンテンツごとにELBを用意する必要がなくなるので、5台のCLBを1台のALBに置き換えることによりコスト削減が可能です。5台のCLBで分散していた分の負荷が1台のALBに集中することになりますが、ELBにはリクエスト数の増減に応じてELB自身が自動的にスケーリングする機能があります。ELBへの負荷が増大しても自動的に自身をスケールアウトして対応するので、サービスのパフォーマンスを落とすことなくコスト削減ができます。

Auto Scalingのヘルスチェックの猶予期間は、リソースが起動してから初回のヘルスチェックまでの待機時間です。ヘルスチェックの猶予期間を設定することにより、リソースが起動してアプリケーションなどが立ち上がる前にヘルスチェックが実行されてしまい、ヘルスチェックが異常になってしまうのを防ぎます。

Auto Scalingグループでスケールインが発生した時に、どの優先順位でリソースを削除するのかを「終了ポリシー」にて設定できます。リソース数が最も多いAZ内で、以下の中から選択した優先順位でリソースが削除されます。
・最も起動時刻が古いリソース
・最も起動時刻が新しいリソース
・最も作成時刻が古い起動テンプレートを利用して起動されたリソース
・次の課金タイミングが最も早いリソース
デフォルトの場合は「最も作成時刻が古い起動テンプレートを利用して起動されたリソース」が選択されます。
スケールイン時に特定のリソースが終了されないようにするには、「インスタンスの保護」を有効にする必要があります。

リソースがEC2インスタンスの場合、Auto Scalingのヘルスチェックのタイプには「EC2」と「ELB」があります。「EC2」はインスタンスのステータスチェックの結果を確認し、「ELB」は指定した接続先への応答確認をします。Auto Scalingのヘルスチェックで異常となったリソースは、自動的に終了されます。デフォルトでは「EC2」が有効、「ELB」は無効になっていますが、「EC2」「ELB」ともに有効にすることが推奨されています。

Auto Scalingグループでスケールアウトが発生した時に起動するリソースは、Auto Scalingの「起動テンプレート」で設定します。例えばAmazon EC2の場合は、AMIやインスタンスタイプ、セキュリティグループなどEC2インスタンスを作成するための設定と同じ項目を指定します。

Auto Scalingグループは、スケーリング対象となるAWSリソースを管理するためのグループです。最小・最大・希望リソース数などのパラメータに基づいて、AWSリソースのスケーリング(スケールアウト/イン)を自動的に行います。Auto Scalingのヘルスチェックにより、Auto Scalingグループ内の正常なリソース数が必要なリソース数より下回った場合、自動的に新しいリソースが起動されます。

通常のサーバー証明書は、一つのパブリックIPアドレスを持つサーバーに対して一つのドメイン名が紐づきます。例えば「example.com」と「example.co.jp」の2つのドメイン名を持つWebサーバーの場合、ドメイン名ごとに異なるパブリックIPアドレスを取得してサーバー証明書を導入する必要があります。しかしELBからドメイン名を複数持つWebサーバーへ通信を転送しようとすると、クライアントから見たWebサーバーのパブリックIPアドレスは窓口であるELBのパブリックIPアドレスしかないため、通常のサーバー証明書では対応できません。SNI(Server Name Indication)は、暗号化通信で使用するサーバー証明書をパブリックIPアドレスではなくドメイン名によって判断する技術です。SNIに対応したELBに複数のサーバー証明書を導入すると、ELBが宛先ドメイン名から適切なサーバー証明書を判断してサーバーへ通信を転送します。SNIはALBとNLBが対応しています。

[SNIを利用したELB経由の暗号化通信のイメージ]

ELBのアクセスログは、ELBに送信されるリクエストを記録しログをAmazon S3に保存します。記録されたログはトラフィックの分析やコンプライアンスの監査に利用できます。アクセスログには、クライアントのアクセス日時、接続元IPアドレス、ポート番号、ステータスコードなどクライアントの接続情報が記録されます。

この記事は役に立ちましたか?

もし参考になりましたら、下記のボタンで教えてください。

関連記事

コメント

この記事へのコメントはありません。