当ブログにはPRを含みます。
S3で静的WEBホスティングを行い、それをCloudFrontからアクセスできるようにする手順を紹介します。
![CloudFrontとS3のアーキテクチャ図](https://sal-blog.com/wp-content/uploads/2023/06/CloudFrontS3HTML.png)
S3バケットの作成
バケットの作成
マネジメントコンソールにログインし、サービスからS3を選択します。バケット名を入力し、パブリックアクセスをすべてブロックのチェックを外します。
![マネジメントコンソールでのS3バケット作成方法](https://sal-blog.com/wp-content/uploads/2023/06/image-1.png)
![マネジメントコンソールでのS3のセキュリティ設定方法](https://sal-blog.com/wp-content/uploads/2023/06/image-2.png)
以上を設定したらバケットの作成を押下します。
静的ウェブホスティングの設定
次に作成されたバケットを選択してプロパティタブの静的ウェブホスティングを編集して有効にします。インデックスドキュメントはindex.htmlにします。
![マネジメントコンソールでのS3静的ウェブホスティングの実施方法](https://sal-blog.com/wp-content/uploads/2023/06/image-3.png)
するとバケットウェブサイトエンドポイントが発行されます。
バケットポリシーで読み取り許可設定
アクセス許可タブからバケットポリシーの設定を行います。
![マネジメントコンソールでのバケットポリシー作成方法](https://sal-blog.com/wp-content/uploads/2023/06/image-4.png)
以下のJSONをバケットポリシーに貼り付けて保存します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadForGetBucketObjects",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::[バケット名]/*"
}
]
}
動作確認
試しにindex.htmlという名前で以下のようなhtmlファイルをアップロードしてみます。
![マネジメントコンソールでのS3へのファイルアップロード方法](https://sal-blog.com/wp-content/uploads/2023/06/image-5.png)
<h1>test</h1>
<h2>hello</h2>
プロパティタブで確認できる静的webホスティングようのエンドポイントへアクセスしてみて表示されれば完了です。
http://[バケット名].s3-website-[リージョン名].amazonaws.com/
![ブラウザーでのS3ホスティングの確認画面](https://sal-blog.com/wp-content/uploads/2023/06/image-6.png)
CloudFrontを作成する
ディストリビューションの作成
AWSマネジメントコンソールからCloudFrontを選択し、ディストリビューションを作成を押下します。
![マネジメントコンソールでのCloudFrontディストリビューション作成方法](https://sal-blog.com/wp-content/uploads/2023/06/image-7.png)
オリジンドメインにS3の静的WEBホスティングのエンドポイントを入力します。
http://[バケット名].s3-website-[リージョン名].amazonaws.com/
![マネジメントコンソールでのCloudFrontディストリビューションドメインの設定](https://sal-blog.com/wp-content/uploads/2023/06/image-8.png)
WAFは今回オフにしておきます。必要あればONにしてもOKです。
![マネジメントコンソールでのWAF設定画面](https://sal-blog.com/wp-content/uploads/2023/06/image-9.png)
後はデフォルトで作成します。
![マネジメントコンソールでのディストリビューション作成ボタン](https://sal-blog.com/wp-content/uploads/2023/06/image-10.png)
動作確認
しばらく待つとデプロイされるので、発行されたURLにアクセスしてみます。
例えばhttps://d59kxvjusk3e9.cloudfront.net の形式です。
![マネジメントコンソールでのディストリビューションドメイン確認方法](https://sal-blog.com/wp-content/uploads/2023/06/image-12-1024x288.png)
S3へアクセスしたときと同様に以下のように出力されれば完了です。
![ブラウザからのCloudFrontディストリビューションの確認](https://sal-blog.com/wp-content/uploads/2023/06/image-6.png)
S3への直接アクセスを禁止する設定
バケットポリシーの設定
このままではS3のエンドポイントへの直接アクセスもできてしまうので、これを無効化します。S3のコンソールからアクセス許可→バケットポリシーを選択します。そして以下のようなJSONに書き換えましょう。
![マネジメントコンソールでのバケットポリシー編集画面](https://sal-blog.com/wp-content/uploads/2023/06/image-13.png)
{
"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オリジンへのアクセスが禁止されていることを確認する](https://sal-blog.com/wp-content/uploads/2023/06/image-14.png)
また、CloudFrontのURLであれば引き続きindex.htmlの内容が表示されるはずです。
![ブラウザでCloudFrontのURLへのアクセス確認](https://sal-blog.com/wp-content/uploads/2023/06/image-6.png)
以上です。お疲れさまでした。
ちなみにこの方法を使ってWordPressブログをホストする方法も紹介しているので以下の記事ものぞきに来てくださると励みになります。
![](https://sal-blog.com/wp-content/uploads/2023/06/AWS-S3とCloudFrontでWordPressブログをホストする方法-300x169.png)
PR
当ブログはWordPressテーマSWELLを使用しています。非常に使いやすく、簡単にプロのようなデザインを使えるのでお勧めです!!
SWELL – シンプル美と機能性両立を両立させた、圧巻のWordPressテーマ
![syo](https://sal-blog.com/wp-content/uploads/2023/06/syo-1.png)
システムエンジニア
AWSを中心としたクラウド案件に携わっています。
IoTシステムのバックエンド開発、Datadogを用いた監視開発など経験があります。
IT資格マニアでいろいろ取得しています。
AWS認定:SAP, DOP, SAA, DVA, SOA, CLF
Azure認定:AZ-104, AZ-300
ITIL Foundation
Oracle Master Bronze (DBA)
Oracle Master Silver (SQL)
Oracle Java Silver SE
■略歴
理系の大学院を卒業
IT企業に就職
AWSのシステム導入のプロジェクトを担当