※本記事はAIが書いて、人間がファクトチェック中です。
不備があったらコメントでご指摘いただけると幸いです。
連載構成案「手を動かして学ぶ!Amazon CloudFront完全マスター」
【第1回】CloudFrontの基本と、安全な静的ウェブサイトホスティング
- 学習内容: CDN(コンテンツ配信ネットワーク)の仕組みとメリット、CloudFrontの基本用語(ディストリビューション、オリジン、エッジロケーション)。OAC(Origin Access Control)を用いたセキュアなS3連携のベストプラクティス。
-
ハンズオン (約45分):
- Amazon S3バケットを作成し、簡単なHTMLファイルをアップロードする。
- CloudFrontディストリビューションを作成する。
- OACを設定し、「S3バケットへの直接アクセスを禁止し、CloudFront経由でのみアクセス可能」にする設定を行う。
- ブラウザからCloudFrontのURLにアクセスして表示を確認する。
【第2回】独自ドメインとHTTPS化(SSL/TLS通信)
- 学習内容: カスタムドメインの重要性、AWS Certificate Manager (ACM) の役割、Route 53との連携。
-
ハンズオン (約45分):
(※事前準備としてRoute 53で管理されたドメインがあることを前提とします)- ACM (バージニア北部リージョン) で無料のSSL/TLS証明書を発行する。
- 発行した証明書を第1回で作成したCloudFrontにアタッチする。
- Route 53でエイリアスレコードを作成し、独自ドメインとCloudFrontを紐づける。
- 独自ドメインでHTTPSアクセスできることを確認する。
【第3回】キャッシュコントロールとキャッシュの無効化(Invalidation)
- 学習内容: CloudFrontのキャッシュ戦略。「Cache Policy」と「Origin Request Policy」の違い、TTL(Time To Live)の概念、キャッシュヒット率向上の考え方。
-
ハンズオン (約30分):
- S3のHTMLファイルを更新し、ブラウザで古いキャッシュが残っていることを確認する。
- マネジメントコンソールからキャッシュの無効化(Invalidation)を実行し、最新ファイルが反映されることを確認する。
- カスタムのCache Policyを作成し、「特定のクエリ文字列のみキャッシュキーに含める」設定を試す。
【第4回】CloudFrontのセキュリティ強化(AWS WAFと地理的制限) (今回はここ!!)
- 学習内容: エッジでのセキュリティ対策。AWS WAFの基本機能、DDoS対策(AWS Shield Standard)、Geo-Restriction(地理的制限)。
-
ハンズオン (約45分):
- CloudFrontの標準機能である「地理的制限」機能を使い、日本以外からのアクセスをブロックする設定を行う(VPN等があれば動作確認)。
- AWS WAF Web ACLを作成し、CloudFrontにアタッチする。
- マネージドルール(例:IPレピュテーションリストやSQLi対策)を適用し、テスト的に自身のIPアドレスをブロックしてみて、403エラーが出ることを確認する。
【第5回】複数オリジンのルーティング(動的コンテンツと静的コンテンツの振り分け)
- 学習内容: ビヘイビア(Behaviors)の概念。パスパターンに応じたオリジンの振り分け(例:画像はS3、APIはALB/API Gatewayなど)。
-
ハンズオン (約60分):
- ダミーの動的レスポンスを返すAPI Gateway(または簡易なLambda関数URL)を作成する。
- CloudFrontに2つ目のオリジンとしてAPIを追加する。
- ビヘイビアを設定し、
/api/*へのリクエストはAPI側へ、それ以外(Default (*))はS3へルーティングされるように設定する。 - Postmanやブラウザで、パスによって異なるバックエンドが応答することを確認する。
【第6回】エッジコンピューティング入門(CloudFront Functions)
- 学習内容: エッジでコードを実行するメリット。CloudFront FunctionsとLambda@Edgeの違いと使い分け。
-
ハンズオン (約45分):
- CloudFront Functionsを作成する。
- ハンズオン課題:レスポンスヘッダにセキュリティヘッダ(
Strict-Transport-SecurityやX-Frame-Optionsなど)を動的に追加するコード(JavaScript)を記述する。 - テスト機能を使って動作確認を行い、ディストリビューションにPublishする。
- ブラウザの開発者ツールで、ヘッダが追加されていることを確認する。
【第7回】最新機能キャッチアップと運用監視
- 学習内容: 最近のCloudFrontのアップデート(Continuous DeploymentやVPC Originsなど)の紹介。CloudFrontのメトリクス監視とログ出力設定。
-
ハンズオン (約45分):
- VPC Originsの体験 (※最新機能): VPC内のプライベートなALBにCloudFrontから直接ルーティングする「VPC Origins」の設定を確認・構築する。
- CloudFrontの標準モニタリングダッシュボードで、キャッシュヒット率やエラー率を確認する方法を学ぶ。
はじめに
「手を動かして学ぶ!Amazon CloudFront完全マスター」の第4回です。
前回はキャッシュの仕組みを学び、コンテンツを高速かつ効率的に配信できるようになりました。
ウェブサイトを公開すると、世界中からアクセスが来るようになりますが、中には悪意のある攻撃(サイバー攻撃やDDoS攻撃)も含まれます。今回は、CloudFrontの最前線(エッジ)でこれらの脅威をブロックする 「地理的制限(Geo-Restriction)」 と 「AWS WAF」 を実際に設定して、セキュリティを強化してみましょう!
本日のゴール
- エッジでセキュリティ対策を行うメリットを理解する
- 地理的制限を使って、特定の国からのアクセスをブロック(または許可)する
- AWS WAFでマネージドルールを設定し、疑似的な攻撃(SQLインジェクション等)をブロックして403エラーを確認する
⚠️ 所要時間とコスト(重要)
- 所要時間:約30〜45分
- コスト:数円〜数十円程度(AWS WAFは無料枠がありません)
- WAFのWeb ACLは月額約5ドル(+ルール料金等)ですが、時間割計算されるため、ハンズオン終了後すぐに削除すれば数円〜数十円で済みます。必ず最後の手順でリソースを削除してください!
1. 座学:エッジでのセキュリティ対策(約5分)
なぜエッジ(CloudFront)で防御するの?
オリジン(S3やALBなど)の直前ではなく、世界中にあるCloudFrontのエッジロケーションで攻撃をブロックすることで、オリジンの負荷を減らし、無駄な通信コストを削減できます。また、CloudFrontには「AWS Shield Standard」というDDoS防御機能が標準で(無料で)組み込まれており、大規模な攻撃から自動的に守ってくれます。
地理的制限とAWS WAFの違い
- 地理的制限(Geo-Restriction): CloudFrontの標準機能(無料)。「日本以外からのアクセスは全て弾く」といった大まかな国レベルの制御が簡単にできます。
- AWS WAF (Web Application Firewall): 有料の強力なファイアウォール。IPアドレス、SQLインジェクション、クロスサイトスクリプティング(XSS)など、より詳細な条件で悪意のある通信を見分けてブロックします。
2. ハンズオン:地理的制限でアクセスを弾いてみよう(約10分)
まずは無料で手軽に設定できる「地理的制限」を試します。今回はテストとして、あえて日本(自分のアクセス元)からのアクセスをブロックして、エラー画面を出してみましょう。
- マネジメントコンソールからCloudFrontを開き、第1回で作成したディストリビューションを選択します。
- 「セキュリティ」 タブを開き、「地理的制限」セクションの「編集」をクリックします。
- 制限タイプ: 「ブロックリスト」を選択します。
-
国: リストから
日本 (Japan)を検索してチェックを入れます。 - 「変更を保存」をクリックします。(※デプロイ完了まで数分待ちます)
-
動作確認: ブラウザで自分のCloudFrontのURL(または独自ドメイン)にアクセスします。
👉 【結果】403 ERROR - The Amazon CloudFront distribution is configured to block access from your country.という画面が出れば大成功です! - 【元に戻す】: 再度「編集」を開き、制限タイプを「制限なし」に戻して保存しておいてください。
3. ハンズオン:AWS WAFで悪意のある攻撃をブロックしよう(約20分)
次は、AWS WAFを使ってWebアプリケーションへの一般的な攻撃を防ぐ設定を行います。
ステップ1:Web ACLの作成【※Globalリージョン】
第2回のACM証明書と同様に、CloudFront用のWAFは特定の地域ではなく「グローバル」で作成します。
- マネジメントコンソールで WAF & Shield を開きます。
- 左メニューから 「Web ACLs」 を選択し、「Create web ACL」をクリックします。
-
Resource type:
CloudFront distributionsを選択します。(※自動的にリージョンが Global (CloudFront) に切り替わります) -
Name:
CloudFront-Handson-WAFなどと入力し、「Next」をクリックします。
ステップ2:マネージドルール(AWSの推奨ルール)の追加
AWSが用意してくれている「よくある攻撃を防ぐルールセット」を追加します。
- Add rules から 「Add managed rule groups」 を選択します。
-
AWS managed rule groups を展開し、以下の2つのトグルをON(Add to web ACL)にします。
- 「Core rule set」: 一般的なWeb攻撃を防ぐベースとなるルール
- 「SQL database」: SQLインジェクション攻撃などを防ぐルール(今回のテスト用)
- 画面下部の「Add rules」をクリックします。
-
Default web ACL action for requests that don't match any rules:
Allow(ルールに引っかからない普通のアクセスは許可する)になっていることを確認し、「Next」をクリックします。 - 以降の画面(ルールの優先順位やメトリクス設定)は全てデフォルトのまま「Next」で進み、最後に「Create web ACL」をクリックします。
ステップ3:CloudFrontへのアタッチと動作確認
作成したWAFをCloudFrontに紐づけます。
- CloudFrontのコンソールに戻り、ディストリビューションの 「セキュリティ」 タブを開きます。
- AWS WAF のセクションにある「編集」をクリックします。
- 先ほど作成した
CloudFront-Handson-WAFを選択して「変更を保存」をクリックします。(※デプロイを待ちます) -
正常なアクセスの確認: ブラウザで普通にURL(例:
https://あなたのドメイン/index.html)にアクセスし、ページが表示されることを確認します。 -
攻撃のシミュレーション: URLの末尾に、SQLインジェクションでよく使われる怪しい文字列をつけてアクセスしてみます。
https://あなたのドメイン/index.html?id=1'%20OR%20'1'='1
(※%20はスペースを意味します)
👉 【結果】WAFが攻撃と判定し、以下のような403 ERROR(Request blocked) 画面が表示されれば大成功です!403 ERROR
The request could not be satisfied.
Request blocked.
4. お片付け(リソースの削除)【絶対に実施してください!】
AWS WAFは放置すると月額料金がかかるため、ハンズオンが終わったら必ず削除しましょう。
-
CloudFrontからWAFを外す:
- CloudFrontのディストリビューション設定(セキュリティタブ)を編集し、WAFの項目を「セキュリティ保護を有効にしない」に戻して保存します。
-
WAF Web ACLの削除:
-
WAF & Shieldのコンソールを開き、「Web ACLs」から作成した
CloudFront-Handson-WAFを選択して「Delete」をクリックします。 - (※CloudFrontからのデタッチが完了していないと削除エラーになる場合があります。その場合は数分待ってから再度お試しください)
-
WAF & Shieldのコンソールを開き、「Web ACLs」から作成した
おわりに
今回は、エッジでのセキュリティ対策として「地理的制限」と「AWS WAF」を体験しました。
WAFの導入と聞くと難しそうに感じますが、AWSのマネージドルールを使えば、数回のクリックで強力なセキュリティを手に入れることができると実感いただけたのではないでしょうか。
次回(第5回)は、CloudFrontの真骨頂!複数のオリジン(S3やAPI)を1つのCloudFrontでさばく 「複数オリジンのルーティング(Behaviors)」 に挑戦します。静的コンテンツと動的コンテンツをスマートに振り分ける方法を学びましょう!お楽しみに!