S3のWEBサイトをCloudFrontからだけアクセスできるようにしたいです
S3にCloudFrontからしかアクセスできなくする手順を説明します
S3でWEBサイトを作成する手順は以下の記事になります。
S3のWEBサイトをCloudFrontとRoute53でSSLと独自ドメインに対応する手順は以下の記事になります。
上の手順では、S3の静的ウェブサイトホスティング機能を使っているので、S3のURLからでもアクセスできます。
S3でバケットの上部メニューのプロパティを選択します
静的ウェブサイトホスティングのリンクをクリックします。
S3で作成したWEBサイトにアクセスできます。
S3のURLからhttpでアクセスできても特に問題はありませんが、CloudFront経由のhttpsでのみアクセス可能にした方が、アクセスログも見やすくなるなどWEBサイトを管理しやすいです。
この記事では、S3の静的ウェブサイトにCloudFront経由でしかアクセスできないようにする手順を説明します。
- S3の静的WEBサイトをCloudFrontからアクセスできるようにする手順
S3の設定を変更する
S3でWEBサイトのバケットを選択します。
静的WEBサイトホスティングを無効にする
CloudFrontからのみS3にアクセス可能にする場合、S3のホスティング機能は不要なので無効にします。
S3のバケット画面の上部メニュープロパティ
を選択します。
静的ウェブサイトホスティング
の編集
をクリックします。
無効にする
を選択して 変更の保存をクリックします。
静的ウェブサイトホスティングが無効に設定されます。
パブリックアクセスをすべてブロックする
CloudFrontからS3へのアクセスには影響しないため、パブリックアクセスはすべてブロックします。
バケットのアクセス許可
でブロックパブリックアクセス(バケット設定)
の編集
をクリックします。
パブリックアクセスをすべてブロック
のチェックをONにして 変更の保存をクリックします。
確認画面が出るので確認
と入力して 確認をクリックします。
パブリックアクセスのブロックの設定が完了します。
バケットポリシーを削除する
バケットのアクセス許可
でバケットポリシー
のを削除します。 削除をクリックします。
確認画面が出るので削除
と入力して 削除をクリックします。
バケットポリシーの削除が完了します。
ディストリビューションの設定を変更する
次に、ディストリビューションの設定を変更します。
CroudFrontでS3にアクセスするディストリビューションを選択します。
デフォルトルートオブジェクトの設定
CloudFrontでドメイン名でアクセスした時にindex.htmlファイルが表示される用に設定します。
ディストリビューションの一般
タブの 編集をクリックします。
デフォルトルートオブジェクト
にindex.htmlと入力して 変更を保存をクリックします。
オリジンの変更
CloudFrontがコンテンツを取得するオリジンをS3のWEBサイトエンドポイントからS3のエンドポイントに変更します。
ディストリビューションの画面でオリジン
を開いて、設定を変更するディストリビューションを選択して 編集をクリックします。
オリジンの編集画面でオリジンドメイン
のリストから、WEBサイトのS3を選択します。
S3の静的WEBホスティングが有効の場合、リストからS3を選択後に以下のようにウェブサイトエンドポイントを選択するように促すメッセージが表示されますが、無視してそのままにします。
オリジンアクセス
でOrigin access control settings
を選択します。
またOrigin access control
のリストからアクセスするS3を選択します。
この後の手順で使いますので、必ずコピーしておきます。
変更を保存をクリックします。
オリジンの設定が完了します。
S3にディストリビューションの設定内容を反映
バケットポリシーの設定
ディストリビューションで設定した内容のバケットポリシーをS3で設定します。
S3のアクセス許可
を開いてブロックパブリックアクセス(バケット設定)
の 編集をクリックします。
バケットポリシーの編集画面が開くのでポリシー
にディストリビューションの設定でコピーしたポリシーを貼り付けます。
変更を保存をクリックするとポリシーの設定は完了です。
CroudFrontの代替ドメイン名 (CNAME)
で設定しているドメインでアクセスできることを確認します。
WEBサイトにアクセスした時、ブラウザに以下のように表示される場合は設定が間違えている可能性があります。
以下の設定が合っているかを見直してみてください。
- ディストリビューションの
一般
のデフォルトルートオブジェクト
にindex.html
が設定されているか - S3の
アクセス許可
のバケットポリシー
が正しく設定されているか