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に変更する場合は「ディストリビューションの作成」を「オリジンの編集」と読み替えてください。
- ディストリビューションの作成
- AWSコンソール画面からCloudFrontダッシュボードへ行きます
- 「ディストリビューションを作成」ボタンを押下します
- 以下の設定でディストリビューションを作成します
- オリジンドメイン:作成したS3バケットを選択
- S3 バケットアクセス:「Origin access control settings (recommended)」を選択
- コントローラ設定を作成ボタンを押下して、Create control setting画面が表示されるので設定変更せずに(デフォルト設定のまま)作成ボタン押下
- S3に設定するポリシーを取得
- 作成したディストリビューションのオリジンタブから、S3のオリジンを選択して、編集ボタン押下
- オリジン編集画面から「ポリシーをコピー」ボタンを押下して、ポリシーをクリップボードにコピーする
- 変更を保存ボタンを押下する
S3のアクセス許可設定
以下の手順でS3の設定を行います
- バケットのアクセス許可タブを開く
- バケットポリシーの編集ボタンを押下
- CloudFront設定時にコピーしたポリシーを貼り付ける
- 変更の保存ボタンを押下
動作確認
以下の点が問題なく動作すれば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 オリジンへのアクセスを制限します。