AWS WAF を使用して API を保護する - Amazon API Gateway

AWS WAF を使用して API を保護する

AWS WAF は、Web アプリケーションと API を攻撃から保護する Web アプリケーションファイアウォールです。お客様が定義するカスタマイズ可能なウェブセキュリティルールと条件に基づいて、ウェブリクエストを許可、ブロック、またはカウントする一連のルール (ウェブアクセスコントロールリストまたはウェブ ACL と呼ばれます) を設定することができます。詳細については、「AWS WAF の仕組み」を参照してください。

AWS WAF を使用して、SQL インジェクションやクロスサイトスクリプティング (XSS) 攻撃など、一般的なウェブエクスプロイトから API Gateway API を保護できます。これらは、API の可用性とパフォーマンスに影響を与え、セキュリティを侵害したり、過剰なリソースを消費したりする可能性があります。たとえば、指定した IP アドレス範囲からのリクエスト、CIDR ブロックからのリクエスト、特定の国またはリージョンからのリクエスト、悪意のある SQL コードを含むリクエスト、悪意のあるスクリプトを含むリクエストを許可またはブロックするルールを作成できます。

また、HTTP ヘッダー、メソッド、クエリ文字列、URI、およびリクエストボディの指定された文字列または定型表現パターン (最初の 8 KB に制限されます) に一致するルールを作成することもできます。さらに、特定のユーザーエージェント、悪質なボット、またはコンテンツスクレーパーからの攻撃をブロックするルールを作成できます。たとえば、レートベースのルールを使用して、継続的に更新される後続の 5 分間で、各クライアント IP によって許可されるウェブリクエストの数を指定できます。

重要

AWS WAF は、ウェブの脆弱性に対する防御の最前線です。AWS WAF が API で有効になっている場合、AWS WAF ルールは、リソースポリシーIAM ポリシーLambda オーソライザー、および Amazon Cognito オーソライザーなどの他のアクセスコントロール機能の前に評価されます。たとえば、AWS WAF がリソースポリシーで許可されている CIDR ブロックからのアクセスをブロックした場合、AWS WAF が優先され、リソースポリシーは評価されません。

API に対して AWS WAF を有効にするには、次の操作を行う必要があります。

  1. AWS WAF コンソール、AWS SDK、または CLI を使用して、AWS WAF マネージドルールと独自のカスタムルールの自由な組み合わせを含むリージョン別ウェブ ACL を作成します。詳細については、「AWS WAF の開始方法」および「ウェブアクセスコントロールリスト (ウェブ ACL) の作成と設定」を参照してください。

    重要

    API Gateway には、リージョンウェブ ACL が必要になります。

  2. AWS WAF リージョンウェブ ACL を API ステージに関連付けます。これを行うには、AWS WAF コンソール、AWS SDK、または CLI を使用するか、API Gateway コンソール、AWS SDK、または CLI を使用します。

API Gateway コンソールを使用して AWS WAF リージョンウェブ ACL を API Gateway API ステージと関連付けるには

API Gateway コンソールを使用して AWS WAF リージョンウェブ ACL を既存の API Gateway API ステージに関連付けるには、次のステップを実行します。

  1. https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。

  2. [API] ナビゲーションペインで API を選択し、[ステージ] を選択します。

  3. [ステージ] ペインで、ステージの名前を選択します。

  4. [ステージエディター] ペインで、[設定] タブを選択します。

  5. リージョンウェブ ACL を API ステージに関連付けるには

    1. [AWS WAF ウェブ ACL] ドロップダウンリストで、このステージに関連付けるリージョンウェブ ACL を選択します。

      注記

      必要なウェブ ACL がまだ存在しない場合は、 [WebACL の作成] を選択します。次に、[AWS WAF に移動] を選択して、AWS WAF コンソールを新しいブラウザタブで開き、リージョンウェブ ACL を作成します。次に、API Gateway コンソールに戻り、ウェブ ACL をステージに関連付けます。

  6. [Save Changes (変更の保存)] を選択します。

AWS CLI を使用して AWS WAF リージョンウェブ ACL を API Gateway API ステージと関連付ける

AWS CLI を使用して AWS WAF リージョンウェブ ACL を既存の API Gateway API ステージに関連付けるには、次の例のように associate-web-acl コマンドを呼び出します。

aws waf-regional associate-web-acl \ --web-acl-id 'aabc123a-fb4f-4fc6-becb-2b00831cadcf' \ --resource-arn 'arn:aws:apigateway:{region}::/restapis/4wk1k4onj3/stages/prod'

AWS WAF REST API を使用して AWS WAF リージョンウェブ ACL を API ステージと関連付ける

AWS WAF REST API を使用して AWS WAF リージョンウェブ ACL を既存の API Gateway API ステージに関連付けるには、次の例のように AssociateWebACL コマンドを呼び出します。

import boto3 waf = boto3.client('wafregional') waf.associate_web_acl( WebACLId='aabc123a-fb4f-4fc6-becb-2b00831cadcf', ResourceArn='arn:aws:apigateway:{region}::/restapis/4wk1k4onj3/stages/prod' )