

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

# AWS WAF を使用して AWS AppSync APIsを保護する
<a name="WAF-Integration"></a>

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

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

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

サポートされるルールのタイプと追加 AWS WAF 機能の詳細については、 [AWS WAF デベロッパーガイド](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html)および [AWS WAF API リファレンス](https://docs.aws.amazon.com/waf/latest/APIReference/API_Types_AWS_WAFV2.html)を参照してください。

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

## AppSync API を と統合する AWS WAF
<a name="integrate-API-with-WAF"></a>

Appsync API は、 AWS マネジメントコンソール、 AWS CLI、またはその他の互換性のあるクライアント AWS WAF を使用して AWS CloudFormationと統合できます。

**AWS AppSync API を と統合するには AWS WAF**

1.  AWS WAF ウェブ ACL を作成します。[AWS WAF コンソール](https://console.aws.amazon.com/waf/)を使用する詳細なステップについては、「[ウェブ ACL の作成](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl-creating.html)」を参照してください。

1. ウェブ ACL のルールを定義します。1 つまたは複数のルールが、ウェブ ACL を作成するプロセスで定義されます。ルールを構成する方法の詳細については、[AWS WAF ルール](https://docs.aws.amazon.com/waf/latest/developerguide/waf-rules.html)を参照してください。 AWS AppSync API に定義できる便利なルールの例については、「」を参照してください[ウェブ ACL のルールの作成](#Creating-web-acl-rules)。

1. ウェブ ACL を AWS AppSync API に関連付けます。このステップは、[AWS WAF コンソール](https://console.aws.amazon.com/wafv2/)または、[AppSync コンソール](https://console.aws.amazon.com/appsync/)で実行できます。
   + ウェブ ACL を AWS WAF コンソールの AWS AppSync API に関連付けるには、 AWS WAF デベロッパーガイドの[「 リソースとの AWS ウェブ ACL の関連付けまたは関連付け解除](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl-associating-aws-resource.html)」の手順に従います。
   + コンソールでウェブ ACL を AWS AppSync API AWS AppSync に関連付けるには

     1. にサインイン AWS マネジメントコンソール し、[AppSync コンソール](https://console.aws.amazon.com/appsync/)を開きます。

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

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

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

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

     1. **保存**を選択してウェブ 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 のルールの作成
<a name="Creating-web-acl-rules"></a>

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

**Example リクエストボディのサイズを制限するウェブ 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 マネジメントコンソール、次のコマンド 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` エラーを取得し、数分待ってからコマンドを再実行してください。

**Example 単一の 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
```

**Example API に対するすべての GraphQL \$1\$1schema イントロスペクションクエリを防止するためのウェブ ACL ルール**  
次に、API に対するすべての G GraphQL \$1\$1schema イントロスペクションクエリを禁止するルールの例を示します。文字列「\$1\$1schema」を含む 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
```