AWS の S3 + CloudFront で サブディレクトリでもindex.htmlを省略したURLでindex.htmlを表示する方法について解説します。
参考になったけど解決に至らなかった記事
大変助けになった記事なのですが、私の場合はこの情報だけでは解決しませんでした。
そもそも解決すべき目的が近いけど違いました。
当記事では、index.html を省略したURLでアクセスできるようにする方法をご紹介します。
例えば、
http://www.example.com/hogehoge/
にアクセスしたときに、
http://www.example.com/hogehoge/index.html
が呼び出されるようになるための設定です。
本編
AWS S3 と CloudFront を使った場合、ルートにアクセス時はindex.htmlを表示する設定は簡単かと思います。
が、サブディレクトリにアクセスしたときにも、index.htmlを表示する設定は、知らないとちょっとハマりポイントです。
上記の記事で説明が欠けている設定
ここですね。
閲覧に関しては匿名アクセスを許可する必要があるので、
まず、「新規のパブリックバケットポリシーをブロックする (推奨)」をFalseにしてください。
パケットポリシーを設定する
これコピペして一部変えてください。バケット名のところとか変える必要あります。
{ "Version": "2008-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Sid": "readOnlyOthers", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::www.hogehoge.com/*" } ] }
「www.hogehoge.com」の部分はバケットの名前に変えてください。
解説しますね。
"Sid": "readOnlyOthers" | 任意の設定ID |
"Effect": "Allow" | 何をするかの設定この場合、許可(Allow) |
"Principal": "*" | Effectの対象を指定、ワイルドカード「"*"」の場合は、匿名含め全員 |
"Action": "s3:GetObject" | 何の権限についてなのかを指定「"s3:GetObject"」の場合は閲覧権限。 ちなみに「"s3:PutObject"」の場合は書き込み権限についてになりますが、ワイルドカードで許可は絶対してはいけません。 |
"Resource": "arn:aws:s3:::www.hogehoge.com/*" | アクセス対象を指定、この場合「www.hogehoge.com」という名前のバケットのファイル全て |
GetObjectについての公式ドキュメントはこちらになります。
GetObject - Amazon Simple Storage Service
CloudFront側の設定
こちらは、一番上のところで紹介した記事に書いてありますが、一応ここでも説明しときますね。
「Origins and Origin Groups」を開いてください。
元々設定があれば編集、無ければ新規作成してください。
「Origin Domain Name」のところに、
S3で「Static website hosting」の設定をするときに出てくるエンドポイントを入力してください。
「http://」のところは消してください。「xxx.s3.amazonaws.com」って形式のやつです。
設定が完了したら、Statusが「Deployed」になるまで待ちましょう。
結構時間かかります。10~30分ぐらいかな?
「Deployed」なったら、完了です。サイトにアクセスしてみてください。