AWS4 択難易度 応用

状況

非公開の S3 を CloudFront(OAC)で配信し、デフォルトルートオブジェクトに index.html を設定した。トップの / と /about/index.html は表示されるが、/about/ を開くと 403 AccessDenied になる。about/index.html は S3 にある。

最も疑わしい原因は?

  1. Aバケットポリシーが about/ 配下の読み取りを許可していない
  2. Bデフォルトルートオブジェクトはルートの / にしか効かない
  3. CRoute 53 のレコードが about/ のパスを転送していない
  4. Dディストリビューションの価格クラスが日本を含んでいない

正答

  1. A
  2. B
  3. C
  4. D

解説

/about/index.html が表示されるので、OAC とバケットポリシーは about/ 配下でも正しく効いている(A は否定)。DNS はドメイン名を解決するだけでパスを扱わない(C)。価格クラスは配信に使うエッジの範囲を決めるもので、パスごとの 403 とは関係しない(D)。CloudFront のデフォルトルートオブジェクトはルート(/)へのリクエストにしか適用されず、/about/ はそのまま S3 のキー about/ を要求する。そのキーは無く、ListBucket を許可していない構成では 404 ではなく 403 が返る。対処は CloudFront Functions で末尾が / の URI に index.html を付け足すのが一般的。バケットを公開して S3 のウェブサイトエンドポイントに切り替えるのは、公開範囲が広がるので慎重に判断する。

参考: docs.aws.amazon.com

cloudfronts3default-root-objecttroubleshooting

この問題を含む AWS のテストを制限時間つきで解く

AWSクイズへ