TLS 終端

ロードバランサーや CDN で TLS を復号し、バックエンドとの通信負荷を軽減する構成パターン

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 終端の理解を深めるには関連書籍が参考になる。

関連用語