TLS 終端
ロードバランサーや CDN で TLS を復号し、バックエンドとの通信負荷を軽減する構成パターン
TLS 終端とは
TLS 終端 (TLS Termination) は、ロードバランサーや CDN で TLS (HTTPS) の暗号化/復号を処理し、バックエンドサーバーとの通信を平文 HTTP にする構成パターンである。バックエンドサーバーから TLS 処理の負荷を取り除き、証明書管理を一元化する。
[クライアント] ──HTTPS──→ [ALB / CloudFront] ──HTTP──→ [バックエンド]
↑ TLS 終端ポイント
なぜ TLS 終端が必要か
TLS のハンドシェイクと暗号化/復号は CPU を消費する。各バックエンドサーバーで TLS を処理すると、サーバーごとに証明書を配置・更新する必要があり、運用負荷が高い。TLS 終端をロードバランサーに集約することで:
- 証明書管理が 1 箇所で済む (ACM で自動更新)
- バックエンドの CPU 負荷が軽減される
- バックエンドの実装がシンプルになる (HTTP のみ対応)
AWS での TLS 終端
ALB + ACM
ALB が TLS を終端し、ターゲットグループへの通信は HTTP (ポート 80) で行う。ACM の証明書は自動更新されるため、証明書の期限切れを心配する必要がない。
CloudFront + S3
CloudFront が TLS を終端し、S3 オリジンへの通信は AWS 内部ネットワークで行う。静的サイトホスティングの標準構成だ。
TLS 終端の構成パターン
| パターン | TLS 終端 | バックエンド通信 | 用途 |
|---|---|---|---|
| TLS Termination | LB で終端 | HTTP (平文) | 一般的な Web アプリ |
| TLS Passthrough | LB は素通し | バックエンドで TLS 処理 | エンドツーエンド暗号化が必要 |
| TLS Re-encryption | LB で終端 + 再暗号化 | HTTPS (再暗号化) | コンプライアンス要件 |
セキュリティ上の考慮
TLS 終端後のバックエンド通信が平文になるため、VPC 内のプライベートサブネットで通信する。インターネットを経由しない限り、平文通信のリスクは低い。
コンプライアンス要件 (PCI DSS、HIPAA) でエンドツーエンド暗号化が求められる場合は、TLS Re-encryption または TLS Passthrough を使う。
バックエンドでの X-Forwarded ヘッダー
TLS 終端後、ALB はバックエンドに以下のヘッダーを付与する。
X-Forwarded-For: 203.0.113.50 # クライアントの IP
X-Forwarded-Proto: https # 元のプロトコル
X-Forwarded-Port: 443 # 元のポート
バックエンドは X-Forwarded-Proto を確認し、HTTPS でアクセスされたことを認識する。リダイレクト URL の生成やセキュリティヘッダーの設定に使う。
TLS 終端の理解を深めるには関連書籍が参考になる。