1. ハンズオン内容
- ハンズオンでは各リソースを段階的に作成していきます
※Cloud9はVSCodeとPowerShellで代用
※画像はAWS公式ページより引用
前提条件&注意事項
- このブログだけでは進められません。AWS公式ハンズオン動画をまず見てください。
- Lambdaの画面は今とかなり変わってます。
- これらの導入が必要になると思われます。
- 一部課金が発生します(数十円程度)。終了後は必ず削除しましょう。
- 親ページ見てない人は見てね
2. Step1、S3、CloudFrontを作成
S3、CloudFrontを作成します
※画像はハンズオンより引用
2.1. (Step1)S3
2.1.1. (Step1)バケット作成
リージョンはus-east-1です
- Amazon S3 > バケット >
バケットを作成
バケットを作成
| 大項目 | 中項目 | 選択肢 | 備考 |
|---|---|---|---|
| 一般的な設定 | AWS リージョン | us-east-1 | 理由不明 |
| バケットタイプ | ✅ 汎用 ⬜ ディレクトリ |
||
| 🔴バケット名 | handson-lab.click | 任意です。他の名前にしてね | |
| オブジェクト所有者 | - | ✅ ACL 無効 (推奨) ⬜ ACL 有効 |
|
| オブジェクト所有者 | ✅ 希望するバケット所有者 ⬜ オブジェクトライター |
||
| このバケットのブロックパブリックアクセス設定 | パブリックアクセス | ✅ パブリックアクセスをすべて ブロック | |
| ✅ 現在の設定により、このバケットとバケット内のオブジェクトが公開される可能性があることを承認します。 | |||
| タグ - オプション | - | ||
| デフォルトの暗号化 | 暗号化タイプ | ✅ Amazon S3 マネージドキーを使用したサーバー側の暗号化 (SSE-S3) ⬜ AWS Key Management Service キーを使用したサーバー側の暗号化 (SSE-KMS) ⬜ AWS Key Management Service キーを使用したデュアルレイヤーサーバー側の暗号化 (DSSE-KMS) |
|
| バケットキー | ✅ 無効にする ⬜ 有効にする |
||
| 詳細設定 | オブジェクトロック | ✅ 無効にする ⬜ 有効にする |
2.1.2. (Step1)バケットへファイルアップロード
- Amazon S3 > バケット >
バケットを作成> オブジェクト
forS3フォルダのファイルをすべてアップロードします。設定はすべてデフォルトです。
2.2. (Step1)CloudFront
2.2.1. (Step1)ディストリビューション作成
ここはハンズオンとかなり画面が違います。ハンズオンは古いです。また入力画面は古い画面に切り替えてください。go to the previous Create Distribution page.のリンクをクリックすればOK
ディストリビューションを作成
| 大項目 | 中項目 | 選択肢 | 備考 |
|---|---|---|---|
| ディストリビューションを作成 | ✅ Single website or app ⬜ Multi-tenant architecture - New |
||
| オリジン | 🔴Origin domain | handson-lab.click.s3.ap-northeast-1.amazonaws.com | |
| Origin path - optional | |||
| 名前 | handson-lab.click.s3.ap-northeast-1.amazonaws.com | 自動で入力される | |
| 🔴オリジンアクセス | ⬜ Public ✅ Origin access control settings (recommended) ⬜ Legacy access identities |
動画と違います。今回は既存のOACを使います | |
| カスタムヘッダーを追加 - オプション | |||
| Enable Origin Shield | ✅ いいえ ⬜ はい |
||
| Connection attempts | 3 | 追加設定(▼)をクリックして開くと、この項目が表示されます。 | |
| Connection timeout | 10 | 追加設定(▼)をクリックして開くと、この項目が表示されます。 | |
| Response timeout | 30 | 追加設定(▼)をクリックして開くと、この項目が表示されます。 | |
| Response completion timeout | ⬜ Enable | 追加設定(▼)をクリックして開くと、この項目が表示されます。 | |
| デフォルトのキャッシュビヘイビア | パスパターン | デフォルト (*) | Default (*) |
| オブジェクトを自動的に圧縮 | ⬜ No ✅ Yes |
||
| ビューワープロトコルポリシー | ⬜ HTTP and HTTPS ✅ Redirect HTTP to HTTPS ⬜ HTTPS only |
||
| 許可された HTTP メソッド | ✅ GET, HEAD ⬜ GET, HEAD, OPTIONS ⬜ GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE |
||
| ビューワーのアクセスを制限する | ✅ No ⬜ Yes |
||
| レスポンスヘッダーポリシー - オプション | ✅ Cache policy and origin request policy (recommended) ⬜ Legacy cache settings |
||
| 🔴キャッシュポリシー | ⬜ CachingOptimized ✅ CachingDisabled ⬜ CachingOptimizedForUncompressedObjects ⬜ Elemental-MediaPackage ⬜ Amplify-DefaultNoCookies ⬜ Amplify-Default ⬜ Amplify-StaticContent ⬜ Amplify-ImageOptimization ⬜ UseOriginCacheControlHeaders ⬜ UseOriginCacheControlHeaders-QueryStrings |
disableにする意図は不明 | |
| オリジンリクエストポリシー - オプション | ✅ None ⬜ UserAgentRefererHeaders ⬜ AllViewer ⬜ CORS-S3Origin ⬜ CORS-CustomOrigin ⬜ Elemental-MediaTailor-PersonalizedManifests ⬜ AllViewerAndCloudFrontHeaders-2022-06 ⬜ AllViewerExceptHostHeader ... |
||
| レスポンスヘッダーポリシー - オプション | ✅ None ⬜ SimpleCORS ⬜ CORS-With-Preflight ⬜ CORS-with-preflight-and-SecurityHeadersPolicy ⬜ CORS-and-SecurityHeadersPolicy ⬜ SecurityHeadersPolicy |
||
| スムーズストリーミング | ✅ No ⬜ Yes |
追加設定(▼)をクリックして開くと、この項目が表示されます。 | |
| フィールドレベル暗号化 | - | 追加設定(▼)をクリックして開くと、この項目が表示されます。 | |
| リアルタイムログを有効にする | ✅ No ⬜ Yes |
追加設定(▼)をクリックして開くと、この項目が表示されます。 | |
| 関数の関連付け - オプション | ビューワーレスポンス / 関数タイプ | ✅ 関連付けなし ⬜ Lambda@Edge ⬜ CloudFront function |
|
| 関数 ARN/名前 | - | ||
| 本文を含める | - | ||
| ビューワーレスポンス / 関数タイプ | ✅ 関連付けなし ⬜ Lambda@Edge ⬜ CloudFront function |
||
| 関数 ARN/名前 | - | ||
| 本文を含める | - | ||
| オリジンリクエスト / 関数タイプ | ✅ 関連付けなし ⬜ Lambda@Edge |
||
| 関数 ARN/名前 | - | ||
| 本文を含める | - | ||
| オリジンレスポンス / 関数タイプ | ✅ 関連付けなし ⬜ Lambda@Edge |
||
| 関数 ARN/名前 | - | ||
| 本文を含める | - | ||
| 🔴ウェブアプリケーションファイアウォール (WAF) | ⬜ セキュリティ保護を有効にする ✅ セキュリティ保護を有効にしないでください |
||
| 設定 | Anycast static IP list | - | 作ってないので選択不可です |
| 料金クラス | ✅ すべてのエッジロケーションを使用する (最高のパフォーマンス) ⬜ 北米と欧州のみを使用 ⬜ 北米、欧州、アジア、中東、アフリカを使用 |
||
| 代替ドメイン名 (CNAME) - オプション | 今回はまだ使わない | ||
| Custom SSL certificate - optional | 今回はまだ使わない | ||
| 🔴デフォルトルートオブジェクト - オプション | index.html | 指定しないと動かないと思う。/にアクセスしたら自動でindex.htmlを読み込む機能はない | |
| IPv6 | ⬜ オフ ✅ オン |
オンでもオフでも問題ないと思う | |
| 説明 - オプション | |||
| Standard logging | ログ配信 | ✅ オフ ⬜ オン |
バケットポリシー更新忘れずに。EOF3DRBRIXTWUを作ったディストリビューションIDに変える。XXXXXXXXをアカウントIDに変える。ここは変数使えない
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "AllowCloudFrontServicePrincipal",
"Effect": "Allow",
"Principal": {
"Service": "cloudfront.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::handson-lab.click/*",
"Condition": {
"StringEquals": {
"AWS:SourceArn": "arn:aws:cloudfront::XXXXXXXX:distribution/EOF3DRBRIXTWU"
}
}
}
]
}
動作確認
-
作成したディストリビューションドメイン名 http://XXXX.cloudfront.net/ にアクセスできればOK。ボタン押下すると現時点ではエラー(
Access Denied)になる。 -
レスポンス速度の向上は、比較データがなかったのでわからなかった。開発者ツールのレスポンスヘッダーに
Hit from cloudfrontが出ていればOKとする。あと動画ではwaterfallという言葉が出てくるが、今の画面項目には存在しない。それっぽいグラフが出ているのでそれを見る
2.2.2. (Step1)CloudFrontのキャッシュポリシー作成
- CloudFront > ポリシー > キャッシュ >
キャッシュポリシーを作成
| 大項目 | 中項目 | 選択肢 | 備考 |
|---|---|---|---|
| 詳細 | 🔴名前 | handson-cachepolicy | |
| 説明 - オプション | |||
| TTL 設定 | 最小 TTL | 1 | |
| 最大 TTL | 31536000 | ||
| デフォルト TTL | 86400 | ||
| キャッシュキー設定 | ヘッダー | なし | |
| クエリ文字列 | なし | ||
| cookie | なし | ||
| 圧縮サポート | ✅ Gzip ✅ Brotli |
2.2.3. (Step1)CloudFrontのビヘイビア作成
- CloudFront > ディストリビューション > (作成したディストリビューション) >
ビヘイビアを作成
| 大項目 | 中項目 | 選択肢 | 備考 |
|---|---|---|---|
| Settings | 🔴パスパターン | /static/* | 新規作成時には追加できない |
| 🔴オリジンとオリジングループ | handson-lab.click.s3.ap-northeast-1.amazonaws.com | 先ほど作ったS3を選択してください | |
| オブジェクトを自動的に圧縮 | ⬜ No ✅ Yes |
||
| ビューワープロトコルポリシー | ⬜ HTTP and HTTPS ✅ Redirect HTTP to HTTPS ⬜ HTTPS only |
||
| 許可された HTTP メソッド | ✅ GET, HEAD ⬜ GET, HEAD, OPTIONS ⬜ GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE |
||
| ビューワーのアクセスを制限する | ✅ No ⬜ Yes |
||
| レスポンスヘッダーポリシー - オプション | ✅ Cache policy and origin request policy (recommended) ⬜ Legacy cache settings |
||
| キャッシュポリシー | ⬜ CachingOptimized ⬜ CachingDisabled ⬜ CachingOptimizedForUncompressedObjects ⬜ Elemental-MediaPackage ⬜ Amplify-DefaultNoCookies ⬜ Amplify-Default ⬜ Amplify-StaticContent ⬜ Amplify-ImageOptimization ⬜ UseOriginCacheControlHeaders ⬜ UseOriginCacheControlHeaders-QueryStrings ✅ handson-cachepolicy |
||
| オリジンリクエストポリシー - オプション | ✅ None ⬜ UserAgentRefererHeaders ⬜ AllViewer ⬜ CORS-S3Origin ⬜ CORS-CustomOrigin ⬜ Elemental-MediaTailor-PersonalizedManifests ⬜ AllViewerAndCloudFrontHeaders-2022-06 ⬜ AllViewerExceptHostHeader ... |
||
| レスポンスヘッダーポリシー - オプション | ✅ None ⬜ SimpleCORS ⬜ CORS-With-Preflight ⬜ CORS-with-preflight-and-SecurityHeadersPolicy ⬜ CORS-and-SecurityHeadersPolicy ⬜ SecurityHeadersPolicy |
||
| 追加設定 | スムーズストリーミング | ✅ No ⬜ Yes |
追加設定(▼)をクリックして開くと、この項目が表示されます。 |
| フィールドレベル暗号化 | - | 追加設定(▼)をクリックして開くと、この項目が表示されます。 | |
| リアルタイムログを有効にする | ✅ No ⬜ Yes |
追加設定(▼)をクリックして開くと、この項目が表示されます。 | |
| 関数の関連付け - オプション | ビューワーレスポンス / 関数タイプ | ✅ 関連付けなし ⬜ Lambda@Edge ⬜ CloudFront function |
|
| 関数 ARN/名前 | - | ||
| 本文を含める | - | ||
| ビューワーレスポンス / 関数タイプ | ✅ 関連付けなし ⬜ Lambda@Edge ⬜ CloudFront function |
||
| 関数 ARN/名前 | - | ||
| 本文を含める | - | ||
| オリジンリクエスト / 関数タイプ | ✅ 関連付けなし ⬜ Lambda@Edge |
||
| 関数 ARN/名前 | - | ||
| 本文を含める | - | ||
| オリジンレスポンス / 関数タイプ | ✅ 関連付けなし ⬜ Lambda@Edge |
||
| 関数 ARN/名前 | - | ||
| 本文を含める | - |
4. Step2、LambdaとAPI Gatewayを作成
LambdaとAPI Gatewayを作成します
※画像はハンズオンより引用
4.1. (Step2)Lambda
- Lambda > 関数 >
関数の作成
リージョンはus-east-1です
| 大項目 | 中項目 | 値 | 備考 |
|---|---|---|---|
| 一から作成 | |||
| 基本的な情報 | 🔴関数名 | handson-lambda | |
| 🔴ランタイム | ✅ Python 3.13 ⬜ Node.js 22.x ⬜ Java 21 ⬜ Ruby 3.4 |
最新のPythonを選択すればOK | |
| アーキテクチャ | ⬜ arm64 ✅ x86_64 |
armはappleのCPUらしい | |
| デフォルトの実行ロールの変更 | 実行ロール | ✅ 基本的な Lambda アクセス権限で新しいロールを作成 ⬜ 既存のロールを使用す ⬜ AWS ポリシーテンプレートから新しいロールを作成 |
ロールを自動作成します |
| その他の構成 | 関数 URL を有効化 | ⬜Enable | |
| VPC を有効化 | ⬜Enable | ||
| コード署名を有効化 | ⬜Enable | ||
| AWS KMS カスタマーマネージドキーによる暗号化を有効にする | ⬜Enable | ||
| タグを有効化 | ⬜Enable |
4.1.2. (Step2)コード修正とデプロイ
- Lambda > 関数 > handson-lambda > コード
{
"queryStringParameters": {
"input_text": "こんにちは"
}
}
4.1.3. (Step2)translateポリシーのアタッチ
- Lambda > 関数 > handson-lambda > 設定 > アクセス権限 > ロール名をクリック > ポリシーをアタッチ
TranslateReadOnlyポリシーをアタッチします。
4.2. (Step2)API Gateway
リージョンはus-east-1です
4.2.1. (Step2)API Gatewayの作成
- API Gateway > API >
API を作成
| 大項目 | 中項目 | 選択肢 | 備考 |
|---|---|---|---|
| 🔴API タイプを選択 | ⬜HTTP API ⬜WebSocket API ✅REST API ⬜REST API プライベート |
||
| API の詳細 | ✅新しい API ⬜既存の API のクローンを作成 ⬜API をインポート ⬜サンプル API |
||
| 🔴API 名 | handson-api | ||
| 説明 - オプション | |||
| API エンドポイントタイプ | ✅リージョン ⬜エッジ最適化 ⬜プライベート |
||
| IP アドレスのタイプ | ✅IPv4 ⬜デュアルスタック |
4.2.2. (Step2)API Gateway-メソッドの作成
- API Gateway > API > リソース - handson-api >
メソッドを作成
| 大項目 | 中項目 | 選択肢 | 備考 |
|---|---|---|---|
| メソッドの詳細 | 🔴メソッドタイプ | ⬜ANY ⬜DELETE ✅GET ⬜HEAD ⬜OPTIONS ⬜PATCH ⬜POST ⬜PUT |
|
| 統合タイプ | ✅Lambda 関数 ⬜HTTP ⬜Mock ⬜AWS のサービス ⬜VPC リンク |
よくわからないね | |
| 🔴✅Lambda プロキシ統合 | よくわからないね | ||
| 🔴Lambda 関数 | XXXX | 作成したラムダを選択 | |
| 統合のタイムアウト | 29000 | ||
| メソッドリクエストの設定 | 認可 | なし | |
| リクエストバリデーター | なし | ||
| ⬜API キーは必須です | |||
| オペレーション名 - オプション |
|||
| URL クエリ文字列パラメータ | 🔴名前 | input_text | URLに引数与える設定です。動画内ではメソッド作成後に追加設定してます。 |
| 必須 | |||
| キャッシュ | |||
| HTTP リクエストヘッダー | |||
| リクエスト本文 |
4.2.3. (Step2)API Gateway-デプロイ
4.2.4. (Step2)API Gateway-動作確認
URLは各自のURLに読み替えてね
❌https://idmcqgysra.execute-api.us-east-1.amazonaws.com/api -> {"message": "Internal server error"}
✅https://idmcqgysra.execute-api.us-east-1.amazonaws.com/api?input_text=こんにちは世界 -> Hello World
5. Step3、CloudFrontとAPI Gatewayを紐づけ
CloudFrontとAPI Gatewayを紐づける
※画像はハンズオンより引用
5.1. (Step3)CloudFront
5.1.1. (Step3)オリジンリクエストポリシー作成
- CloudFront > ポリシー > オリジンリクエスト >
オリジンリクエストポリシー作成
| 大項目 | 中項目 | 選択肢 | 備考 |
|---|---|---|---|
| 詳細 | 名前 | ||
| 説明 - オプション | |||
| Origin request settings | ヘッダー | ✅なし ⬜すべてのビューワーヘッダー ⬜すべてのビューワーヘッダーと次の CloudFront ヘッダー ⬜All viewer headers except ⬜次のヘッダーを含める |
|
| クエリ文字列 | ⬜なし ⬜すべて ⬜次以外のすべてのクエリ文字列を含める: ✅指定したクエリ文字列を含める |
input_text | |
| cookie | ✅なし ⬜すべて ⬜次以外のすべての cookie を含める: ⬜指定された cookie を含める |
5.1.2. (Step3)オリジンを作成
- CloudFront > ディストリビューション > XXXXXXXX >
オリジンを作成
| 大項目 | 中項目 | 選択肢 | 備考 |
|---|---|---|---|
| 設定 | 🔴Origin domain | 作成したAPI Gatewayを選択 | |
| プロトコル | ⬜ HTTP のみ ✅HTTPS のみ ⬜ マッチビューワー |
||
| HTTPS port | 443 | ||
| Minimum Origin SSL protocol | TLSv1.2 | ||
| Origin path - optional | |||
| 名前 | Origin domainを入力すると自動で設定されます | ||
| カスタムヘッダーを追加 - オプション | |||
| Enable Origin Shield | ✅いいえ ⬜ はい |
||
| 追加設定 | Connection attempts | 3 | 追加設定(▼)をクリックして開くと、この項目が表示されます。 |
| Connection timeout | 10 | 追加設定(▼)をクリックして開くと、この項目が表示されます。 | |
| Response timeout | 30 | 追加設定(▼)をクリックして開くと、この項目が表示されます。 | |
| Response completion timeout | ⬜ Enable | 追加設定(▼)をクリックして開くと、この項目が表示されます。 |
5.1.3. (Step3)ビヘイビア作成
- CloudFront > ディストリビューション > (作成したディストリビューション) > `ビヘイビアを作成
| 大項目 | 中項目 | 選択肢 | 備考 |
|---|---|---|---|
| Settings | 🔴パスパターン | api | API Gatewayのステージ。翻訳機能用のAPIの設定 |
| 🔴オリジンとオリジングループ | 先ほど作ったS3を選択してください | ||
| オブジェクトを自動的に圧縮 | ⬜ No ✅ Yes |
||
| ビューワープロトコルポリシー | ⬜ HTTP and HTTPS ✅ Redirect HTTP to HTTPS ⬜ HTTPS only |
||
| 🔴許可された HTTP メソッド | ✅ GET, HEAD ⬜ GET, HEAD, OPTIONS ⬜ OPTIONS, PUT, POST, PATCH, DELETE |
オリジンとオリジングループでAPI Gatewayを選択すると自動で切り替わります | |
| HTTP メソッドをキャッシュ | ⬜ オプション | ||
| HTTP/2 経由の gRPC リクエストを許可する | ⬜ 有効 | ||
| ビューワーのアクセスを制限する | ✅ No ⬜ Yes |
||
| レスポンスヘッダーポリシー - オプション | ✅ Cache policy and origin request policy (recommended) ⬜ Legacy cache settings |
||
| 🔴キャッシュポリシー | ⬜ CachingOptimized ✅ CachingDisabled ⬜ CachingOptimizedForUncompressedObjects ⬜ Elemental-MediaPackage ⬜ Amplify-DefaultNoCookies ⬜ Amplify-Default ⬜ Amplify-StaticContent ⬜ Amplify-ImageOptimization ⬜ UseOriginCacheControlHeaders ⬜ UseOriginCacheControlHeaders-QueryStrings ⬜ handson-cachepolicy |
動的コンテンツなのでキャッシュをオフにする | |
| 🔴オリジンリクエストポリシー - オプション | ⬜ None ⬜ UserAgentRefererHeaders ⬜ AllViewer ⬜ CORS-S3Origin ⬜ CORS-CustomOrigin ⬜ Elemental-MediaTailor-PersonalizedManifests ⬜ AllViewerAndCloudFrontHeaders-2022-06 ⬜ AllViewerExceptHostHeader ✅ handson-originrequest-policy ... |
作成したオリジンリクエストポリシーを選択 | |
| レスポンスヘッダーポリシー - オプション | ✅ None ⬜ SimpleCORS ⬜ CORS-With-Preflight ⬜ CORS-with-preflight-and-SecurityHeadersPolicy ⬜ CORS-and-SecurityHeadersPolicy ⬜ SecurityHeadersPolicy |
||
| 追加設定 | スムーズストリーミング | ✅ No ⬜ Yes |
追加設定(▼)をクリックして開くと、この項目が表示されます。 |
| フィールドレベル暗号化 | - | 追加設定(▼)をクリックして開くと、この項目が表示されます。 | |
| リアルタイムログを有効にする | ✅ No ⬜ Yes |
追加設定(▼)をクリックして開くと、この項目が表示されます。 | |
| 関数の関連付け - オプション | ビューワーレスポンス | 関数タイプ | ✅ 関連付けなし ⬜ Lambda@Edge ⬜ CloudFront function |
| 関数 ARN/名前 | - | ||
| 本文を含める | - | ||
| ビューワーレスポンス | 関数タイプ | ✅ 関連付けなし ⬜ Lambda@Edge ⬜ CloudFront function |
|
| 関数 ARN/名前 | - | ||
| 本文を含める | - | ||
| オリジンリクエスト | 関数タイプ | ✅ 関連付けなし ⬜ Lambda@Edge |
|
| 関数 ARN/名前 | - | ||
| 本文を含める | - | ||
| オリジンレスポンス | 関数タイプ | ✅ 関連付けなし ⬜ Lambda@Edge |
|
| 関数 ARN/名前 | - | ||
| 本文を含める | - |
5.1.4. (Step3)動作確認
- ディストリビューションドメイン名 https://XXXX.cloudfront.net/ にアクセスし、画面が表示されることが確認できればOK。
- 日本語が英語に翻訳されることが確認できればOK。
こんにちは世界 -> Hello world - 開発者ツールでキャッシュが無効化が確認できればOK。
x-cache: Miss from cloudfront
6. Step4、WAFを作成
WAFを作成する
※画像はハンズオンより引用
6.1. (Step4)WAF
6.1.1. (Step4)web ACL作成
- AWS WAF > Web ACLs >
Create web ACL
画面名: Describe web ACL and associate it to AWS resources
| 大項目 | 中項目 | 選択肢 | 備考 |
|---|---|---|---|
| Web ACL details | 🔴Resource type | ✅ Global resources (CloudFront Distributions, CloudFront Distribution Tenants and AWS Amplify Applications) ⬜ Regional resources (Application Load Balancers, Amazon API Gateway REST APIs and AWS AppSync APIs) |
|
| 🔴Name | handson-waf | ||
| Description - optional | |||
| CloudWatch metric name | Nameを入力すると自動で入力されます | ||
| Associated AWS resources - optional | 🔴Resource type | ✅ CloudFront Distributions ⬜ CloudFront Distribution Tenants ⬜ AWS Amplify |
|
| 🔴Resources | 作成したディストリビューションを選択する | ||
| Web request body inspection - optional | ✅ Default ⬜ 16 KB ... |
6.1.2. (Step4)my own rulesの適用
- AWS WAF > Web ACLs > Create web ACL >
Add Rules>Add my own rules and rule groups
画面名: Add rules and rule groups
| 大項目 | 中項目 | 選択肢 | 備考 |
|---|---|---|---|
| 🔴Rules |
Add Rules > Add my own rules and rule groupsの操作をする |
| 大項目 | 中項目 | 選択肢 | 備考 |
|---|---|---|---|
| Rule type | 🔴Rule type | ⬜ IP set ✅ Rule builder ⬜ Rule group |
選択によって入力画面が切り替わります |
| Rule | 🔴Name | handson-rule | |
| Type | ✅ Regular rule ⬜ Rate-based rule |
||
| If a request | ✅ matches the statement ⬜ matches all the statements (AND) ⬜ matches at least one of the statements (OR) ⬜ doesn't match the statement (NOT) |
||
| Statement | 🔴Inspect | ✅ Originates from a country in ⬜ Originates from an IP address in ⬜ Originates from an ASN in ⬜ Has a label ⬜ Request components ⬜ Single header ⬜ All headers ⬜ Cookies ⬜ Single query parameter ⬜ All query parameters ⬜ URI path ⬜ Query string ⬜ Body ⬜ HTTP method ⬜ JA3 fingerprint ⬜ JA4 fingerprint ⬜ Header order ⬜ URI fragment |
Originates from a country in はどの国からリクエストが来たか判定する。今回のシナリオは日本からリクエストがきたらブロックします |
| 🔴Country codes | ✅ Japan - JP ... |
||
| IP address to use to determine the country of origin | ✅ Source IP address ⬜ IP address in header |
||
| Action | Action | ⬜ Allow ✅ Block ⬜ Count ⬜ CAPTCHA customize ⬜ Challenge |
|
| Custom response - optional | ⬜ Enable | ||
| Add label - optional |
| 大項目 | 中項目 | 選択肢 | 備考 |
|---|---|---|---|
| Web ACL capacity units (WCUs) used by your web ACL | |||
| Default web ACL action for requests that don't match any rules | Default action | ✅ Allow ⬜ Block |
今回のシナリオでは日本以外のリクエストを許可するという意味になります |
| Custom request - optional | |||
| Token domain list - optional |
画面名: Set rule priority
| 大項目 | 中項目 | 選択肢 | 備考 |
|---|---|---|---|
| Rules |
デフォルトのまま、「Next」をクリック
画面名: Configure metrics
| 大項目 | 中項目 | 選択肢 | 備考 |
|---|---|---|---|
| Amazon CloudWatch metrics | Rules | ✅ handson-rule | WAF の WebACL やルールごとに リクエスト数やブロック数などの統計情報 を CloudWatch に送るかどうかの設定 |
| Request sampling options | Options | ✅ Enable sampled requests ⬜ Disable sampled requests ⬜ Enable sampled requests with exclusions |
実際の Web リクエストを「サンプル」として保存するかどうかの設定。「サンプル」とは全リクエストの中から一部を抜き出して記録・表示する という意味です。 |
デフォルトのまま、「Next」をクリック
画面名: Review and create web ACL
ここは確認画面です。「Create web ACL」をクリック
6.1.3. (Step4)動作確認
-
ディストリビューションドメイン名 https://XXXX.cloudfront.net/ にアクセスし、画面でBlockのエラーが表示されることが確認できればOK。

6.1.4. (Step4)managed rule groupsの適用
- AWS WAF > Web ACLs > handson-waf > Rulesタブ >
Add Rules>Add managed rule groups
※画面内にリージョンを選ぶBOXがあるので、Global(CloudFront)にしないと作成したルールは表示されません。画面右上のリージョンではありません。
画面名: Add managed rule groups
| 大項目 | 中項目 | 選択肢 | 備考 |
|---|---|---|---|
| 🔴Rules |
Add Rules > Add managed rule groupsの操作をする |
| 大項目 | 中項目 | 選択肢 | 備考 |
|---|---|---|---|
| 🔴AWS managed rule groups | Paid rule groups | ✅ Core rule set ... |
✅ Add to web ACL |
| Cloudbric Corp. managed rule groups | |||
| Cyber Security Cloud Inc. managed rule groups | |||
| F5 managed rule groups | |||
| Fortinet managed rule groups | |||
| GeoGuard managed rule groups | |||
| Imperva managed rule groups | |||
| ThreatSTOP managed rule groups |
「Core rule set (CRS)」は、AWS WAF が提供する 一般的なセキュリティ攻撃対策ルールのセット です。他ルールが多すぎて、割愛します。
6.1.5.(Step4)動作確認
動画内では「Core rule set (CRS)」ルールの動作確認はありませんでした。実施するのは難しいと思います。
リソースの削除
- Amazon CloudFrontの削除
- ディストリビューション無効、削除
- キャッシュポリシーの削除
handson-cachepolicy - オリジンリクエストポリシーの削除
handson-originrequest-policy
- AWS WAFの削除
handson-waf - Amazon API Gatewayの削除
handson-api - AWS Lambdaの削除
handson-lambda - Amazon S3の削除
handson-lab.click
リージョンはus-east-1です
さいごに
感想です
- WAFの設定が長すぎる












