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

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

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

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

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

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

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

重要

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

と AppSync APIの統合 AWS WAF

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

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

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

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

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

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

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

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

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

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

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

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

注記

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

注記

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

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

ウェブのルールの作成 ACL

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

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

次に、リクエストのボディサイズを制限するルールの例を示します。これは、 AWS WAF コンソールACLでウェブを作成するときにルール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ルール

以下は、単一の IP アドレスからの から 100 個のリクエストにスロットリング AppSync APIするルールの例です。これは、 AWS WAF コンソールでレートベースのルールACLを使用してウェブを作成するときにルール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
例 への GraphQL __schema イントロスペクションクエリを防ぐためのウェブACLルール API

以下は、 への GraphQL __schema イントロスペクションクエリを禁止するルールの例ですAPI。文字列「__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