🔒 CloudFront HTTPSハンドシェイク完全ガイド

レストランの入店セキュリティチェックで理解する!証明書検証と502/504エラーの違い

🏢 高級レストランの入店プロセスで例えると超わかりやすい!

CloudFrontとオリジン間のHTTPS通信は「高級レストランの入店セキュリティチェック」と同じ!

お客様(ユーザー)がレストラン(CloudFront)に来店し、レストランがキッチン(オリジンサーバー)に注文を確認する際、
厳格な本人確認と身分証明書のチェックが行われます。

この セキュリティチェックの流れ エラーの違い を完全マスターしましょう✨

🍽️ レストランのたとえで全体像を理解

👨‍🍳 CloudFront = レストラン

お客様(ユーザー)の注文を受け付ける場所。
キッチン(オリジン)に料理を作るよう依頼します。

役割: お客様とキッチンの仲介役として、安全に通信できるかを確認する

🔪 オリジンサーバー = キッチン

実際に料理(コンテンツ)を作る場所。
EC2、ALB、S3などの実体があるサーバー。

役割: 正しい身分証明書を持って、安全に料理を提供できることを証明する

🎫 SSL/TLS証明書 = 身分証明書

キッチン(オリジン)が本物であることを証明する書類。
運転免許証のように、信頼できる機関が発行。

役割: 「私は本物のキッチンです」という証明

🤝 HTTPSハンドシェイクの7ステップ

📞
STEP 1
CloudFrontからオリジンへ接続開始
CloudFront(レストラン)がオリジン(キッチン)に接続を開始します。
「こんにちは、注文を受け付けたいのですが、そちらは本物のキッチンですか?」
🍽️ たとえ:レストランのスタッフが内線電話でキッチンに呼びかける
📜
STEP 2
オリジンがSSL証明書を提示
オリジン(キッチン)がSSL/TLS証明書をCloudFrontに提示します。
「はい、こちらが私の身分証明書(証明書)です。信頼できる機関が発行したものです」
🍽️ たとえ:キッチンスタッフが運転免許証や社員証を見せる
🔍
STEP 3
CloudFrontが証明書チェーンを検証
CloudFrontは受け取った証明書が本物かどうか、証明書チェーンを辿って確認します。
確認内容:
• 証明書が信頼できる認証局(CA)から発行されているか
• 証明書の有効期限が切れていないか
• ドメイン名が一致しているか
• 証明書が取り消されていないか
🍽️ たとえ:レストランが免許証の発行元、有効期限、写真を確認する
STEP 4
証明書検証が成功
すべての検証項目をクリアすると、CloudFrontはオリジンを信頼します。
「確認できました。あなたは本物のキッチンですね。では安全に通信しましょう」
🍽️ たとえ:身分証明書が本物だと確認できて、信頼関係が成立
🔑
STEP 5
暗号化キーの交換
CloudFrontとオリジンの間で、通信を暗号化するための秘密の鍵を交換します。
「これからは、この秘密の暗号を使って会話しましょう」
🍽️ たとえ:レストランとキッチンだけが分かる暗号言語を決める
🔐
STEP 6
暗号化通信の開始
ハンドシェイクが完了し、すべての通信が暗号化されます。
これ以降、CloudFrontとオリジン間のデータは第三者に読み取られません。
🍽️ たとえ:レストランとキッチンが秘密の暗号で会話を開始
🍽️
STEP 7
安全なコンテンツ配信
CloudFrontはオリジンから安全にコンテンツを取得し、ユーザーに配信します。
すべての通信が暗号化されているため、盗聴や改ざんの心配はありません。
🍽️ たとえ:キッチンから料理が安全に届き、お客様に提供される

🔗 証明書チェーンの検証プロセス

証明書の信頼性を確認するために、CloudFrontは「信頼の連鎖」を辿ります

🏛️ レベル1: ルート認証局(Root CA) 最高の信頼

役割: 信頼の最上位。政府が発行するパスポートのようなもの。
例: DigiCert、GlobalSign、Let's Encryptなど
特徴: ブラウザやOSに最初から組み込まれている信頼されたCA

🍽️ レストランのたとえ

国が認定した最高権威の調理師免許センター。ここが認めれば誰もが信頼する

🏢 レベル2: 中間認証局(Intermediate CA) 信頼

役割: ルートCAから権限を委譲された認証局。
例: 実際にサーバー証明書を発行する組織
特徴: ルートCAの秘密鍵を守るため、実際の発行作業を担当

🍽️ レストランのたとえ

最高権威から認定を受けた地域の調理師免許センター

🖥️ レベル3: サーバー証明書(End Entity Certificate) 検証対象

役割: 実際のウェブサーバーに設置される証明書。
例: example.comのための証明書
特徴: ドメイン名、有効期限、公開鍵などの情報を含む

CloudFrontの検証:
1️⃣ このサーバー証明書を確認
2️⃣ 中間CA証明書で署名を検証
3️⃣ ルートCAまで辿って最終的な信頼を確認
4️⃣ すべての証明書が有効期限内か、失効していないかをチェック

🍽️ レストランのたとえ

キッチンスタッフが持っている調理師免許証。この免許証が本物かを、発行元を辿って確認する

⚠️ 502 Bad Gateway vs 504 Gateway Timeout

502
Bad Gateway

🔍 何が起きている?

CloudFrontがオリジンから 無効な応答 を受け取った、
またはオリジンが 正しく応答できない 状態です。

❌ 主な原因

  • SSL/TLS証明書の問題
    • 証明書の期限切れ
    • 証明書チェーンが不完全
    • ドメイン名の不一致
    • 自己署名証明書を使用
  • オリジンサーバーの問題
    • HTTPステータスコードが異常
    • アプリケーションエラー
    • 不正なレスポンスヘッダー
  • ネットワーク設定
    • セキュリティグループでブロック
    • オリジンのポートが閉じている
🍽️ レストランのたとえ

キッチンに内線電話をかけたら、 身分証明書が偽造されていた
または 有効期限が切れていた ため、注文を受け付けられない状態。

「あなたの身分証明書は無効です。料理は提供できません」

🔧 解決方法

  • SSL証明書の有効期限を確認
  • 証明書チェーンが正しく設定されているか確認
  • ドメイン名が証明書と一致しているか確認
  • オリジンサーバーのログを確認
  • セキュリティグループの設定を確認
504
Gateway Timeout

🔍 何が起きている?

CloudFrontがオリジンに接続を試みたが、
制限時間内に応答が返ってこなかった 状態です。

❌ 主な原因

  • オリジンサーバーの過負荷
    • CPUやメモリが100%に到達
    • 同時接続数が上限に達した
    • データベースクエリが遅い
  • ネットワークの問題
    • オリジンへの経路が不安定
    • ファイアウォールがパケットを破棄
    • 帯域幅不足
  • アプリケーションの遅延
    • 重い処理が完了しない
    • 外部APIの応答待ち
    • 無限ループやデッドロック
🍽️ レストランのたとえ

キッチンに内線電話をかけたが、 いつまで待っても応答がない 状態。
キッチンが忙しすぎて電話に出られない、または電話線が切れている。

「もしもし?…もしもし?…応答がありません。時間切れです」

🔧 解決方法

  • オリジンサーバーのリソース使用状況を確認
  • Auto Scalingで容量を増やす
  • CloudFrontのタイムアウト設定を調整
  • 遅いクエリやプロセスを特定して最適化
  • ネットワーク接続性を確認

🔧 シーン別トラブルシューティング

📜 証明書エラーの対処

  • 期限切れ: 証明書を更新してオリジンに再デプロイ
  • ドメイン不一致: 証明書のCNやSANにドメインを追加
  • チェーン不完全: 中間証明書を正しく設置
  • 自己署名: 信頼されたCAから証明書を取得

⏱️ タイムアウトの対処

  • オリジン側: サーバーのスケールアップ/アウト
  • CloudFront側: Origin Response Timeoutを延長(最大60秒)
  • アプリ側: 遅いクエリを最適化、キャッシュを活用
  • モニタリング: CloudWatch Logsで応答時間を監視

🔍 デバッグの方法

  • 証明書確認: openssl s_clientコマンドで検証
  • ログ確認: CloudFront/ALB/EC2のログを調査
  • メトリクス確認: Origin Latency、Error Rateを監視
  • 直接テスト: オリジンに直接アクセスして問題を切り分け

🛡️ 予防策

  • 証明書の自動更新: AWS Certificate Manager(ACM)を使用
  • ヘルスチェック: ALBやRoute 53でオリジンを監視
  • アラート設定: エラー率が上昇したら通知
  • 負荷テスト: 定期的にピーク時の負荷をシミュレーション
💡 502と504を見分けるコツ
🔴 502 = 「応答が間違っている」「身分証明書が無効」
オリジンは何か返してきたが、その内容が不正または無効。証明書エラー、アプリケーションエラーなど。
レストランがキッチンスタッフの身分を確認できない状態

🟠 504 = 「応答が遅すぎる」「電話に出ない」
オリジンが何も返してこない、または時間がかかりすぎる。タイムアウト、サーバー過負荷など。
レストランがキッチンに電話しても誰も出ない状態

📊 統計から見分けるヒント:
• 502が 突然 発生 → 証明書更新忘れ、設定変更ミスの可能性
• 504が 徐々に増加 → サーバー負荷上昇、リソース不足の可能性
• 504が 特定の時間帯 に集中 → ピークタイムの容量不足

🎓 まとめ:CloudFront HTTPS通信の全体像

🤝 ハンドシェイク

CloudFrontとオリジンが安全に通信するための 7ステップの儀式
身分証明書の確認と暗号化キーの交換を行う。

🔗 証明書チェーン

信頼の連鎖 を辿って証明書を検証。
ルートCA → 中間CA → サーバー証明書の順に確認する。

⚠️ 502エラー

無効な応答 証明書エラー
身分証明書が偽物、期限切れ、ドメイン不一致など。

⏱️ 504エラー

タイムアウト 応答なし
サーバー過負荷、ネットワーク問題、処理の遅延など。

Created by SSuzuki1063

AWS SAP Learning Resources