AWS WAF を使用して AWS AppSync APIsを保護する - AWS AppSync GraphQL

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS WAF を使用して AWS AppSync APIsを保護する

AWS WAF は、ウェブアプリケーションと APIsから保護するのに役立つウェブアプリケーションファイアウォールです。お客様が定義するカスタマイズ可能なウェブセキュリティルールと条件に基づいて、ウェブリクエストを許可、ブロック、またはモニタリング (カウント) する一連のルール (ウェブアクセスコントロールリストまたはウェブ ACL と呼ばれます) を設定することができます。 AWS AppSync API を と統合すると AWS WAF、API が受け入れる HTTP トラフィックをより詳細に制御し、可視化できます。詳細については AWS WAF、「 AWS WAF デベロッパーガイド」のAWS WAF 「 の仕組み」を参照してください。

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

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

サポートされるルールのタイプと追加 AWS WAF 機能の詳細については、 AWS WAF デベロッパーガイドおよび AWS WAF API リファレンスを参照してください。

重要

AWS WAF は、ウェブエクスプロイトに対する防御の最前線です。API で AWS WAF が有効になっている場合は、API キー認可、IAM ポリシー、OIDC トークン、および Amazon Cognito ユーザープールなど他のアクセスコントロール機能の前に AWS WAF ルールが評価されます。

AppSync API を と統合する AWS WAF

Appsync API は、 AWS Management Console、 AWS CLI、またはその他の互換性のあるクライアント AWS WAF を使用して AWS CloudFormationと統合できます。

AWS AppSync API を と統合するには AWS WAF
  1. AWS WAF ウェブ ACL を作成します。AWS WAF コンソールを使用する詳細なステップについては、「ウェブ ACL の作成」を参照してください。

  2. ウェブ ACL のルールを定義します。1 つまたは複数のルールが、ウェブ ACL を作成するプロセスで定義されます。ルールを構成する方法の詳細については、AWS WAF ルールを参照してください。 AWS AppSync API に定義できる便利なルールの例については、「」を参照してくださいウェブ ACL のルールの作成

  3. ウェブ ACL を AWS AppSync API に関連付けます。このステップは、AWS WAF コンソールまたは、AppSync コンソールで実行できます。

    • ウェブ ACL を AWS WAF コンソールの AWS AppSync API に関連付けるには、 AWS WAF デベロッパーガイドの「 リソースとの AWS ウェブ ACL の関連付けまたは関連付け解除」の手順に従います。

    • コンソールでウェブ ACL を AWS AppSync API AWS AppSync に関連付けるには

      1. にサインイン AWS Management Console し、AppSync コンソールを開きます。

      2. ウェブ ACL に関連付ける API を選択します。

      3. ナビゲーションペインで [設定] を選択します。

      4. Web アプリケーションファイアウォールセクションで、有効化 AWS WAFをオンにします。

      5. ウェブ ACLドロップダウンリストで、API に関連付けるウェブ ACL の名前を選択します。

      6. 保存を選択してウェブ ACL を API に関連付けます。

注記

AWS WAF コンソールでウェブ ACL を作成した後、新しいウェブ ACL が使用可能になるまでに数分かかることがあります。Web アプリケーションファイアウォールメニューで新しく作成されたウェブ ACL が表示されない場合、数分待ってから、ウェブ ACL を API に関連付ける手順を再試行します。

注記

AWS WAF 統合は、リアルタイムエンドポイントの Subscription registration message イベントのみをサポートします。 AWS AppSync は、Subscription registration messageブロックされた のstart_ackメッセージではなく、エラーメッセージで応答します AWS WAF。

ウェブ ACL を AWS AppSync API に関連付けると、 AWS WAF APIs を使用してウェブ ACL を管理します。 AWS AppSync API を別のウェブ ACL に関連付ける場合を除き、ウェブ ACL を AWS AppSync API に再関連付けする必要はありません。

ウェブ ACL のルールの作成

ルールは、ウェブリクエストの検査方法と、ウェブリクエストが検査基準に一致した場合の処理を定義します。ルールは AWS WAF 、それ自体で には存在しません。ルールが定義されているルールグループまたはウェブ ACL に含まれる名前を使用してルールにアクセスします。詳細については、「AWS WAF ルール」を参照してください。次の例は、AppSync API の保護に役立つルールを定義し、関連付ける方法を示しています。

例 リクエストボディのサイズを制限するウェブ ACL ルール

次に、リクエストのボディサイズを制限するルールの例を示します。これは、 AWS WAF コンソールでウェブ ACL を作成するときに Rule JSON エディタに入力されます。

{ "Name": "BodySizeRule", "Priority": 1, "Action": { "Block": {} }, "Statement": { "SizeConstraintStatement": { "ComparisonOperator": "GE", "FieldToMatch": { "Body": {} }, "Size": 1024, "TextTransformations": [ { "Priority": 0, "Type": "NONE" } ] } }, "VisibilityConfig": { "CloudWatchMetricsEnabled": true, "MetricName": "BodySizeRule", "SampledRequestsEnabled": true } }

前述のルール例を使用してウェブ ACL を作成したら、それを AppSync API に関連付ける必要があります。を使用する代わりに AWS Management Console、次のコマンド AWS CLI を実行して、 でこのステップを実行できます。

aws waf associate-web-acl --web-acl-id waf-web-acl-arn --resource-arn appsync-api-arn

変更が伝播されるまで数分かかる場合がありますが、このコマンドを実行した後、1024 バイトを超える本文を含む要求は、 AWS AppSyncによって拒否されます。

注記

AWS WAF コンソールで新しいウェブ ACL を作成した後、ウェブ ACL が API に関連付けるまでに数分かかることがあります。CLI コマンドを実行して、WAFUnavailableEntityException エラーを取得し、数分待ってからコマンドを再実行してください。

例 単一の IP アドレスからの要求を制限するウェブ ACL ルール

以下は、5 分間の単一の IP アドレスからの 100 リクエストに AppSync API をスロットリングするルールの例です。これは、 AWS WAF コンソールでレートベースのルールを使用してウェブ ACL を作成するときに、Rule JSON エディタに入力されます。

{ "Name": "Throttle", "Priority": 0, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "Throttle" }, "Statement": { "RateBasedStatement": { "Limit": 100, "AggregateKeyType": "IP" } } }

前述のルール例を使用してウェブ ACL を作成したら、それを AppSync API に関連付ける必要があります。このステップは、次のコマンド AWS CLI を実行して で実行できます。

aws waf associate-web-acl --web-acl-id waf-web-acl-arn --resource-arn appsync-api-arn
例 API に対するすべての GraphQL __schema イントロスペクションクエリを防止するためのウェブ ACL ルール

次に、API に対するすべての G GraphQL __schema イントロスペクションクエリを禁止するルールの例を示します。文字列「__schema」を含む HTTP ボディはすべてブロックされます。これは、 AWS WAF コンソールでウェブ ACL を作成するときに、ルール JSON エディタに入力されます。

{ "Name": "BodyRule", "Priority": 5, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "BodyRule" }, "Statement": { "ByteMatchStatement": { "FieldToMatch": { "Body": {} }, "PositionalConstraint": "CONTAINS", "SearchString": "__schema", "TextTransformations": [ { "Type": "NONE", "Priority": 0 } ] } } }

前述のルール例を使用してウェブ ACL を作成したら、それを AppSync API に関連付ける必要があります。このステップは、次のコマンド AWS CLI を実行して で実行できます。

aws waf associate-web-acl --web-acl-id waf-web-acl-arn --resource-arn appsync-api-arn