AWS CloudFrontからS3へのアクセス制御をOACを使って正しく設定する

S3のコンテンツをCloudFront経由で配信するケースにおいて、CloudFrontからS3へのアクセス制御をOAC(Origin access control settings)を使って正しく設定する方法について記載します。

OACは現在推奨されている設定なので、S3+CloudFrontでサイト公開する際のスタンダードな方法を記載していくと考えていただければいいと思います。

以下がゴールイメージです。

  • CloudFrontの設定でOACを使用したうえで以下の2点を達成する
    • CloudFront経由でS3へアクセスできる
    • S3へ直接アクセスできない

本記事では、AWSマネージメントコンソール画面から設定をしますが、Terraformを使いたい方は以下の記事をご参照ください

Terraformを実践的な使い方ーCloudFrontからS3へのアクセス制御をOACを使って正しく設定する編
「S3+CloudFrontで静的サイト構築」をTerraformで構築します。S3へのアクセス制御は「Origin access control settings(OAC AWS推奨のやつ)」を使います。Terraformは実践的な書き方で記載しているので、色々な環境構築の応用できます

設定方法

CloudFrontとS3両方の設定が必要となります

まずはS3のバケットを作成します。

S3バケット作成

任意のバケット名でS3バケットを作成します。(既存のS3を使う場合は、この手順はスキップしてください)

CloudFrontのOAC設定

以下の手順でOACの設定を行います。

まず、ディストリビューションを作成し、オリジンの編集からS3に設定するポリシーを取得という流れになります。

既存のディストリビューションをOACに変更する場合は「ディストリビューションの作成」を「オリジンの編集」と読み替えてください。

  1. ディストリビューションの作成
    1. AWSコンソール画面からCloudFrontダッシュボードへ行きます
    2. 「ディストリビューションを作成」ボタンを押下します
    3. 以下の設定でディストリビューションを作成します
      • オリジンドメイン:作成したS3バケットを選択
      • S3 バケットアクセス:「Origin access control settings (recommended)」を選択
      • コントローラ設定を作成ボタンを押下して、Create control setting画面が表示されるので設定変更せずに(デフォルト設定のまま)作成ボタン押下
  2. S3に設定するポリシーを取得
    1. 作成したディストリビューションのオリジンタブから、S3のオリジンを選択して、編集ボタン押下
    2. オリジン編集画面から「ポリシーをコピー」ボタンを押下して、ポリシーをクリップボードにコピーする
    3. 変更を保存ボタンを押下する
CloudFront+S3でOACを使う

CloudFront+S3でOACを使う

S3のアクセス許可設定

以下の手順でS3の設定を行います

  1. バケットのアクセス許可タブを開く
  2. バケットポリシーの編集ボタンを押下
  3. CloudFront設定時にコピーしたポリシーを貼り付ける
  4. 変更の保存ボタンを押下

動作確認

以下の点が問題なく動作すればOKです。

  • CloudFront経由でS3へアクセスできる
    • 正常にサイト閲覧できればOKです
  • S3へ直接アクセスできない
    • S3のオブジェクト URLでアクセス時にエラーとなればOKです

まとめ

S3+CloudFrontでサイト公開する際のスタンダードな方法である、OAC(Origin access control settings)についてみてきました。結構簡単でしたねーAWSさん素晴らしいー

↓公式記事のURLを載せておきます↓

Amazon Simple Storage Service オリジンへのアクセスの制限 - Amazon CloudFront
Amazon CloudFront オリジンアクセスコントロール (OAC) で、Amazon S3 オリジンへのアクセスを制限します。