状況
非公開の S3 を CloudFront(OAC)で配信し、デフォルトルートオブジェクトに index.html を設定した。トップの / と /about/index.html は表示されるが、/about/ を開くと 403 AccessDenied になる。about/index.html は S3 にある。
最も疑わしい原因は?
- Aバケットポリシーが about/ 配下の読み取りを許可していない
- Bデフォルトルートオブジェクトはルートの / にしか効かない
- CRoute 53 のレコードが about/ のパスを転送していない
- Dディストリビューションの価格クラスが日本を含んでいない
正答
- A
- B
- C
- D
解説
/about/index.html が表示されるので、OAC とバケットポリシーは about/ 配下でも正しく効いている(A は否定)。DNS はドメイン名を解決するだけでパスを扱わない(C)。価格クラスは配信に使うエッジの範囲を決めるもので、パスごとの 403 とは関係しない(D)。CloudFront のデフォルトルートオブジェクトはルート(/)へのリクエストにしか適用されず、/about/ はそのまま S3 のキー about/ を要求する。そのキーは無く、ListBucket を許可していない構成では 404 ではなく 403 が返る。対処は CloudFront Functions で末尾が / の URI に index.html を付け足すのが一般的。バケットを公開して S3 のウェブサイトエンドポイントに切り替えるのは、公開範囲が広がるので慎重に判断する。
この問題を含む AWS のテストを制限時間つきで解く
AWSクイズへ