AWS CloudFrontでS3の静的WEBページをオリジンに設定する

当ブログにはPRを含みます。

S3で静的WEBホスティングを行い、それをCloudFrontからアクセスできるようにする手順を紹介します。

CloudFrontとS3のアーキテクチャ図
目次

S3バケットの作成

バケットの作成

マネジメントコンソールにログインし、サービスからS3を選択します。バケット名を入力し、パブリックアクセスをすべてブロックのチェックを外します。

マネジメントコンソールでのS3バケット作成方法
マネジメントコンソールでのS3のセキュリティ設定方法

以上を設定したらバケットの作成を押下します。

静的ウェブホスティングの設定

次に作成されたバケットを選択してプロパティタブの静的ウェブホスティングを編集して有効にします。インデックスドキュメントはindex.htmlにします。

マネジメントコンソールでのS3静的ウェブホスティングの実施方法

するとバケットウェブサイトエンドポイントが発行されます。

バケットポリシーで読み取り許可設定

アクセス許可タブからバケットポリシーの設定を行います。

マネジメントコンソールでのバケットポリシー作成方法

以下のJSONをバケットポリシーに貼り付けて保存します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadForGetBucketObjects",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::[バケット名]/*"
        }
    ]
}

動作確認

試しにindex.htmlという名前で以下のようなhtmlファイルをアップロードしてみます。

マネジメントコンソールでのS3へのファイルアップロード方法
<h1>test</h1>
<h2>hello</h2>

プロパティタブで確認できる静的webホスティングようのエンドポイントへアクセスしてみて表示されれば完了です。

http://[バケット名].s3-website-[リージョン名].amazonaws.com/

ブラウザーでのS3ホスティングの確認画面

CloudFrontを作成する

ディストリビューションの作成

AWSマネジメントコンソールからCloudFrontを選択し、ディストリビューションを作成を押下します。

マネジメントコンソールでのCloudFrontディストリビューション作成方法

オリジンドメインにS3の静的WEBホスティングのエンドポイントを入力します。

http://[バケット名].s3-website-[リージョン名].amazonaws.com/

マネジメントコンソールでのCloudFrontディストリビューションドメインの設定

WAFは今回オフにしておきます。必要あればONにしてもOKです。

マネジメントコンソールでのWAF設定画面

後はデフォルトで作成します。

マネジメントコンソールでのディストリビューション作成ボタン

動作確認

しばらく待つとデプロイされるので、発行されたURLにアクセスしてみます。
例えばhttps://d59kxvjusk3e9.cloudfront.net の形式です。

マネジメントコンソールでのディストリビューションドメイン確認方法

S3へアクセスしたときと同様に以下のように出力されれば完了です。

ブラウザからのCloudFrontディストリビューションの確認

S3への直接アクセスを禁止する設定

バケットポリシーの設定

このままではS3のエンドポイントへの直接アクセスもできてしまうので、これを無効化します。S3のコンソールからアクセス許可→バケットポリシーを選択します。そして以下のようなJSONに書き換えましょう。

マネジメントコンソールでのバケットポリシー編集画面
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadForGetBucketObjects",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudfront.amazonaws.com"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::[バケット名]/*",
            "Condition": {
                "StringEquals": {
                    "AWS:SourceArn": "[CloudFrontディストリビューションのARN]"
                }
            }
        }
    ]
}

ちなみにCloudFrontディストリビューションのARNは以下のような形かと思います。

arn:aws:cloudfront::[AWSアカウント番号]:distribution/[ディストリビューションID]

動作確認

S3の静的ウェブホスティングURLにアクセスすると以下のような403応答が返却されればOKです。

ブラウザからS3オリジンへのアクセスが禁止されていることを確認する

また、CloudFrontのURLであれば引き続きindex.htmlの内容が表示されるはずです。

ブラウザでCloudFrontのURLへのアクセス確認

以上です。お疲れさまでした。
ちなみにこの方法を使ってWordPressブログをホストする方法も紹介しているので以下の記事ものぞきに来てくださると励みになります。

PR
当ブログはWordPressテーマSWELLを使用しています。非常に使いやすく、簡単にプロのようなデザインを使えるのでお勧めです!!

SWELL – シンプル美と機能性両立を両立させた、圧巻のWordPressテーマ

ランキング

ランキングに参加しています。クリックして応援いただけると嬉しいです。
にほんブログ村 IT技術ブログ クラウドコンピューティングへ
にほんブログ村
AWSランキング
AWSランキング

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次