SJ blog
security
S

信頼度ランク

S 公式ソース確認済み
A 成功実績多数・失敗例少数
B 賛否両論
C 動作未確認・セキュリティリスク高
Z 個人所感

CloudFrontセキュリティをSCS視点で完全理解する

CloudFrontのHTTPS、OAC、WAF、Shield、署名URL、Origin Shield、ログ監査をSCS-C03で判断できる粒度まで整理する。

一言結論

CloudFrontセキュリティはCDN設定だけではなく、エッジ防御、オリジン直アクセス遮断、限定配信、DDoS耐性、監査証跡をひとつの設計として読む。SCSでは「CloudFrontを置いたから安全」ではなく、OACやWAFログまで含めて説明できるかが問われる。

Knowledge Graph 3D

ドラッグ: 回転 / ホイール: ズーム

3D記事アーキテクチャ

CloudFrontをエッジ、オリジン、監査の3層に分け、各層で防ぐ脅威と残るリスクを明確化する。

Viewer Edge Layer

責務: HTTPS強制、証明書、レスポンスヘッダー、地理制限、署名URLで利用者入口を制御する

障害影響範囲: 通信経路や限定配信の要件を満たせず、平文通信や不正閲覧が残る

  • Viewer protocol policy
  • Response headers policy
  • Signed URL/Cookie
  • Geo restriction

Threat Filtering Layer

責務: AWS WAFとShieldでL7攻撃、Bot、大量リクエスト、DDoSをエッジ側で緩和する

障害影響範囲: オリジンが攻撃トラフィックを直接受け、可用性とコストのリスクが増える

  • AWS WAF Web ACL
  • Managed rule groups
  • Rate-based rules
  • Shield Advanced

Origin Protection Layer

責務: OAC、カスタムヘッダー、セキュリティグループ、Origin Shieldでオリジン到達経路を限定する

障害影響範囲: CloudFrontを迂回した直アクセスが成立し、WAFや署名URLを回避される

  • Origin Access Control
  • S3 bucket policy
  • ALB origin restriction
  • Origin Shield

境界契約(切り分けポイント)

  • Viewer -> CloudFront

    契約: Viewer protocol policyでHTTPS方針を決め、必要に応じてmTLSや署名URLで閲覧主体を制限する

    検証: HTTPでアクセスした場合にredirectまたは拒否されることを確認する

  • CloudFront -> WAF/Shield

    契約: 入口制御はCloudFront distributionに紐づくWeb ACLとDDoS保護で実施し、検知ログを残す

    検証: WAF sampled requestsとCloudWatch metricsでルール発火を確認する

  • CloudFront -> Origin

    契約: S3やALBはCloudFrontからの正規リクエストのみ受け付ける

    検証: S3/ALBの公開URLへ直接アクセスして拒否されることを確認する

ビルド検証

  • OAC付きS3 originへCloudFront経由でのみアクセスできる
  • WAFログでブロック理由を説明できる
  • CloudTrailでCloudFront/WAF設定変更を追跡できる

この記事はAWS公式ドキュメントを前提に、SCS-C03で問われる「CloudFrontを使ったセキュリティ設計」を判断できる粒度まで分解します。

CloudFrontはCDNです。ただしSCS視点では、単なる高速化サービスではありません。CloudFrontはインターネットからアプリケーションへ入る通信を、エッジで受け止め、検査し、オリジンへ渡すためのセキュリティ境界です。

試験で大事なのは「CloudFrontを使う」ではなく、次の問いに答えられることです。

  • ViewerからCloudFrontまでの通信は安全か
  • CloudFrontで不正リクエストを止めているか
  • オリジンへ直接アクセスできないか
  • 限定コンテンツを期限付きで配信できるか
  • DDoSやBotに対して可用性を守れるか
  • ログでブロック理由と設定変更を説明できるか

CloudFrontセキュリティの全体図

まず結論

CloudFrontセキュリティの正解パターンは、多くの場合この形です。

Viewer
  -> HTTPS only / signed URL / signed cookie
  -> CloudFront
  -> AWS WAF Web ACL
  -> Shield Standard or Shield Advanced
  -> OAC or origin restriction
  -> S3 / ALB / API origin
  -> CloudFront logs + WAF logs + CloudTrail

特にS3 originの場合、SCSでは OACを使ってS3バケットを非公開にし、CloudFront distributionからのアクセスだけを許可する という判断が重要です。古いOAIを知っていても、現在の推奨はOACです。OACはSSE-KMSや一部の動的S3リクエストにも対応し、OAIより広いユースケースを扱えます。

CloudFrontで守る対象を分ける

CloudFrontのセキュリティ設定は、守る対象で分けると理解しやすくなります。

守る対象代表機能SCSでの読み方
通信経路Viewer Protocol Policy、Origin Protocol Policy、ACM証明書HTTPS必須、証明書管理、平文通信排除
アプリ入口AWS WAF、rate-based rule、managed rule groupSQLi、XSS、Bot、大量アクセスをL7で制御
DDoS耐性Shield Standard、Shield Advanced、Route 53、ELB標準防御か、SRT/コスト保護まで必要か
オリジンOAC、S3 bucket policy、ALB制限、Origin ShieldCloudFront迂回を禁止する
限定配信Signed URL、Signed Cookie会員制、期限付き、IP条件付き配信
証跡CloudFront logs、WAF logs、CloudTrail攻撃・設定変更・誤検知を説明する

「CloudFrontで守る」と言っても、通信暗号化とWAFとOACは別物です。HTTPSだけではSQLiは止まりません。WAFだけではS3直アクセスは止まりません。OACだけではBotを制御できません。ここを混同するとSCSの選択肢で負けます。

CloudFrontセキュリティ判断ツリー

Viewer側の防御: HTTPSとレスポンスヘッダー

Viewer Protocol Policyでは、ViewerがCloudFrontへHTTPで来たときの扱いを決めます。

方針動き使いどころ
allow-allHTTP/HTTPS両方許可原則避ける。検証用途程度
redirect-to-httpsHTTPをHTTPSへリダイレクト一般的なWebサイト
https-onlyHTTPを拒否API、認証済みコンテンツ、高セキュリティ要件

SCSで「通信を暗号化」「平文アクセスを許可しない」と出たら、まず redirect-to-httpshttps-only を見ます。ユーザー体験を保ちながら移行するならリダイレクト、APIや厳格要件なら拒否です。

CloudFrontのResponse Headers Policyでは、レスポンスにセキュリティヘッダーを追加できます。

Strict-Transport-Security
Content-Security-Policy
X-Content-Type-Options
X-Frame-Options
Referrer-Policy

ここでの注意点は、CloudFrontがヘッダーを付けても、アプリケーションの脆弱性が消えるわけではないことです。CSPはXSSの影響を抑える補助線で、入力検証や出力エスケープの代替ではありません。SCSでは「最も包括的な対策」を問われたとき、ヘッダーだけを選ばない判断が必要です。

AWS WAF: L7攻撃をエッジで止める

CloudFrontにAWS WAF Web ACLを関連付けると、SQLインジェクション、XSS、既知の悪意ある入力、Bot、大量アクセスなどをエッジで検査できます。

基本構成は次のようになります。

AWSManagedRulesCommonRuleSet
AWSManagedRulesKnownBadInputsRuleSet
AWSManagedRulesAmazonIpReputationList
Rate-based rule
必要に応じて Bot Control / SQLi rule / Anonymous IP list

試験で大事なのは、WAFは万能IPSではなく HTTP(S)リクエストのレイヤー7制御 だという点です。SYN floodやUDP floodのようなL3/L4のDDoSはWAFではなくShield側の話です。

WAFルールの設計では、最初から全ブロックにしないことも実務上重要です。まず COUNT で観測し、sampled requestsやログを見て誤検知を確認し、問題がなければ BLOCK に上げます。

検出したい攻撃が明確
  -> managed rule groupをCOUNTで導入
  -> WAF logsとsampled requestsを確認
  -> false positiveを例外化
  -> BLOCKに変更

SCSの問題文で「誤検知を避けながら段階的に導入」「本番影響を最小化」と出たら、COUNTモードやログ分析を含む選択肢が強くなります。

Shield: DDoSに対する判断

CloudFrontはShield Standardの保護対象です。Shield Standardは追加費用なしで利用でき、一般的なL3/L4 DDoSを自動緩和します。

一方、Shield Advancedを選ぶ条件は明確です。

  • DDoS Response Team、つまりSRTの支援が必要
  • DDoSによるスケールアウト費用の保護が必要
  • 高度な可視性やイベント対応が必要
  • CloudFrontだけでなくALB、NLB、Elastic IP、Global Acceleratorなども保護対象にしたい
  • WAFと連携したアプリケーション層DDoS緩和が必要

「最もコスト効率よくDDoS耐性を高める」なら、まずCloudFront、Route 53、ELB、Auto Scaling、WAFを組み合わせます。いきなりShield Advancedを選ぶのは、SRTやコスト保護が問題文に明記されているときです。

OAC: S3オリジンを直接触らせない

S3をCloudFrontのoriginにする場合、最も重要なのは S3バケットをpublicにしない ことです。CloudFront経由では見えるが、S3 URLを直接叩いても見えない状態にします。

OACの基本は次の通りです。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowCloudFrontServicePrincipalReadOnly",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudfront.amazonaws.com"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::example-bucket/*",
      "Condition": {
        "StringEquals": {
          "AWS:SourceArn": "arn:aws:cloudfront::123456789012:distribution/E123ABC456DEF"
        }
      }
    }
  ]
}

ポイントは、PrincipalがCloudFrontサービスプリンシパルで、Conditionにdistribution ARNを入れることです。これにより、別のCloudFront distributionや直接S3アクセスからの利用を防ぎます。

OACには落とし穴があります。

  • S3 static website endpointにはOACを使えない
  • OACでS3 originを保護するなら、通常のS3 REST endpointをoriginにする
  • 推奨設定はリクエストに常に署名する設定
  • S3 Object OwnershipはBucket owner enforcedが基本
  • SSE-KMSを使う場合はKMS key policy側でもCloudFront/OAC経由の利用を考える

SCSでは「CloudFrontを置いたのにS3へ直接アクセスできる」という問題が出ます。この場合の正解はキャッシュ設定ではなく、OACとS3 bucket policyです。

ALBやAPIをオリジンにするとき

ALBをoriginにする場合、OACのようにS3専用の署名機構で閉じるわけではありません。よく使うのは次の設計です。

  • CloudFrontからoriginへカスタムヘッダーを付与
  • ALBまたはアプリ側でそのヘッダーを検証
  • ALBのSecurity GroupでCloudFront managed prefix listからの通信だけ許可
  • origin protocol policyをHTTPS onlyにする
  • 必要に応じてorigin custom headerの値をSecrets Manager等で管理する

ただし、カスタムヘッダーは「秘密値」ではあるものの、漏れた場合に再利用されます。高い要件では、ALB側WAF、認証、mTLS、アプリケーション認可も合わせます。

CloudFrontの署名URLと署名Cookieは、限定配信のための機能です。

機能向くケース
Signed URL1ファイル単位、ダウンロードリンク、期限付き共有
Signed Cookie複数ファイル、会員エリア、動画配信

署名には期限を含められます。Custom policyを使うと、期限だけでなく開始時刻やIPアドレス条件も表現できます。SCSでは「S3 presigned URL」と混同しないことが重要です。

S3 presigned URL:
  S3 APIに対する期限付きURL。CloudFrontのキャッシュやWAFを通らない構成になりやすい。

CloudFront signed URL:
  CloudFront distributionに対する期限付きURL。WAF、ログ、OACと組み合わせやすい。

会員向け動画や教材のようにCloudFrontで配信しつつS3を非公開にしたいなら、CloudFront signed URLまたはsigned cookieとOACの組み合わせが強いです。

Origin Shield: セキュリティというより可用性の補助

Origin ShieldはCloudFrontのキャッシュ階層を追加し、originへの同時到達を減らします。直接の認可機能ではありませんが、SCSでは可用性・DDoS耐性・origin負荷軽減の文脈で効きます。

Origin Shieldが効く例は次の通りです。

  • 人気ファイルにアクセスが集中する
  • originがオンプレミスや単一リージョンで弱い
  • 複数Edgeから同じoriginへ同時取得が走る
  • キャッシュヒット率を上げたい

ただし、Origin ShieldはWAFの代替ではありません。不正リクエストを判断してブロックする機能ではなく、origin loadを下げるキャッシュ層です。

ログと監査

SCSで「検出」「調査」「証跡」が絡むときはログ設計まで見ます。

ログ見るもの
CloudFront standard logs / real-time logsリクエスト、ステータス、キャッシュヒット、Viewer情報
AWS WAF logsどのルールがブロックまたはCOUNTしたか
CloudTrailCloudFront、WAF、Shield、S3 bucket policyの設定変更
CloudWatch metrics4xx/5xx、WAF blocked requests、DDoS兆候

WAFログではAuthorizationやCookieをredactする設計も重要です。セキュリティログだからといって、機微情報をそのまま保存してよいわけではありません。

よくあるユースケース

S3静的サイトを安全に配信したい

推奨は、S3 bucketをprivateにし、CloudFront OACを使い、CloudFront経由だけで配信する構成です。S3 website endpointのリダイレクト機能が必要な場合はOACが使えないため、設計を分けます。

S3 private bucket
  + CloudFront OAC
  + bucket policy with AWS:SourceArn
  + Viewer HTTPS redirect
  + Response headers policy

APIをBotやSQLiから守りたい

CloudFrontをAPIの前段に置き、WAF Web ACLを関連付けます。Bot Control、rate-based rule、IP reputation、managed rule groupを段階的に導入し、CloudWatch metricsとWAF logsで調整します。

会員限定動画を配信したい

CloudFront signed cookieが向いています。複数ファイルをまとめて閲覧させるため、ファイルごとにURLを発行するより扱いやすいです。S3はOACで非公開にします。

DDoSでコスト増が心配

まずCloudFront、Route 53、ELB、Auto Scalingで吸収面を広げます。SRT支援、攻撃可視性、コスト保護が必要ならShield Advancedを選びます。

SCSでの引っかけ

問題文早い判断
S3 originへ直接アクセスできてしまうOACとbucket policy
SQLiやXSSをCloudFront前段で止めたいAWS WAF managed rules
L3/L4 DDoSを無料で緩和したいShield Standard
SRTとDDoSコスト保護が必要Shield Advanced
会員限定の複数ファイル配信Signed Cookie
1ファイルの期限付きダウンロードSigned URL
origin負荷を減らしたいOrigin Shield
HTTPSヘッダーをCloudFrontで付けたいResponse Headers Policy

試験直前チェック

  • CloudFrontにWAFを付けても、origin直アクセスを閉じなければ迂回される
  • S3 originはOAIよりOACが現在の推奨
  • OACはS3 website endpointには使えない
  • WAFはL7制御、ShieldはDDoS緩和
  • Shield AdvancedはSRT、コスト保護、高度な可視性がキーワード
  • Signed URL/CookieはCloudFront側の限定配信で、S3 presigned URLとは違う
  • キャッシュキーに認可に関係するヘッダーやCookieを入れ忘れると情報漏えいにつながる
  • WAFログでは機微ヘッダーのredactionを検討する

参考