概要
AWS S3 と CloudFront を使用し、独自ドメインで安全にアクセスできるサーバー環境構築をステップバイステップで解説します。本ガイドでは、Origin Access Identity (OAC) を活用し、CloudFront からのみ S3 にアクセスできるようにすることでセキュリティを強化します。また、AWS Certificate Manager (ACM) を利用して無料の SSL 証明書を取得し、HTTPS 接続を実現します。最後に、Route53 を用いて独自ドメインを CloudFront に設定し、ユーザーに安全なアクセスを提供する方法を紹介します。
1. S3 バケットの作成
まず、S3 バケットを作成します。バケット名はグローバルにユニークである必要があるため、注意して命名してください。
- AWS コンソールにログインし、S3 サービスにアクセスします
- バケットを作成 をクリックします
- バケット名を入力し、リージョン(日本の場合は東京を選ぶと良い)を選択して 次へ をクリックします
- オブジェクト所有者 はACL無効を選択します
- バケットのアクセス権限を適切に設定します。本記事では、CloudFront からのみアクセスできるようにしますので、"アクセス権限の編集" で "ブロックパブリックアクセス" を選択します
- "ブロックパブリックアクセス" の設定で、"パブリックアクセスをすべて ブロック" を選択し、次へ をクリックします
- バケットのバージョニング は必要なら有効にしてよいですが、無効でもよいです
- "タグ" は任意で設定できます。次へ をクリックします
- "確認" 画面で設定を確認し、バケットを作成 をクリックします
- 作成ができたら、そのバケットを選択肢、"プロパティ" タブを選ぶと、一番下に「静的ウェブサイトホスティング」というセクションがあるので、編集をクリックします
- 静的ウェブサイトホスティングで「有効にする」を選択し、インデックスドキュメントには「index.html」を入力、それ以外の項目はデフォルトのままで「変更の保存」をクリックします
2. ACM を利用した SSL 証明書の取得
ACM を利用して、無料の SSL 証明書を取得します。先にこちらの手順をしておくとスムーズです。
- AWS コンソールで ACM サービスにアクセスします
- 画面右上のリージョンの設定が「バージニア北部(N. Virginia)」になっていることを確認してください
- 証明書をリクエストする をクリックします
- ドメイン名 に独自ドメイン名を入力し、検証方法 は「DNS検証」を選択します
- キーアルゴリズムは「RSA 2048」を選んでください
- 設定できたら画面右下の「リクエスト」をクリックします
- 証明書リクエストが作成されたら、ドメインの欄にある「Route 53でレコードを作成」をクリックすると、自動的にRoute53にレコードが追加されます
※ Route53 を使用していない場合は、ドメインを管理しているDNS側でCNAMEにキーを設定する必要があります - 検証が正常に設定されると、しばらく待てば、証明書が発行されて「発行済み」の状態になります
- 証明書は、後ほどCloudfrontの管理画面から設定できるので、ダウンロードはしなくても大丈夫です
3. CloudFront のディストリビューション
CloudFront のディストリビューションを作成します。
- AWS コンソールで CloudFront サービスにアクセスします
- ディストリビューションのメニューに移動し、ディストリビューションを作成 をクリックします
-
Origin Domain に S3 バケットのエンドポイント
[YOUR_BUCKET_NAME].s3.amazonaws.com
を入力します - Origin Path は空欄のままにしてください
- オリジンアクセス は、「Origin access control settings (recommended)」を選び、「Create new OAC」を選んで、 OAC を作成します
- OACの設定はデフォルトのままで「Create」をクリックして作成して大丈夫です
-
Default Cache Behavior で、以下の設定を行います
- Viewer Protocol Policy に Redirect HTTP to HTTPS を選択します
- Allowed HTTP Methods に GET, HEAD を選択します
- Cache Policy はデフォルトのままでよいです
- Origin Shield は必要の応じて有効にしてください
- Origin Response Headers はデフォルトのままで良いです
- 設定の料金クラスは「すべてのエッジロケーションを使用する(最高のパフォーマンス)」を選びます
- 代替ドメインには、さきほどACMで設定した証明書のドメインを入力します(サブドメインもつけている場合はサブドメイン込みで入力します)
- Custom SSL Certificate に、ACM で取得した証明書を選択し、SSL Certificate ID を入力します
- セキュリティポリシーはTLSv1.2_2021(推奨)を選びます
- サポートされているHTTPバージョンは、HTTP/2のままで良いです
- デフォルトルートオブジェクトは、「index.html」を入力します
- それ以外はデフォルトの設定で大丈夫です
- 設定の確認 画面で設定を確認し、ディストリビューションを作成 をクリックします
- 正常に配信設定(ディストリビューション)が作成されると、画面上部に「S3のバケットポリシーに設定する必要がある」という旨の通知が出ると思いますので、コピーをクリックしてコピーしておくと次のステップで便利です
4. S3 バケットのポリシー設定
OAC を使用して S3 バケットへのアクセスを制限するため、ポリシーを設定します。
- AWS コンソールで S3 サービスにアクセスします
- バケット をクリックします
- 該当のS3 バケットを選択し、アクセス許可 のタブをクリックします
- バケットポリシー をクリックします
- 下記のポリシーをコピーして貼り付けます。
[YOUR_OAC_ID]
は、作成した OAC の識別子に置き換えてください - 先ほどのCloudfrontの配信設定を作成した最後に、S3のバケットポリシーをコピーしていた場合は、そのまま貼り付けると
[YOUR_OAC_ID]
などが入力された状態で貼り付けられます
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCloudFrontAccess",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFrontOriginAccessIdentity[YOUR_OAC_ID]"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::[YOUR_BUCKET_NAME]/*"
}
]
}
}
- 保存 をクリックします
5. Route53 で独自ドメインの設定
Route53 を使用して、独自ドメインを CloudFront に設定します
- AWS コンソールで Route53 サービスにアクセスします
- ホストゾーン で、ドメインを選択し、「レコードを作成」をクリックします
-
レコード名 には、空白 or サブドメイン を入力し、レコードタイプ に
A
を選択します - 値 には、入力欄のすぐ上部にある「エイリアス」にチェックを入れて、CloudFrontを選び、先ほど作成した配信設定を選びます
- TTL はデフォルト値のままにしてください
- レコードを作成 をクリックします
これで、独自ドメインから CloudFront を介して S3 バケットにアクセスできるようになります
まとめ
本記事では、AWS S3 と CloudFront を使用し、独自ドメインで安全にアクセスできるサーバー環境構築方法を解説しました。OAC を活用することで、セキュリティを強化し、ACM を利用することで無料の SSL 証明書を取得することができます。さらに、Route53 を用いて独自ドメインを設定することで、ユーザーに安全なアクセスを提供できます。