0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

S3静的ウェブサイトをCloudFrontで高速化、HTTPS化

Posted at

はじめに

前回S3を使用して静的ウェヴサイトをホスティングできたので、今回はCloudFrontというCDNサービスを使って、配信の高速化、HTTPS化していきたいと思います。

前提

S3に静的ウェブサイトをホスティング済であること。
ここまでは前回の記事参照
S3で静的ウェブサイトをホスティングする

CloudFrontを使用する目的

・ 静的コンテンツをキャッシュし、オリジンサーバーの代わりに配信することによって高速化する。
・ S3のみの配信である場合は、URLがHTTPで始まるウェブサイトになっているため、通信を暗号化できていない。
 (HTTPSで始まるウェブサイトにする。)

手順

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

① CloudFrontの画面で「CloudFrontディストリビューションを作成」をクリック

スクリーンショット (31)_LI.jpg

② ディストリビューションの設定

スクリーンショット (32)_LI.jpg
オリジンドメインをクリックすると、S3のバケット名が出てくるので、選択。

スクリーンショット (33)_LI.jpg
S3のバケットを選択すると「名前」の欄は自動で埋まります。

スクリーンショット (34)_LI.jpg
「S3バケットアクセス」と「バケットポリシー」はどちらも「はい」を選択。
「S3バケットアクセス」で「はい」を選択すると、「新しいOAIを作成」が出てくるのでクリック。
スクリーンショット (36)_LI.jpg
オリジンアクセスアイデンティティは任意の名前で作成。

スクリーンショット (35)_LI.jpg
「ビューワー」の「ビューワープロトコルポリシー」で「Redirect HTTP to HTTPS」を選択。

スクリーンショット (37)_LI.jpg
「デフォルトルートオブジェクト‐オプション」にS3バケット内の、最初に表示させるhtmlファイル名を入力。

全て設定したら、「ディストリビューションを作成」をクリック。

スクリーンショット (38).png
ディストリビューションが作成されました。

2. ウェブサイトの表示

スクリーンショット (39)_LI.jpg
ディストリビューションを作成し終えたら、CloudFrontの画面で今作ったディストリビューションのステータスが「有効」になていることを確認し、ドメイン名をコピーします。
このドメイン名を使ってブラウザで開くと
スクリーンショット (41).png
Hello AWSが表示されました。

3. S3のバケットポリシーの変更

今の状態だと、CloudFrontディストリビューションのドメイン名、S3バケットのエンドポイントどちらからもサイトが表示される状態になっているので、エンドポイントからの配信を制限するため、S3のバケットポリシーを変更します。
まず、S3の「アクセス許可」を開きます。
スクリーンショット (43)_LI.jpg
アクセスがパブリックな状態になっています。
なので、バケットポリシーを編集します。
スクリーンショット (45)_LI.jpg
赤枠がCloudFrontを構築したときにできた新しいポリシーで、青枠が既存のポリシーです。
なので、青枠の

      {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::hello-aws-site/*"
      },

を削除します。
よって、新しいバケットポリシーは

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "2",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E3JM1W7B4NZDRS"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::hello-aws-site/*"
        }
    ]
}

となります。
バケットポリシーを変更することによって、
スクリーンショット (46)_LI.jpg
パブリックマークが消えます。

4. パブリックアクセスの設定変更

スクリーンショット (50)_LI.jpg
ブロックパブリックアクセス(バケット設定)の「編集」をクリック

スクリーンショット (48)_LI.jpg
「パブリックアクセスをすべてブロック」にチェック
「変更の保存」をクリック

5. 動作確認

① バケットウェブサイトエンドポイントからアクセスした場合

スクリーンショット (47).png

② CloudFrontディストリビューションのドメイン名からアクセスした場合

スクリーンショット (41).png

無事確認できました。

以上になります。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?