設計パターン

S3+CloudFrontで静的サイトを配信する|OACでS3への直接アクセスを防ぐ

HTML・画像・JavaScript だけで動く静的サイトなら、サーバーを立てる必要はありません。S3 にファイルを置き、CloudFront で配信するのが AWS の定番です。ポイントは、S3 バケットは非公開のまま、CloudFront からだけ読めるようにすることです。

S3+CloudFront 静的サイトの構成図
図:S3+CloudFront 静的サイト(タップで拡大)
▶ この構成をサンドボックスで開く 動かして・CloudFormation に書き出せます

なぜ CloudFront を挟むのか

OAC(オリジンアクセスコントロール)とは

OAC は「CloudFront だけが S3 のオブジェクトを読める」ようにする仕組みです。設定は次の2つです。

  1. CloudFront のオリジンに OAC を設定する(CloudFront が署名付きで S3 にアクセスする)
  2. S3 のバケットポリシーで、cloudfront.amazonaws.com からのアクセスを、そのディストリビューションに限定して許可する(条件キー AWS:SourceArn)

これで S3 の「パブリックアクセスをすべてブロック」を有効にしたまま配信できます。サンドボックスで CloudFront → S3 の矢印を引いて CloudFormation に書き出すと、OAC とバケットポリシーの組み合わせがそのまま生成されます。

OAC(推奨)OAI(従来方式)
位置づけ現在の推奨方式レガシー
SSE-KMS で暗号化したオブジェクト対応非対応
PUT などの書き込み対応制限あり
よくあるひっかけ:S3 の「静的ウェブサイトホスティング」のエンドポイントをオリジンにすると、OAC は使えません(カスタムオリジン扱いになるため)。非公開のまま配信したいなら、REST API のエンドポイント(通常のバケットドメイン)を OAC 付きでオリジンにします。

知っておきたい関連知識

理解度チェック:S3 のURLを直接知っている人が、CloudFront を経由せずにファイルを取得できてしまう。どう直す?

OAC を設定し、バケットポリシーで CloudFront(該当ディストリビューション)からのアクセスだけを許可する。あわせてブロックパブリックアクセスを有効にします。

まとめ

読んだら、手を動かして覚えよう

ArchiCraft は、AWS サービスをドラッグ&ドロップで組み立てて解く資格対策アプリです。SAA・SAP の問題を構成図で解いて、採点と解説で理解を固められます。