AWS / SAP-C02

SAP-C02-066 · セクション 08 / タスク 2.3

Data in TransitのEncryption Strategy

TLS / HTTPS / AWS Certificate Manager / 証明書 / エンドツーエンド暗号化 / 転送中の暗号化

ゴール

通信を単に「HTTPS化」するのではなく、必要なデータフローをホップへ分解し、通常経路・バックエンド・オリジン・プライベート統合・フォールバックまで含めて平文区間の抜けが残っていないかを判断できるようにします。

転送中の暗号化要件
        ↓
必要なデータフロー
        ↓
ホップへ分解
        ↓
各ホップでTLS成立?
        ↓
中継点での復号を許容?
        ↓
証明書/ 信頼 / TLSポリシー確認
        ↓
代替 / 障害時経路も確認
        ↓
要件成立

1. HTTPS エンドポイントが1つあっても全経路暗号化とは限らない

転送中の暗号化では、データが通る経路をホップ単位で確認します。

クライアント
  │ HTTPS
  ▼
エッジ / ロードバランサー
  │ HTTP ?
  ▼
アプリケーション
  │ TLS ?
  ▼
バックエンドサービス

フロントエンドがHTTPSでも、バックエンド区間がHTTPなら「全ネットワークホップを暗号化」という要件は満たしません。

2. データフローをホップへ分解する

ホップ確認
クライアント → エッジ / フロントエンドHTTPS / TLS、フロントエンドTLSポリシー
エッジ / フロントエンド→ オリジンオリジンプロトコル、証明書/ 信頼
ロードバランサー → 対象バックエンドプロトコル、サービス固有TLS 動作
アプリケーション→ 内部サービス内部 TLS 要件の有無
障害 / 代替経路障害時だけHTTPへフォールバックしていないか

アーキテクチャ図上の矢印をそのまま「暗号化済み」とみなさず、各接続を独立して評価します。

3. 全ホップ暗号化と中間復号禁止は別要件

次の2つは同じではありません。

要件判断
ネットワーク上に平文ホップを作らないTLS終端後に再暗号化するアーキテクチャでも成立し得る
中継コンポーネントでペイロードを復号してはならない途中でTLSを終端しないパススルー可能なアーキテクチャを評価
終端 + 再暗号化クライアント ─TLS─> ロードバランサー ─TLS─> アプリケーションパススルー
クライアント ─────────TLS────────> アプリケーション中継点で復号しない

4. プライベート接続は転送中の暗号化を代替しない

プライベートサブネット、AWS PrivateLink、VPC リンク、Transit Gateway、AWS Direct Connectなどでパブリックインターネットを避けても、アプリケーションプロトコルがHTTPならTLSによるペイロード暗号化とは別です。

プライベート経路
≠
TLS 暗号化

要件が「プライベートネットワーク内を含むすべてのホップを暗号化」であれば、プライベート接続とは別にTLSを適用します。

5. ACM証明書は配置したホップだけを成立させる

AWS Certificate Managerで証明書を管理してフロントエンドTLSを成立させても、それだけでバックエンドTLSまで完成したとは判断しません。

クライアント
  │ HTTPS
  ▼
ALB
  ↑ ACM証明書
  │
  │ バックエンド区間は別確認
  ▼
アプリケーション

証明書管理の知識は、各TLS終端ポイントへ適用します。1枚の証明書が複数ホップを自動的に保護するわけではありません。

6. CloudFrontはビューワーとオリジンを別ホップとして確認する

CloudFrontではビューワー側とオリジン側は別接続です。

ビューワー ─HTTPS─> CloudFront
                     │
                     │ HTTPS ?
                     ▼
                   オリジン

ビューワープロトコルポリシーがHTTPSのみでも、オリジンプロトコルポリシーがHTTPならオリジン側は平文です。全ホップ暗号化要件ならオリジン側もHTTPSにします。

カスタムオリジンへHTTPS接続する場合は、CloudFrontがオリジン証明書の信頼性やドメイン名などを検証するため、TLS化だけでなくそのホップの信頼成立も確認します。

7. ALBではバックエンド暗号化とバックエンドの証明書検証を分ける

Application Load BalancerはHTTPS 対象を利用してバックエンド区間を暗号化できます。

クライアント ─HTTPS─> Aロードバランサー ─HTTPS─> 対象

ただしALBは対象証明書を検証しません。そのため、

バックエンドTLS 暗号化
≠
バックエンド証明書によるアイデンティティ検証

要件が「暗号化」だけなのか、「CA / ホスト名等によるバックエンドの証明書検証」まで求めるのかを分離します。

8. ALB バックエンドTLSポリシーはフロントエンドと同一とは限らない

フロントエンドリスナーがコンプライアンス要件を満たしていても、バックエンド接続が同じセキュリティポリシーを使うとは限りません。

ALBではバックエンドのセキュリティポリシーを独立して選択するのではなく、リスナーセキュリティポリシーのカテゴリに応じてAWS側がバックエンドポリシーを決定します。

フロントエンドのリスナーポリシー
        ↓
現在ALB 動作を確認
        ↓
バックエンドのセキュリティポリシー
        ↓
対象のプロトコル / 暗号スイートの互換性
        ↓
バックエンドTLS 要件成立?

具体的なポリシー名を固定暗記せず、現在サービス動作を確認します。

9. Amazon API Gateway フロントエンドHTTPSとプライベート統合は別

Amazon API GatewayのフロントエンドエンドポイントがHTTPSでも、プライベートバックエンドとの統合プロトコルは別に確認します。

クライアント ─HTTPS─> API ゲートウェイ
                     │
                     │ HTTP / HTTPS ?
                     ▼
                プライベートバックエンド

要件がバックエンドまでTLS必須なら、プライベート統合側でもHTTPS / TLSを明示的に成立させます。

10. リダイレクトとHTTPSのみを要件で分ける

制御意味
リダイレクト HTTPからHTTPSへ最初のHTTP リクエストを受け取り、HTTPSへ誘導する
HTTPSのみHTTP 接続自体を許可しない

要件が「アプリケーションデータはHTTPSへ誘導」でよいのか、「平文 HTTP 接続そのものを禁止」なのかで選択が変わります。

11. 証明書とTLS セキュリティポリシーを分ける

有効な証明書を配置しただけでは、TLS 1.2以上などのプロトコル要件は完成しません。

証明書
→ エンドポイントのアイデンティティ/ TLS成立要素

TLS セキュリティポリシー
→ TLS バージョン / 暗号スイートの許容範囲

コンプライアンス要件が明確なら、デフォルトに任せず対象サービスの現在のセキュリティポリシーとクライアント / バックエンド互換性を確認します。

12. 障害経路にも平文区間の抜けを残さない

通常時だけHTTPSでも、障害時にHTTPへフォールバックするなら「平文禁止」という要件は満たしません。

通常経路ロードバランサー ─HTTPS─> アプリケーション障害時経路ロードバランサー ─HTTP──> アプリケーション   ← 要件違反

ヘルスチェック、フォールバックリスナー、代替オリジン、復旧経路など、実際にトラフィックが通る可能性がある経路も確認します。

13. 候補比較

候補要件への適合
フロントエンドHTTPS + バックエンドHTTPインターネット側だけTLSなら成立。全ホップ暗号化では不十分
終端 + バックエンド再TLS全ホップ暗号化には有力。中間復号禁止には不適合
TLS パススルー中間で復号禁止なら有力
プライベート接続 + HTTPプライベート経路は満たせても転送中の暗号化を満たすとは限らない
HTTP → HTTPS リダイレクトHTTPS誘導には有効。HTTP 接続自体の禁止には不十分
フロントエンド証明書だけ配置バックエンドTLSやTLS バージョン要件は別確認

14. 判断フロー

転送中の暗号化要件
        ↓
必要なデータフローを列挙
        ↓
ホップへ分解
        ↓
各ホップでTLS必須?
        ↓
平文ホップあり?
        ↓
中継点での復号を許容?
        ↓
各ホップの証明書/ 信頼確認
        ↓
サービス固有TLS 動作確認
        ↓
TLS バージョン / 暗号スイート要件確認
        ↓
障害 / 代替経路確認
        ↓
平文区間の抜けなし
        ↓
要件成立

15. 混同ポイント

混同正しい判断
フロントエンドがHTTPSならバックエンドも暗号化済み各ホップを独立して確認
プライベートネットワークならTLS不要プライベート接続と転送中の暗号化は別
全ホップ暗号化なら中間で復号していないTLS終端ポイントでは復号される
ACM証明書があれば全ホップ TLS証明書を使用する終端ポイントごとに確認
HTTPSならサーバー証明書を必ず同じ方法で検証検証動作はサービス/ ホップごとに確認
証明書を配置すればTLS 1.2以上TLS バージョンはセキュリティポリシーで別確認
リダイレクトはHTTPを受け付けていない最初のリクエストはHTTP
フロントエンドTLSポリシーが適合ならバックエンドも同じバックエンドの現在サービス動作を確認

まとめ

転送中の暗号化
=
必要なデータフロー
+
ホップバイホップ TLS
+
終端要件
+
証明書/ 信頼
+
TLS セキュリティポリシー
+
障害時経路の検証

重要なのは「HTTPSを使っているか」ではなく、要件対象のすべての経路で平文区間の抜けがなく、必要な信頼 / TLSポリシーまで成立しているかです。

理解確認

このページの内容を13問で確認します。

理解確認13問へ →