概要
AWS ANS試験の勉強にあたり、エンドツーエンドの暗号化について理解するための備忘録です。
なぜ Network Load Balancer (NLB) を選ぶのか?
ALB (Application Load Balancer) は HTTPS ターミネーションを行うため、ALB では「エンドツーエンドの暗号化」は実現できない。
NLB (Network Load Balancer) は TCP レベルで動作し、SSL ターミネーションをしないため、クライアントから EC2 までの完全な暗号化を維持できる。
ALB では クッキーを使ったスティッキーセッション をサポートするが、NLB では ソース IP を使ったスティッキーセッション を設定できる。
TCP レベルの負荷分散でスティッキーセッションを実現するには NLB が適している。
HTTPS のリクエストはどう処理するのか?
NLB は L4 (Transport Layer) の負荷分散 を行うため、TCP 443 のリクエストをそのまま EC2 に転送するだけ。
EC2 側で SSL/TLS の処理を行うので、エンドツーエンドの暗号化が維持される。
つまり、NLB 自体は HTTPS を「理解」しないが、TCP 443 のトラフィックをそのまま EC2 に渡すため、HTTPS 通信が維持される。
エンドツーエンドの実装例
- NLB を作成する
- ターゲットグループを作成
プロトコル: TCP
ポート: 443 - スティッキーセッション (セッションアフィニティ) を有効化
- EC2 インスタンスをターゲットグループに登録
- リスナーを作成
プロトコル: TCP
ポート: 443 - EC2 インスタンスに SSL 証明書をデプロイ
- EC2 側で HTTPS (SSL/TLS) を終端する
- エンドツーエンドの暗号化を実現!
ALBではだめなのか?
ALB を使うと、通常は ALB で HTTPS を終端 して、その後は HTTP で EC2 に転送される。
しかし、要件は「エンドツーエンドの暗号化」なので、ALB では不適切。
ALB に SSL パススルーの機能はない ため、HTTPS を維持するなら NLB を使うしかない。
まとめ
- HTTPS は「L7 (アプリケーション層) のプロトコル」なので、NLB は「理解しない」が、TCP 443 のトラフィックをそのまま転送できる。
- EC2 側で SSL/TLS を処理することでエンドツーエンドの暗号化が実現できる。
- スティッキーセッション (セッションアフィニティ) を IP ベースで実現するためには NLB が適している。