CloudFront を本番運用する際の設計・セキュリティ・パフォーマンス・コスト・運用の観点ごとのベストプラクティスをまとめたもの。


目次


1. オリジン保護(CloudFront を経由しないアクセスを防ぐ)

オリジン種別推奨方式
S3 バケットOAC(Origin Access Control) を使用。旧方式の OAI は新規利用しない。バケットはパブリックアクセスブロックを有効にし、バケットポリシーで AWS:SourceArn に対象ディストリビューションを指定する
ALB / EC2 / NLBVPC オリジン を使用し、オリジンをプライベートサブネットに置いてインターネットから隠す。クロスアカウント構成・WebSocket・デュアルスタックにも対応
Lambda 関数 URLOAC を使用して署名付きリクエストのみ受け付ける
その他のカスタムオリジンカスタムヘッダー(シークレット値をローテーション)+ オリジン側 WAF / SG で検証。セキュリティグループには AWS マネージドプレフィックスリスト com.amazonaws.global.cloudfront.origin-facing を使う。より強固にするならオリジン向け mTLS
  • S3 は「静的ウェブサイトホスティングのエンドポイント」ではなく REST エンドポイント+OAC を使う(パブリック公開が不要になる)
  • SPA のルーティングはカスタムエラーレスポンス、または CloudFront Functions でのパス書き換えで対応

2. セキュリティ

TLS / HTTPS

  • ビューワープロトコルポリシーは Redirect HTTP to HTTPS または HTTPS Only
  • セキュリティポリシーは TLSv1.2_2021 以上(要件が許せば TLS 1.3 系)
  • オリジンへの通信も HTTPS Only。オリジン証明書は信頼された CA 発行のものを使う
  • 証明書は ACM(us-east-1) で発行し自動更新に任せる
  • 必要に応じてビューワー mTLS(クライアント証明書認証)を利用

レスポンスヘッダー

  • レスポンスヘッダーポリシー で以下を付与(マネージドの SecurityHeadersPolicy が出発点として便利)
    • Strict-Transport-Security
    • Content-Security-Policy
    • X-Content-Type-Options: nosniff
    • X-Frame-Options / Referrer-Policy
  • CORS はレスポンスヘッダーポリシーで一元管理する

AWS WAF / DDoS

  • ディストリビューションに AWS WAF を関連付ける
    • AWS マネージドルール(Core rule set, Known bad inputs, IP reputation など)
    • レートベースルールで L7 DDoS / 総当たり対策
    • 必要に応じて Bot Control、CAPTCHA / Challenge
  • AWS Shield Standard は自動適用。重要サービスは Shield Advanced を検討
  • 地理的制限が必要なら CloudFront の Geo Restriction または WAF の地域ルール

アクセス制御

  • 有料・限定コンテンツは 署名付き URL / 署名付き Cookie
    • キーグループ(信頼されたキーグループ)を使用。ルートアカウントの CloudFront キーペアは使わない
    • ハッシュアルゴリズムは SHA-256 を選択
  • トークン検証などの軽量な認可は CloudFront Functions で実装

3. キャッシュ戦略

ポリシーの使い分け

  • キャッシュポリシー(キャッシュキーに含めるもの)と オリジンリクエストポリシー(オリジンに転送するだけのもの)を分離する
  • キャッシュキーに含めるヘッダー・Cookie・クエリ文字列は 必要最小限 に。不要な値を含めるとキャッシュヒット率が大きく下がる
  • 可能な限り マネージドポリシー を利用(CachingOptimized、CachingDisabled、AllViewer など)
  • レガシーの「キャッシュ設定(Forwarded values)」は使わない

TTL と Cache-Control

  • オリジン側で Cache-Control を適切に返し、CloudFront の Min / Default / Max TTL はその範囲を制御する役割にする
  • 静的アセットは ファイル名にハッシュを含める(バージョニング) + 長期 TTL(例: max-age=31536000, immutable)
  • HTML など頻繁に変わるものは短い TTL、または stale-while-revalidate / stale-if-error を活用
  • 動的 API は CachingDisabled を使い、ビヘイビアを分ける

ヒット率の向上

  • Origin Shield を有効化し、オリジンに最も近いリージョンを指定(オリジン負荷軽減・ヒット率向上)
  • 圧縮(Gzip / Brotli)を有効化し、キャッシュポリシーで Accept-Encoding の正規化を有効にする
  • クエリ文字列や Cookie の正規化は CloudFront Functions で行う
  • CloudWatch の CacheHitRate を定常監視し、キャッシュ統計レポートで低ヒットのパスを特定する

無効化(Invalidation)

  • 無効化は最後の手段。基本は ファイル名バージョニング で対応
  • 関連コンテンツをまとめて消す必要がある場合は キャッシュタグによる無効化 を活用
  • ワイルドカード(/*)の乱用は避ける(コスト・オリジン負荷の急増)

4. パフォーマンス

  • HTTP/2・HTTP/3 を有効化
  • IPv6 を有効化
  • ビヘイビアはパスパターンで静的 / 動的 / API に分割し、それぞれに最適なポリシーを当てる
  • オリジン接続の設定を調整(接続タイムアウト、接続試行回数、キープアライブ、読み取りタイムアウト)
  • 大容量ファイルは Range リクエストを活用
  • 画像は Dynamic Image Transformation などを使い、フォーマット変換・リサイズをエッジ側で行う

5. エッジコンピューティングの使い分け

用途推奨
ヘッダー操作、URL リダイレクト / 書き換え、キャッシュキー正規化、簡易トークン検証、A/B テスト振り分けCloudFront Functions(低レイテンシ・低コスト。KeyValueStore と組み合わせ可)
ネットワーク呼び出し、ボディ参照、重い処理、オリジンリクエスト / レスポンスでの処理Lambda@Edge
  • まず CloudFront Functions で実現できないか検討する
  • Lambda@Edge はコールドスタートとコストを考慮し、オリジン側イベントでの利用を優先(ビューワー側イベントは全リクエストで実行される)

6. 可用性・耐障害性

  • オリジングループ(オリジンフェイルオーバー) で、プライマリ障害時(5xx / 403 / 404 など指定ステータス)にセカンダリへ切り替え
    • S3 はクロスリージョンレプリケーションと組み合わせる
  • カスタムエラーページ を用意し、エラーのキャッシュ TTL(Error Caching Minimum TTL)を短めに設定
  • stale-if-error でオリジン障害時に古いキャッシュを返す
  • 設定変更は 継続的デプロイ(ステージングディストリビューション) で一部トラフィックに試してから昇格

7. ログ・監視

  • 標準ログ(v2) を S3 / CloudWatch Logs / Data Firehose に出力。必要に応じて リアルタイムログ を Kinesis Data Streams へ
  • CloudWatch の 追加メトリクス を有効化(キャッシュヒット率、オリジンレイテンシ、エラー率のステータス別内訳)
  • アラーム例
    • 5xxErrorRate / 4xxErrorRate の急増
    • OriginLatency の悪化
    • CacheHitRate の低下
  • WAF のログ・メトリクスも併せて監視
  • 設定変更は CloudTrail で追跡

8. コスト最適化

  • 料金体系を比較検討:従量課金、定額料金プラン(CDN・WAF・DNS・ログなどを月額にまとめ、超過料金なし)、大規模なら CloudFront Security Savings Bundle / プライベート料金
  • プライスクラス で配信エッジを限定(利用者が特定地域に偏る場合)
  • キャッシュヒット率を上げてオリジン転送量・オリジン側コストを削減
  • 圧縮を有効化して転送量を削減
  • AWS オリジン(S3、ALB など)から CloudFront へのデータ転送は無料である点を活用し、オリジンを直接公開しない
  • ログはサンプリングや保存期間・出力先を見直し、不要なリアルタイムログは避ける
  • 無効化リクエストの件数(月間無料枠超過分)に注意

9. 運用・IaC

  • ディストリビューションは CloudFormation / CDK / Terraform で管理し、手動変更を避ける
  • ポリシー(キャッシュ / オリジンリクエスト / レスポンスヘッダー)は再利用可能なリソースとして共通化
  • 複数テナント(多数のドメイン)を扱う場合は マルチテナントディストリビューション の利用を検討
  • 代替ドメイン(CNAME)は Route 53 の エイリアスレコード(A / AAAA)で設定
  • タグ付けによりコスト配分・所有者を明確化

チェックリスト

  • S3 オリジンは OAC、パブリックアクセスはブロック
  • ALB / EC2 オリジンは VPC オリジン(または プレフィックスリスト+カスタムヘッダー)で直接アクセスを遮断
  • HTTPS リダイレクト、TLSv1.2_2021 以上、オリジンも HTTPS Only
  • レスポンスヘッダーポリシーでセキュリティヘッダーを付与
  • AWS WAF(マネージドルール+レートベースルール)を適用
  • キャッシュキーは最小限、キャッシュポリシーとオリジンリクエストポリシーを分離
  • 静的アセットはファイル名バージョニング+長期 TTL
  • 圧縮・HTTP/2・HTTP/3・IPv6 を有効化
  • 必要に応じて Origin Shield を有効化
  • オリジンフェイルオーバーとカスタムエラーページを設定
  • 標準ログと追加メトリクス、CloudWatch アラームを設定
  • 料金体系(従量 / 定額プラン / プライスクラス)を見直し
  • IaC で管理し、変更はステージングディストリビューションで検証

参考

0件のページ