ユーザーが Application Load Balancer (ALB) に直接アクセスすることを制限し、AWS WAF を使用して Amazon CloudFront からのみアクセスを許可したいと考えています。AWS WAF を使用してこれを行うにはどうすればいいですか?
解決方法
ALB への直接トラフィックを制限し、AWS WAF を使用して CloudFront のみを通過するトラフィックを許可するには、以下を実行します。
- CloudFront が ALB に送信するリクエストにシークレット値を持つカスタム HTTP ヘッダーを追加するように CloudFront を設定する。
- ALB に関連付けられた AWS WAF ウェブ ACL で、カスタム HTTP ヘッダーシークレット値を含まないリクエストをブロックするルールを作成する。
CloudFront を設定して、ALB に送信するリクエストにシークレット値を含むカスタム HTTP ヘッダーを追加する
- Amazon CloudFront コンソールを開きます。
- ナビゲーションペインで、[Distributions] (ディストリビューション) を選択します。
- ディストリビューションの ID を選択します。
- [オリジン] を選択します。
- ALB オリジンを選択し、[Edit] を選択します。
**注意:**ALB オリジンがない場合は、「ディストリビューションの作成」または「ディストリビューションの更新」を参照してください。
- [カスタムヘッダーの追加] で、[ヘッダー名] と [値] を追加します。ヘッダー名の例は Custom-Header であり、値の例は Random-12345 です。
重要:ヘッダー名と値は、ユーザー名やパスワードなどの安全な認証情報として考慮してください。
- [Save Changes] (変更を保存) を選択します。
ALB に関連付けられた AWS WAF ウェブ ACL で、カスタム HTTP ヘッダーシークレット値を含まないリクエストをブロックするルールを作成します。
**注意:**ALB に関連付けられた既存のウェブ ACL がない場合は、「AWS WAF ウェブ ACL を作成する」の手順に従います。ALB に関連付けられた既存のウェブ ACL がある場合は、ルールの作成に進みます。
AWS WAF ウェブ ACL を作成する
- AWS WAF コンソールを開きます。
- ナビゲーションペインの [AWS WAF] の下で、[Web ACL] (ウェブ ACL) を選択します。
- [Region] で、ALB がある AWS リージョンを選択します。
- [ウェブ ACL の作成] を選択し、[名前] を入力します。
- [関連する AWS リソース] で、ALB を関連付けて、[次へ] を選択します。
- どのルールにも一致しないリクエストに対するデフォルトのウェブ ACL アクションで、[許可] を選択し、[次へ] を選択します。
- [リクエストのサンプリングオプション] で、[サンプリングされたリクエストを有効にする] を選択し、[次へ] を選択します。
- ウェブ ACL の設定を確認します。仕様と一致する場合は、[ウェブ ACL の作成] を選択します。
ルールを作成する
- AWS WAF コンソールを開きます。
- ナビゲーションペインの [AWS WAF] の下で、[Web ACL] (ウェブ ACL) を選択します。
- [Region] で、ALB がある AWS リージョンを選択します。
- ALB を関連付けたウェブ ACL を選択します。
- [Rules] (ルール) を選択し、[Add Rules] (ルールを追加)、[Add my own rules and rule groups] (独自のルールとルールグループを追加) の順に選択します。
- [Name] (名前) で [rule name] (ルール名) を入力し、[Regular Rule] (通常ルール) を選択します。
- [If a request] (リクエストが次の場合) で、[doesn't match the statement (NOT)] (ステートメントと一致しない (NOT)) を選択します。
- ステートメント 1:
[検査] で [単一ヘッダー] を選択します。
[ヘッダーフィールド名] に、CloudFront で作成されたヘッダー名の名前を入力します。例えば、Custom-header などです。
[一致タイプ] で、[完全に一致する文字列] を選択します。
[一致する文字列] に、CloudFront で作成された値を入力します。例えば、Random-12345 などです。
[Transformation] (変換) で、 [None] (なし) を選択します。
- [Action] (アクション) で [Block] (ブロック) を選択します。
- [Save rule] (ルールを保存) を選択します。
- [ルール優先度の設定] で、複数のルールがある場合は、このルールを最も高い優先度に設定します。
- [Save] (保存) を選択します。
関連情報
オリジンリクエストへのカスタムヘッダーの追加
AWS WAF ルール