【CloudFront】オリジンのS3にないオブジェクトにアクセスしたら404を返したい

Terraform

 

CloudFrontのオリジンであるS3にないオブジェクトへのリクエストに403が返ってきます。

 

403 Forbiddenであり、

オブジェクトがないのに「権限で見れません」が返ってきているのに違和感があります。

 

なので、404 Not Found が返ってくるように設定していきます!

 

Terraformを使って設定していきます

・バージョン

 

原因

 

オリジンを S3 とした CloudFront に対して、存在しないオブジェクトへアクセスした際の HTTP ステータスコードが 403 Forbidden になったときの対処方法 | DevelopersIO
オリジンを S3 とした CloudFront に対して、存在しないオブジェクトへアクセスした場合、デフォルトの設定では HTTP ステータスコード 403 Forbidden が返ります。こちらの事象に対して、HTTP ステータスコード 404 Not Found を返す方法をご紹介いたします。

↑の記事より、S3のバケットポリシーで許可している権限が足りていないことが原因

s3:GetObject だけでなく、s3:ListBucket も必要だということ。

 

GetObjectだけだと、

オブジェクトがない → とってこれなかった(List ないのでオブジェクトの有無はわからん)
 → 404 Not Found ではなく、403 Forbidden 返しておくか

みたいな流れでエラーコードが返ってきているのでしょうか?

 

ドキュメントはなかったので、完全に憶測ですが。。。

 

設定

 

S3のバケットポリシーを定義している aws_iam_policy_document に追記します。

 

 

resources の aws_s3_bucket.example.arn
condition > values の aws_cloudfront_distribution.example.arn
は、ご自身の値に書き換えてください

 

paln および apply をして、AWSへ反映させます。

 

動作確認

 

 

404返ってきてますねー、設定完了!!!

 

参考記事

 

オリジンを S3 とした CloudFront に対して、存在しないオブジェクトへアクセスした際の HTTP ステータスコードが 403 Forbidden になったときの対処方法 | DevelopersIO
オリジンを S3 とした CloudFront に対して、存在しないオブジェクトへアクセスした場合、デフォルトの設定では HTTP ステータスコード 403 Forbidden が返ります。こちらの事象に対して、HTTP ステータスコード 404 Not Found を返す方法をご紹介いたします。
CloudFrontでファイルがないエラーは404にしてほしいのに403で返ってくる...それ設定が足りてないだけですよ - Qiita
タイトルの通り。 些細なことではあるけど長年の疑問だったのでメモ。 TL;DR CloudFrontのOriginに使うS3のバケットポリシーに s3:ListBucket を加えましょう。 作業のログ S3+CloudF...
Terraform Registry

コメント

タイトルとURLをコピーしました