背景
- メディア会社は静的ウェブアプリケーションを運用している。
- アプリケーションは Amazon S3 バケットにアップロードされ、Amazon CloudFront を利用して配信される。
- ビルドパイプラインはアカウントA内で実行される。
- S3 バケットと CloudFront ディストリビューションはアカウントBに存在する。
技術構成
- S3 バケットにはバケットポリシーが設定されている。
- CloudFront ではオリジンアクセスコントロール(OAC)が有効化されている。
- ファイルのアップロードにはアカウントAの IAM ロールが使用される。
アーキテクチャ図
問題
- テスト中に CloudFront の URL 経由でアプリケーションにアクセスしようとすると、HTTP 403 Access Denied エラーが発生。
質問
- CloudFront を通じて S3 のオブジェクトに正常にアクセスできるようにするには、どのような対策を講じるべきか?
解答
-
S3バケットポリシーを確認
- オリジンアクセスコントロール(OAC)がCloudFrontからの
GetObjectアクセスを許可しているか確認。
- オリジンアクセスコントロール(OAC)がCloudFrontからの
-
CloudFrontの設定を確認
- 正しいOACがCloudFrontディストリビューションに設定されていることを確認。
- 正しいOACがCloudFrontディストリビューションに設定されていることを確認。
-
オブジェクト所有権の確認
- アカウントAからアップロードされたオブジェクトの所有権がアカウントBに移譲されていることを確認。
- アカウントAのIAMロールにbucket-owner-full-controlオプションを指定して、アップロード時に所有権をS3バケット所有者に移譲します。
aws s3 cp YOUR_FILE s3://YOUR_BUCKET_NAME --acl bucket-owner-full-control
- アカウントAのIAMロールにbucket-owner-full-controlオプションを指定して、アップロード時に所有権をS3バケット所有者に移譲します。
- アカウントAからアップロードされたオブジェクトの所有権がアカウントBに移譲されていることを確認。
参考
-
キャッシュをクリア
- CloudFrontのキャッシュをクリアし、最新の設定を反映。
- CloudFrontのキャッシュをクリアし、最新の設定を反映。