AWS WAF を使用して、Application Load Balancer への直接アクセスを制限したいと考えています。また、AWS WAF を使用して、Amazon API Gateway 経由の直接アクセスのみを許可したいと考えています。
解決方法
AWS WAF を使用して Application Load Balancer への直接トラフィックを制限し、API Gateway 経由のトラフィックのみを許可するには、以下の手順に従います。
カスタム HTTP ヘッダーを追加する
Application Load Balancer に送信するリクエストにシークレット値を含むカスタム HTTP ヘッダーを追加するように API Gateway を設定します。
次の手順を実行します。
- API Gateway コンソールを開きます。
- ナビゲーションペインで **[API]**を選択し、次に REST API を選択します。
- **[リソース]**で HTTP メソッドを選択します。たとえば、 **[GET]**を選択します。
- **[統合リクエスト]タブを選択し、[編集]**を選択します。
- **[URL リクエストヘッダーパラメータ]セクションを展開し、[リクエストヘッダーパラメータを追加]**を選択します。
- **[名前]**にヘッダーの名前を、たとえば「custom-header」と入力します。
- [マッピング元]にシークレットヘッダー値を、たとえば「'secret-value'」と入力します。
注: 値は一重引用符で囲む必要があります。
- **[保存]**を選択します。
ウェブ ACL とルールを作成する
Application Load Balancer に関連付けられた空の AWS WAF ウェブ ACL を作成します。次に、シークレット値を含むカスタム HTTP ヘッダーを持たないリクエストをブロックするルールを作成します。
**注:**Application Load Balancer に既存のウェブ ACL が関連付けられている場合は、「ルールの作成」に進んでください。
AWS WAF ウェブ ACL を作成するには、以下の手順を実行します。
- AWS WAF コンソールを開きます。
- ナビゲーションペインの**[AWS WAF]で[ウェブ ACL]を選択し、[ウェブ ACL を作成]**を選択します。
- **[リージョン]**には、Application Load Balancer が配置されている AWS リージョンを選択します。
- **[名前]**には名前を入力します。
- **[関連する AWS リソース]には、Application Load Balancer を選択し、[次へ]**を選択します。
- **[ルールとルールグループを追加]**には、デフォルト値をそのまま使用します。
- **[次へ]を選択し、もう一度[次へ]**を選択します。
- **[リクエストのサンプリングオプション]に[サンプルリクエストを有効にする]を選択し、[次へ]**を選択します。
- ウェブ ACL の設定を確認します。仕様に合っている場合は、**[ウェブ ACL を作成]**を選択します。
ルールを作成するには、次の手順を実行してください。
- AWS WAF コンソールを開きます。
- ナビゲーションペインの**[AWS WAF]で、[ウェブ ACL]**を選択します。
- **[リージョン]**には、Application Load Balancer が配置されている AWS リージョンを選択します。
- 関連するウェブ ACL を選択します。
- [ルール]を選択し、[ルールを追加]、**[独自のルールとルールグループを追加]**の順に選択します。
- [名前]にルール名を入力し、**[標準ルール]**を選択します。
- **[リクエストの場合]には、[ステートメントと一致しない (NOT)]**を選択します。
- **[ステートメント 1]**では次の操作を行います。
**[検査]には[単一ヘッダー]**を選択します。
[ヘッダーフィールド名]にはカスタムヘッダー名を、たとえば「custom-header」と入力します。
**[マッチタイプ]には[完全に一致する文字列]**を選択します。
[一致する文字列]には、シークレットヘッダー値を、たとえば「'secret-value'」と入力します。
注: 値を一重引用符で囲んでいることを確認してください。
- **[アクション]には[ブロック]**を選択します。
- **[ルールを保存]**を選択します。
- **[ルール優先度を設定]**で、ルールの優先度を最高に設定します。
- **[保存]**を選択します。
関連情報
API Gateway REST API を Application Load Balancer と統合する方法を教えてください。