2011年6月16日木曜日

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

スズキです。

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

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

で、近頃気づいたのですが、S3のWebsite機能で公開している"suz-lab"サイト
http://www.suz-lab.com/
で、存在しないURLにアクセスしたら、当然エラードキュメントが表示するのですが、
ステータスコードが何故か403(アクセス制限がかかっている)でした。
(404を想定していたのですが...)

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


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

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

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

ちなみに、Website機能を使っていなくても、同様の挙動となります。
(エラードキュメントのかわりに下記のようなXMLが出力されます)

【404の場合】

【403の場合】

403しか返ってこないって思ってた...
--------
http://www.iret.co.jp

0 コメント: