📝 概要
こちらの投稿は2025 Japan AWS Jr.Championsの有志メンバーで作成した『30日間で主要AWSサービスを構築できるようになる』をテーマにした初学者向けのハンズオン問題集のDAY7になります!
問題集の趣旨や作成に至るまでの経緯は以下の記事をご覧いただければと思います。
| 項目 | 内容 |
|---|---|
| 所要時間 | 約1時間 |
| メインサービス | AWS WAF, AWS Shield Standard, Amazon ClouudFront, Amazon S3 |
| 学べること | AWS WAF/Shield の基礎知識と役割分担、L3/L4/L7の多層防御の実践 |
| 想定費用 | 約100円(※トラフィック量により変動。Shield Standardは追加費用なし) |
🗣️ 参考:以下のハンズオンを行った後に取り組むことを推奨します
⚠️ 注意:以下のリソースを削除し忘れると課金が継続します。
🎯 課題内容
- Amazon S3で公開する静的Webサイトに対し、CloudFrontによる高速配信を適用
- AWS Shield Standardによるインフラ層の防御
- AWS WAFによるアプリケーション層の防御
📊 アーキテクチャ図
🔧 実装機能
- CloudFrontのOrigin Access Control(OAC)を使用し、S3への直接アクセスを制限します。
- AWS WAFのマネージドルールを有効化し、一般的なWeb攻撃や悪質なボットをブロックします。
💡 実装のヒント
CloudFrontによるS3のセキュアな配信
- 本ハンズオンでは、S3バケットの公開について、CloudFront 経由のアクセスのみを許可します。
- 冒頭に記載しましたが、Day5: S3 の基本的な用途と静的サイトウェブホスティングを構築しようが参考資料になります。
セキュリティサービスの役割分担
- AWS Shield Standard:主にL3/L4(ネットワーク層/トランスポート層)の大量のトラフィックを伴うDDoS攻撃を自動的に軽減します
- AWS WAF:L7(アプリケーション層)の攻撃(SQLインジェクション、XSS、HHTPフラッドなど)に対して、リクエストの内容を検査し、細かく制御・ブロックします。
✅ 完成後のチェックポイント
- CloudFront の URL で Web サイトにアクセスできる
- S3 バケットへの直接アクセスが拒否される
- AWS WAF の WebACL が CloudFront に関連付けられている
- WAF マネージドルール(CRS など)が有効になっている
- URL に攻撃文字列を付与してアクセスし、WAF によってブロックされる
🧰 使用資材
S3にアップロードするサンプル HTML ファイル(オリジナルの作成可)
🔗 リファレンスリンク
- AWS WAF 公式ドキュメント
- AWS WAF マネージドルール 公式ドキュメント
- AWS Shield 公式ドキュメント
- Amazon CloudFront Origin Access Control(OAC)
🛠️ 解答・構築手順(クリックで開く)
解答と構築手順を見る
✅ ステップ1:Amazon S3 の設定
- Amazon S3サービスへ移動し、バケットを作成
- 公開したいHTMLファイルを、作成したバケットに
index.htmlとしてアップロード - パブリックアクセスはブロックを維持
✅ ステップ2:Amazon CloudFront の設定
- Amazon CloudFront サービスへ移動し、ディストリビューションを作成
- オリジンの設定
- Origin type で Amazon S3 を選択
- Origin でステップ1で作成したバケットを選択
- WAF を無効化で設定
- (補足)CloudFrontを利用するだけで、AWS Shield StandardによるL3/L4DDoS保護が自動的に適用
✅ ステップ3:AWS WAF WebACL の作成とルール設定
- AWS WAF サービスに移動し、WebACL を作成
- リソースタイプはCloudFrontディストリビューションに適用するため、グローバルリソースを選択
- Step2で作成したCloudFrontと作成するWebACLを関連付け
- マネージドルールを追加
- 「Core rule set(CRS)」を有効化
- (応用)「Bot Control」、「AntiDDoS Protection for Layer 7 attacks」を有効化
✅ ステップ4:動作確認
- CloudFront URL でサイトにアクセスできることを確認
-
https://**[ディストリビューション名]**/index.htmlをブラウザで開く
-
- WAF テスト(L7攻撃)
-
https://**[ディストリビューション名]**/index.html?q=\<script\>alert(\'XSS\')</script>をブラウザで開き、WAFによってブロックされていることを確認 - WAFのコンソールでXSS攻撃を受けていることを確認
-
🧹 片付け(リソース削除)
- WebACLの設定で、関連付けされているCloudFrontディストリビューションの関連付け解除
- WebACLを削除
- CloudFrontディストリビューションの無効化
- CloudFrontディストリビューションの削除
- S3 バケットの中身を空にする
- S3 バケットを削除
🏁 おつかれさまでした!
この課題を完了したことで、Webアプリケーションのセキュリティ設計において不可欠な、AWS Shieldによるインフラ層(L3/L4)防御と、AWS WAFによるアプリケーション層(L7)防御を組み合わせた多層防御の基礎を習得しました。本ハンズオンで取り扱わなかった、AWS Shield Advancedも勉強してみましょう!















