share facebook facebook twitter menu hatena pocket slack

S3(Website)のエラードキュメント表示のステータスコードが404だと思ったら403だった!?

鈴木 宏康

WRITTEN BY 鈴木 宏康

S3にはWebsite機能というものがあるのですが、その機能を有効にすると
エラードキュメントを指定して使えるようになります。

例として、アクセスしたURLにコンテンツがない場合(404)や、
サイトにアクセス制限がかかっていたり(403)した場合は、エラードキュメントが表示されます。

最近気が付いたのですが、S3のWebsite機能で公開しているsuz-labサイトで、
コンテンツが存在しないURLにアクセスすると、エラードキュメントが表示されるのですが、
ステータスコードがどういうことか403(アクセス制限がかかっている状態)でした。
(404になると思っていたのですが…)

そこで、いろいろと調べてみると、AWS Management Consoleでバケットに対し、
下記のようなパーミッション設定をしていなかったので、403となっていました。

つまり、バケットのオブジェクトをリスト取得する権限が無いため、
コンテンツが存在しないURLに対してもアクセス制限がかかっていることになり、
403になっていました。

上記のパーミッションを設定すると、リスト取得のアクセス制限がなくなり、
実際にオブジェクトが存在するか確認することが可能で、存在しない場合は404になります。

どちらにせよ、同じエラードキュメントを表示してしまうので、
わかりにくいところではありますが、プログラムなどで、
ステータスコードを確認するような処理をする場合は注意が必要になります。

ちなみに、Website機能を利用していなくても、同様の挙動になります。
(エラードキュメントではなく、下記のようなXMLが表示されます)

【404の場合】

【403の場合】

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら

鈴木 宏康

鈴木 宏康

愛知県生まれ。東京工業大学大学院修士課程修了。在学時より、ベンチャー企業でインターネットに関する業務に携わり、現在はクラウド(主にAmazon Web Services)上での開発・運用を軸とした事業の、業務の中心として活躍。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。