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

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

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

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

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

重要

AWS WAF は、ウェブの脆弱性に対する防御の最前線です。API で AWS WAF が有効になっている場合は、リソースポリシーIAM ポリシーLambda オーソライザー、および Amazon Cognito オーソライザーなど他のアクセスコントロール機能の前に AWS WAF ルールが評価されます。たとえば、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 コンソールを使用できます。

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. [Web アプリケーションファイアウォール (AWS WAF)] の下で、このステージに関連付けるリージョンウェブ 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('waf-regional') waf.associate_web_acl( WebACLId='aabc123a-fb4f-4fc6-becb-2b00831cadcf', ResourceArn='arn:aws:apigateway:{region}::/restapis/4wk1k4onj3/stages/prod' )