

**推出 的新主控台體驗 AWS WAF**

您現在可以使用更新後的體驗，在主控台的任何位置存取 AWS WAF 功能。如需詳細資訊，請參閱[使用 主控台](https://docs.aws.amazon.com/waf/latest/developerguide/working-with-console.html)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 記錄 AWS WAF 保護套件 (Web ACL) 流量
<a name="logging"></a>

本節說明 AWS WAF 保護套件 (Web ACLs的記錄選項。

您可以啟用日誌記錄取得您 Web ACL 分析流量的詳細資訊。記錄的資訊包括從您的 AWS 資源 AWS WAF 接收 Web 請求的時間、請求的詳細資訊，以及請求相符規則的詳細資訊。您可以將保護套件 (Web ACL) 日誌傳送至 Amazon CloudWatch Logs 日誌群組、Amazon Simple Storage Service (Amazon S3) 儲存貯體或 Amazon Data Firehose 交付串流。

除了您可以為保護套件 (Web ACLs) 啟用的日誌之外， AWS 也會使用 處理之網站或應用程式流量的服務日誌 AWS WAF ，來提供支援和保護 AWS 客戶和服務的安全性。

**注意**  
保護套件 (Web ACL) 記錄組態只會影響 AWS WAF 日誌。特別是，用於記錄的修訂欄位組態不會影響請求抽樣或 Security Lake 資料收集。您可以透過設定保護套件 (Web ACL) 資料保護，將欄位排除在收集或取樣之外。除了資料保護之外，Security Lake 資料收集是透過 Security Lake 服務完全設定。

**Topics**
+ [記錄保護套件 (Web ACL) 流量資訊的定價](logging-pricing.md)
+ [AWS WAF 記錄目的地](logging-destinations.md)
+ [設定保護套件的記錄 (Web ACL)](logging-management-configure.md)
+ [尋找您的保護套件 (Web ACL) 記錄](logging-management.md)
+ [保護套件 (Web ACL) 流量的日誌欄位](logging-fields.md)
+ [保護套件 (Web ACL) 流量的日誌範例](logging-examples.md)

**其他資料收集和分析選項**  
除了記錄之外，您還可以為資料收集和分析啟用下列選項：
+ **Amazon Security Lake** – 您可以設定 Security Lake 來收集保護套件 (Web ACL) 資料。Security Lake 會從各種來源收集日誌和事件資料，以進行標準化、分析和管理。如需此選項的相關資訊，請參閱《[Amazon Security Lake 使用者指南》中的什麼是 Amazon Security Lake？](https://docs.aws.amazon.com/security-lake/latest/userguide/what-is-security-lake.html)以及[從 AWS 服務收集資料](https://docs.aws.amazon.com/security-lake/latest/userguide/internal-sources.html)。 **

  AWS WAF 不會向您收取使用此選項的費用。如需定價資訊，請參閱《Amazon [Security Lake 使用者指南》中的 Security Lake 定價](https://aws.amazon.com/security-lake/pricing/)和 [Security Lake 定價的判斷方式](https://docs.aws.amazon.com/security-lake/latest/userguide/estimating-costs.html)。 **
+ **請求取樣** – 您可以設定保護套件 (Web ACL) 來取樣其評估的 Web 請求，以了解應用程式正在接收的流量類型。如需此選項的詳細資訊，請參閱[檢視 Web 請求的範例](web-acl-testing-view-sample.md)。

# 記錄保護套件 (Web ACL) 流量資訊的定價
<a name="logging-pricing"></a>

本節說明使用 保護套件 (Web ACL) 流量日誌的定價考量。

您需要根據與每個日誌目的地類型相關聯的成本，支付日誌保護套件 (Web ACL) 流量資訊的費用。這些費用是使用 的附加費用 AWS WAF。您的成本可能會因您選擇的目的地類型和記錄的資料量等因素而有所不同。

下列提供每個記錄目的地類型的定價資訊連結：
+ **CloudWatch Logs** – 費用適用於付費日誌交付。請參閱 [Amazon CloudWatch Logs 定價](https://aws.amazon.com/cloudwatch/pricing/)。在**付費方案**下，選擇**日誌**索引標籤，然後在**已取代的日誌**下，請參閱**交付至 CloudWatch Logs** 的資訊。
+ **Amazon S3 儲存貯體** – Amazon S3 費用是 CloudWatch Logs 將日誌交付至 Amazon S3 儲存貯體和使用 Amazon S3 的合併費用。
  + 對於 Amazon S3，請參閱 [Amazon S3 定價](https://aws.amazon.com/s3/pricing/)。
  + 如需 CloudWatch Logs 將日誌交付至 Amazon S3，請參閱 [Amazon CloudWatch Logs 定價](https://aws.amazon.com/cloudwatch/pricing/)。在**付費方案**下，選擇**日誌**索引標籤，然後在**已取代的日誌**下，請參閱**交付至 S3** 的資訊
+ **Firehose** – 請參閱 [Amazon Data Firehose 定價](https://aws.amazon.com/kinesis/data-firehose/pricing/)。

如需 AWS WAF 定價的資訊，請參閱 [AWS WAF 定價](https://aws.amazon.com/waf/pricing/)。

# AWS WAF 記錄目的地
<a name="logging-destinations"></a>

本節說明您可以從日誌中選擇的記錄選項 AWS WAF 。每個區段都提供設定記錄的指導，包括有關目的地類型特定之任何行為的資訊。設定記錄目的地之後，您可以將其規格提供給保護套件 (Web ACL) 記錄組態，以開始記錄。

**Topics**
+ [CloudWatch Logs](logging-cw-logs.md)
+ [Amazon S3](logging-s3.md)
+ [Firehose](logging-kinesis.md)

# 將保護套件 (Web ACL) 流量日誌傳送至 Amazon CloudWatch Logs 日誌群組
<a name="logging-cw-logs"></a>

本主題提供將保護套件 (Web ACL) 流量日誌傳送至 CloudWatch Logs 日誌群組的資訊。

**注意**  
除了使用 的費用之外，您還需要支付記錄費用 AWS WAF。如需相關資訊，請參閱[記錄保護套件 (Web ACL) 流量資訊的定價](logging-pricing.md)。

若要將日誌傳送至 Amazon CloudWatch Logs，您可以建立 CloudWatch Logs 日誌群組。啟用登入時 AWS WAF，您會提供日誌群組 ARN。啟用保護套件 (Web ACL) 的記錄後， 會將日誌 AWS WAF 傳遞至日誌串流中的 CloudWatch Logs 日誌群組。

當您使用 CloudWatch Logs 時，您可以在 主控台中探索保護套件 (Web ACL) 的 AWS WAF 日誌。在保護套件 (Web ACL) 頁面中，選取**記錄洞見**索引標籤。此選項是除了透過 CloudWatch 主控台為 CloudWatch Logs CloudWatch 提供的記錄洞見之外的。

在與 AWS WAF 保護套件 (Web ACL) 相同的區域中設定保護套件 (Web ACL) 日誌的日誌群組，並使用與用來管理保護套件 (Web ACL) 相同的帳戶。如需有關設定 CloudWatch Logs 日誌群組的資訊，請參閱[使用日誌群組和日誌串流](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)。

## CloudWatch Logs 日誌群組的配額
<a name="logging-cw-logs-quotas"></a>

CloudWatch Logs 具有輸送量的預設最大配額，可在區域內所有日誌群組之間共用，您可以請求增加。如果您的記錄需求對於目前的輸送量設定而言太高，您會看到`PutLogEvents`帳戶的 限流指標。若要在 Service Quotas 主控台中檢視限制並請求提高，請參閱 [CloudWatch Logs PutLogEvents 配額](https://console.aws.amazon.com/servicequotas/home/services/logs/quotas/L-7E1FAE88)。

## 日誌群組命名
<a name="logging-cw-logs-naming"></a>

您的日誌群組名稱必須以 開頭`aws-waf-logs-`，並以您喜歡的任何尾碼結尾，例如 `aws-waf-logs-testLogGroup2`。

產生的 ARN 格式如下：

```
arn:aws:logs:Region:account-id:log-group:aws-waf-logs-log-group-suffix
```

日誌串流具有下列命名格式：

```
Region_web-acl-name_log-stream-number
```

以下顯示區域 `TestWebACL`中保護套件 (Web ACL) 的日誌串流範例`us-east-1`。

```
us-east-1_TestWebACL_0
```

## 將日誌發佈至 CloudWatch Logs 所需的許可
<a name="logging-cw-logs-permissions"></a>

為 CloudWatch Logs 日誌群組設定保護套件 (Web ACL) 流量記錄需要本節所述的許可設定。當您使用其中一個 AWS WAF 完整存取受管政策 `AWSWAFConsoleFullAccess`或 時，會為您設定許可`AWSWAFFullAccess`。如果您想要管理對記錄 AWS WAF 和資源的更精細存取，您可以自行設定許可。如需有關管理許可的資訊，請參閱《*IAM 使用者指南*》中的[存取 AWS 資源的管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html)。如需 受管 AWS WAF 政策的相關資訊，請參閱 [AWS 的 受管政策 AWS WAF](security-iam-awsmanpol.md)。

這些許可可讓您變更保護套件 (Web ACL) 記錄組態、設定 CloudWatch Logs 的日誌交付，以及擷取日誌群組的相關資訊。這些許可必須連接到您用來管理 的使用者 AWS WAF。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "wafv2:PutLoggingConfiguration",
                "wafv2:DeleteLoggingConfiguration"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow",
            "Sid": "LoggingConfigurationAPI"
        },
        {
            "Sid": "WebACLLoggingCWL",
            "Action": [
                "logs:CreateLogDelivery",
                "logs:DeleteLogDelivery",
                "logs:PutResourcePolicy",
                "logs:DescribeResourcePolicies",
                "logs:DescribeLogGroups"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow"
        }
    ]
}
```

------

允許對所有 AWS 資源執行動作時，政策中會指出動作，其`"Resource"`設定為 `"*"`。這表示每個動作支援的所有 AWS 資源都允許這些動作。 **例如， 動作僅`wafv2:PutLoggingConfiguration`支援`wafv2`記錄組態資源。

# 將保護套件 (Web ACL) 流量日誌傳送至 Amazon Simple Storage Service 儲存貯體
<a name="logging-s3"></a>

本主題提供將保護套件 (Web ACL) 流量日誌傳送至 Amazon S3 儲存貯體的資訊。

**注意**  
除了使用 的費用之外，您還需要支付記錄費用 AWS WAF。如需相關資訊，請參閱[記錄保護套件 (Web ACL) 流量資訊的定價](logging-pricing.md)。

若要將保護套件 (Web ACL) 流量日誌傳送至 Amazon S3，您可以從用來管理保護套件 (Web ACL) 的相同帳戶設定 Amazon S3 儲存貯體，並以 開頭命名儲存貯體`aws-waf-logs-`。當您啟用登入時 AWS WAF，請提供儲存貯體名稱。如需有關建立記錄儲存貯體的資訊，請參閱《*Amazon Simple Storage Service 使用者指南*》中的[建立儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingABucket.html)。

您可以使用 Amazon Athena 互動式查詢服務存取和分析 Amazon S3 日誌。 Amazon Athena Athena 可讓您使用標準 SQL 直接在 Amazon S3 中分析資料。透過 中的幾個動作 AWS 管理主控台，您可以將 Athena 指向存放在 Amazon S3 中的資料，並快速開始使用標準 SQL 來執行臨機操作查詢並取得結果。如需詳細資訊，請參閱《*Amazon Athena 使用者指南*》中的[查詢 AWS WAF 日誌](https://docs.aws.amazon.com/athena/latest/ug/waf-logs.html)。如需其他範例 Amazon Athena 查詢，請參閱 GitHub 網站上的 [aws-samples/waf-log-sample-athena-queries](https://github.com/aws-samples/waf-log-sample-athena-queries)。

**注意**  
AWS WAF 支援對 Amazon S3 金鑰類型 (SSE-S3) 和 for AWS Key Management Service (SSE-KMS) 使用 Amazon S3 儲存貯體進行加密 AWS KMS keys。 AWS WAF 不支援對 管理的 AWS Key Management Service 金鑰進行加密 AWS。

來自保護套件 (Web ACL) 的日誌檔案會以 5 分鐘的間隔發佈至 Amazon S3 儲存貯體。每個日誌檔案都包含過去 5 分鐘內記錄之流量的日誌記錄。

日誌檔的大小上限為 75 MB。如果日誌檔案在 5 分鐘內達到檔案大小限制，日誌會停止新增記錄，將其發佈到 Amazon S3 儲存貯體，然後建立新的日誌檔案。

日誌檔案已壓縮。如果您使用 Amazon S3 主控台開啟檔案，Amazon S3 會解壓縮日誌記錄並顯示它們。如果您下載日誌檔案，則必須解壓縮它們才能檢視記錄。

單一日誌檔案包含具有多個記錄的交錯項目。若要查看保護套件 (Web ACL) 的所有日誌檔案，請尋找依保護套件 (Web ACL) 名稱、區域和您的帳戶 ID 彙總的項目。

## 命名要求和語法
<a name="logging-s3-naming"></a>

用於 AWS WAF 記錄的儲存貯體名稱必須以 開頭`aws-waf-logs-`，並以您想要的任何尾碼結尾。例如 `aws-waf-logs-LOGGING-BUCKET-SUFFIX`。

**儲存貯體位置**  
儲存貯體位置使用以下語法：

```
s3://aws-waf-logs-LOGGING-BUCKET-SUFFIX/
```

**儲存貯體 ARN**  
儲存貯體 Amazon Resource Name (ARN) 的格式如下：

```
arn:aws:s3:::aws-waf-logs-LOGGING-BUCKET-SUFFIX
```

**具有字首的儲存貯體位置**  
如果您在物件金鑰名稱中使用字首來組織存放在儲存貯體中的資料，您可以在記錄儲存貯體名稱中提供字首。

**注意**  
此選項無法透過 主控台使用。使用 AWS WAF APIs、CLI 或 AWS CloudFormation。

如需在 Amazon S3 中使用字首的資訊，請參閱《*Amazon Simple Storage Service 使用者指南*》中的[使用字首組織物件](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-prefixes.html)。

具有字首 的儲存貯體位置使用以下語法：

```
s3://aws-waf-logs-LOGGING-BUCKET-SUFFIX/KEY-NAME-PREFIX/
```

**儲存貯體資料夾和檔案名稱**  
在您的儲存貯體中，並遵循您提供的任何字首，您的 AWS WAF 日誌會以由您的帳戶 ID、區域、保護套件 (Web ACL) 名稱以及日期和時間決定的資料夾結構撰寫。

```
AWSLogs/account-id/WAFLogs/Region/web-acl-name/YYYY/MM/dd/HH/mm
```

在資料夾中，日誌檔案名稱遵循類似的格式：

```
account-id_waflogs_Region_web-acl-name_timestamp_hash.log.gz
```

資料夾結構和日誌檔案名稱中使用的時間規格符合時間戳記格式規格 `YYYYMMddTHHmmZ`。

以下顯示名為 之儲存貯體的 Amazon S3 儲存貯體中的範例日誌檔案`aws-waf-logs-LOGGING-BUCKET-SUFFIX`。 AWS 帳戶 是 `11111111111`。保護套件 (Web ACL) 是 ，`TEST-WEBACL`區域是 `us-east-1`。

```
s3://aws-waf-logs-LOGGING-BUCKET-SUFFIX/AWSLogs/11111111111/WAFLogs/us-east-1/TEST-WEBACL/2021/10/28/19/50/11111111111_waflogs_us-east-1_TEST-WEBACL_20211028T1950Z_e0ca43b5.log.gz
```

**注意**  
用於 AWS WAF 記錄的儲存貯體名稱必須以 開頭`aws-waf-logs-`，並以您想要的任何尾碼結尾。

## 將日誌發佈至 Amazon S3 所需的許可
<a name="logging-s3-permissions"></a>

為 Amazon S3 儲存貯體設定保護套件 (Web ACL) 流量記錄需要下列許可設定。當您使用其中一個 AWS WAF 完整存取受管政策 `AWSWAFConsoleFullAccess`或 時，會為您設定這些許可`AWSWAFFullAccess`。如果您想要進一步管理對日誌記錄 AWS WAF 和資源的存取，您可以自行設定這些許可。如需有關管理許可的資訊，請參閱《*IAM 使用者指南*》中的[存取資源的 AWS 管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html)。如需 AWS WAF 受管政策的相關資訊，請參閱 [AWS 的 受管政策 AWS WAF](security-iam-awsmanpol.md)。

下列許可可讓您變更保護套件 (Web ACL) 記錄組態，以及設定將日誌交付至 Amazon S3 儲存貯體。這些許可必須連接到您用來管理的使用者 AWS WAF。

**注意**  
當您設定下列許可時，您可能會在 AWS CloudTrail 日誌中看到錯誤，指出存取遭拒，但許可適用於 AWS WAF 記錄。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Action":[
            "wafv2:PutLoggingConfiguration",
            "wafv2:DeleteLoggingConfiguration"
         ],
         "Resource":[
            "*"
         ],
         "Effect":"Allow",
         "Sid":"LoggingConfigurationAPI"
      },
    {                                                                                                                                                                
       "Sid":"WebACLLogDelivery",                                                                                                                                    
       "Action":[                                                                                                                                                    
          "logs:CreateLogDelivery",                                                                                                                                  
          "logs:DeleteLogDelivery"                                                                                                                                   
       ],                                                                                                                                                            
       "Resource": "*",                                                                                                                                              
       "Effect":"Allow"                                                                                                                                              
    },  
      {
         "Sid":"WebACLLoggingS3",
         "Action":[
            "s3:PutBucketPolicy",
            "s3:GetBucketPolicy"
         ],
         "Resource": [
         "arn:aws:s3:::aws-waf-logs-amzn-s3-demo-destination-bucket-suffix"
         ],
         "Effect":"Allow"
      }
   ]
}
```

------

允許對所有 AWS 資源執行動作時，政策中會指出動作，其`"Resource"`設定為 `"*"`。這表示每個動作支援的所有 AWS 資源都允許這些動作。 **例如， 動作僅`wafv2:PutLoggingConfiguration`支援`wafv2`記錄組態資源。

根據預設，Amazon S3 儲存貯體及其包含的物件皆為私有。只有儲存貯體擁有者可存取儲存貯體及存放於其中的物件。不過，儲存貯體擁有者可以透過撰寫存取政策，將存取權授予其他資源和使用者。

如果建立日誌的使用者擁有 儲存貯體，服務會自動將下列政策連接至儲存貯體，以授予日誌將日誌發佈至其中的許可：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AWSLogDeliveryWrite",
      "Effect": "Allow",
      "Principal": {
        "Service": "delivery.logs.amazonaws.com"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::aws-waf-logs-amzn-s3-demo-destination-bucket-suffix/AWSLogs/123456789012/*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control",
          "aws:SourceAccount": ["123456789012"]
        },
        "ArnLike": {
        "aws:SourceArn": ["arn:aws:logs:us-east-2:123456789012:*"]
        }
      }
    },
    {
      "Sid": "AWSLogDeliveryAclCheck",
      "Effect": "Allow",
      "Principal": {
        "Service": "delivery.logs.amazonaws.com"
      },
      "Action": "s3:GetBucketAcl",
      "Resource": "arn:aws:s3:::aws-waf-logs-amzn-s3-demo-destination-bucket-suffix",
      "Condition": {
        "StringEquals": {
        "aws:SourceAccount": ["123456789012"]
        },
        "ArnLike": {
        "aws:SourceArn": ["arn:aws:logs:us-east-2:123456789012:*"]
        }
      }
    }
  ]
}
```

------

**注意**  
用於 AWS WAF 記錄的儲存貯體名稱必須以 開頭`aws-waf-logs-`，並以您想要的任何尾碼結尾。

如果建立日誌的使用者沒有儲存貯體，或沒有儲存貯體的 `GetBucketPolicy`和 `PutBucketPolicy`許可，則日誌建立會失敗。在此情況下，儲存貯體擁有者必須手動將上述政策新增至儲存貯體，並指定日誌建立者的 AWS 帳戶 ID。如需詳細資訊，請參閱 *Amazon Simple Storage Service 使用者指南*中的[我該如何新增 S3 儲存貯體政策？](https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-bucket-policy.html)。如果儲存貯體收到來自多個帳戶的日誌，請將`Resource`元素項目新增至每個帳戶`AWSLogDeliveryWrite`的政策陳述式。

例如，下列儲存貯體政策允許 AWS 帳戶 `111122223333`將日誌發佈至名為 的儲存貯體`aws-waf-logs-LOGGING-BUCKET-SUFFIX`：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "AWSLogDeliveryWrite20150319",
    "Statement": [
        {
            "Sid": "AWSLogDeliveryWrite",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::aws-waf-logs-amzn-s3-demo-destination-bucket-suffix/AWSLogs/111122223333/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control",
                    "aws:SourceAccount": ["111122223333"]
                },
                "ArnLike": {
                    "aws:SourceArn": ["arn:aws:logs:us-east-1:111122223333:*"]
                }
            }
        },
        {
            "Sid": "AWSLogDeliveryAclCheck",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::aws-waf-logs-amzn-s3-demo-destination-bucket-suffix",
            "Condition": {
                "StringEquals": {
                "aws:SourceAccount": ["111122223333"]
                },
                "ArnLike": {
                "aws:SourceArn": ["arn:aws:logs:us-east-1:111122223333:*"]
                }
            }
        }
    ]
}
```

------

**注意**  
在某些情況下，如果未將 `s3:ListBucket` 許可授予 `delivery.logs.amazonaws.com`，則可能會在 AWS CloudTrail 中看到 `AccessDenied` 錯誤。若要避免 CloudTrail 日誌中出現這些錯誤，您必須將 `s3:ListBucket` 許可授予 `delivery.logs.amazonaws.com`，且必須包含與先前儲存貯體政策中設定的 `s3:GetBucketAcl ` 許可一起顯示的 `Condition` 參數。若要簡化此作業，您可以直接將 更新`AWSLogDeliveryAclCheck`為 `Statement`，而不是建立新的 `“Action”: [“s3:GetBucketAcl”, “s3:ListBucket”]`。

## AWS Key Management Service 搭配 KMS 金鑰使用 的許可
<a name="logging-s3-permissions-encrypt-kms"></a>

如果您的記錄目的地使用伺服器端加密搭配存放在 AWS Key Management Service (SSE-KMS) 中的金鑰，而且您使用客戶受管金鑰 (KMS 金鑰），您必須授予許可 AWS WAF 才能使用 KMS 金鑰。若要這樣做，請將金鑰政策新增至所選目的地的 KMS 金鑰。這允許 AWS WAF 記錄將日誌檔案寫入目的地。

將下列金鑰政策新增至您的 KMS 金鑰， AWS WAF 以允許 記錄到您的 Amazon S3 儲存貯體。

```
{
    "Sid": "Allow AWS WAF to use the key",
    "Effect": "Allow",
    "Principal": {
        "Service": [
            "delivery.logs.amazonaws.com"
        ]
    },
    "Action": "kms:GenerateDataKey*",
    "Resource": "*"
}
```

## 存取 Amazon S3 日誌檔案所需的許可
<a name="logging-s3-log-file-access"></a>

Amazon S3 使用存取控制清單 (ACLs) 來管理對 日誌所建立日誌檔案的 AWS WAF 存取。根據預設，儲存貯體擁有者擁有各個日誌檔案的 `FULL_CONTROL` 許可。日誌交付擁有者與儲存貯體擁有者不同時，就沒有任何許可。日誌交付帳戶擁有 `READ` 與 `WRITE` 許可。如需詳細資訊，請參閱《*Amazon Simple Storage Service 使用者指南*》中的[存取控制清單 (ACL) 概觀](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html)。

# 將保護套件 (Web ACL) 流量日誌傳送至 Amazon Data Firehose 交付串流
<a name="logging-kinesis"></a>

本節提供將保護套件 (Web ACL) 流量日誌傳送至 Amazon Data Firehose 交付串流的資訊。

**注意**  
除了使用 的費用之外，您還需要支付記錄費用 AWS WAF。如需相關資訊，請參閱[記錄保護套件 (Web ACL) 流量資訊的定價](logging-pricing.md)。

若要將日誌傳送至 Amazon Data Firehose，請將日誌從保護套件 (Web ACL) 傳送至您在 Firehose 中設定的 Amazon Data Firehose 交付串流。啟用記錄後， 會透過 Firehose 的 HTTPS 端點將日誌 AWS WAF 傳送至您的儲存目的地。

一個 AWS WAF 日誌等同於一個 Firehose 記錄。如果您通常每秒收到 10，000 個請求並啟用完整日誌，您應該在 Firehose 中具有每秒 10，000 個記錄設定。如果您未正確設定 Firehose， AWS WAF 則不會記錄所有日誌。如需詳細資訊，請參閱 [Amazon Kinesis Data Firehose 配額](https://docs.aws.amazon.com/firehose/latest/dev/limits.html)。

如需有關如何建立 Amazon Data Firehose 交付串流和檢閱儲存日誌的資訊，請參閱[什麼是 Amazon Data Firehose？](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) 

如需建立交付串流的相關資訊，請參閱[建立 Amazon Data Firehose 交付串流](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html)。

## 為您的保護套件設定 Amazon Data Firehose 交付串流 (Web ACL)
<a name="logging-kinesis-configuration"></a>

為您的保護套件 (Web ACL) 設定 Amazon Data Firehose 交付串流，如下所示。
+ 使用您用來管理保護套件 (Web ACL) 的相同帳戶來建立它。
+ 在與保護套件 (Web ACL) 相同的區域中建立它。如果您要擷取 Amazon CloudFront 的日誌，請在美國東部 （維吉尼亞北部） 區域 建立 firehose`us-east-1`。
+ 為資料提供開頭為字首 的名稱`aws-waf-logs-`。例如 `aws-waf-logs-us-east-2-analytics`。
+ 將其設定為直接放置，允許應用程式直接存取交付串流。在 [Amazon Data Firehose 主控台](https://console.aws.amazon.com/firehose)中，針對交付串流**來源**設定，選擇**直接 PUT 或其他來源**。透過 API，將交付串流屬性`DeliveryStreamType`設定為 `DirectPut`。
**注意**  
請勿使用 `Kinesis stream`做為來源。

## 將日誌發佈至 Amazon Data Firehose 交付串流所需的許可
<a name="logging-kinesis-permissions"></a>

若要了解 Kinesis Data Firehose 組態所需的許可，請參閱[使用 Amazon Kinesis Data Firehose 控制存取](https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html)。

您必須擁有下列許可，才能使用 Amazon Data Firehose 交付串流成功啟用保護套件 (Web ACL) 記錄。
+ `iam:CreateServiceLinkedRole`
+ `firehose:ListDeliveryStreams`
+ `wafv2:PutLoggingConfiguration`

如需服務連結角色和 `iam:CreateServiceLinkedRole` 許可的相關資訊，請參閱 [使用 的服務連結角色 AWS WAF](using-service-linked-roles.md)。

# 設定保護套件的記錄 (Web ACL)
<a name="logging-management-configure"></a>

本節提供設定保護套件 (Web ACL) 資料保護的說明。

**注意**  
除了使用 的費用之外，您還需要支付記錄費用 AWS WAF。如需相關資訊，請參閱[記錄保護套件 (Web ACL) 流量資訊的定價](logging-pricing.md)。

若要啟用保護套件 (Web ACL) 的記錄，您必須已設定要使用的記錄目的地。如需目的地選項和每個選項需求的相關資訊，請參閱 [AWS WAF 記錄目的地](logging-destinations.md)。

**設定保護套件的記錄 (Web ACL)**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/wafv2/homev2](https://console.aws.amazon.com/wafv2/homev2) 開啟 AWS WAF 主控台。

1. 在導覽窗格中，選擇**保護套件 (Web ACLs)**。

1. 選擇您要啟用記錄的保護套件 (Web ACL) 名稱。主控台會帶您前往保護套件 (Web ACL) 的描述，您可以在其中進行編輯。

1. 在**記錄和指標**索引標籤上，選擇**啟用記錄**。

1. 選擇記錄目的地類型，然後選擇您設定的記錄目的地。您必須選擇名稱開頭為 的記錄目的地`aws-waf-logs-`。

1. （選用） 如果您不希望日誌中包含一些欄位，請對其進行修訂。選擇要編寫的欄位，然後選擇**新增**。重複其他需要編寫的欄位。修改的欄位會在日誌中顯示為 `xxx`。
**注意**  
此設定不會影響請求取樣。您可以透過設定保護套件 (Web ACL) 資料保護或停用保護套件 (Web ACL) 的取樣，將欄位排除在請求取樣之外。

1. （選用） 如果您不想將所有請求傳送到日誌，請新增您的篩選條件和行為。在**篩選日誌**下，針對您要套用的每個篩選條件，選擇**新增篩選條件**，然後選擇篩選條件，並指定是否要保留或捨棄符合條件的請求。當您完成新增篩選條件時，如有需要，請修改**預設記錄行為**。
**注意**  
如果您新增多個篩選條件， 會從頂端開始 AWS WAF 評估它們。

1. 選擇 **Enable Logging (啟用記錄日誌)**。
**注意**  
當您成功啟用記錄時， AWS WAF 將建立一個服務連結角色，具有將日誌寫入記錄目的地的必要許可。如需詳細資訊，請參閱[使用 的服務連結角色 AWS WAF](using-service-linked-roles.md)。

# 尋找您的保護套件 (Web ACL) 記錄
<a name="logging-management"></a>

本節說明如何尋找您的保護套件 (Web ACL) 記錄。

**注意**  
除了使用 的費用之外，您還需要支付記錄費用 AWS WAF。如需相關資訊，請參閱[記錄保護套件 (Web ACL) 流量資訊的定價](logging-pricing.md)。

**如果您在日誌中找不到日誌記錄**  
在極少數情況下， AWS WAF 日誌交付可能會低於 100%，日誌會盡最大努力交付。 AWS WAF 架構會將應用程式的安全性優先於所有其他考量。在某些情況下，例如記錄流程遇到流量調節時，這可能會導致記錄遭到捨棄。這不應影響多個記錄。如果您發現許多日誌項目遺失，請聯絡 [AWS 支援 中心](https://console.aws.amazon.com/support/home#/)。

在保護套件 (Web ACL) 的記錄組態中，您可以自訂 AWS WAF 傳送至日誌的內容。
+ **欄位修訂** – 對於使用對應比對設定的規則，您可以從日誌記錄中修訂下列欄位：**URI 路徑**、**查詢字串**、**單一標頭**和 **HTTP 方法**。已修訂的欄位會在日誌`REDACTED`中顯示為 。例如，如果您修訂**查詢字串**欄位，在日誌中，`REDACTED`對於使用**查詢字串**比對元件設定的所有規則，它會列為 。修訂僅適用於您在規則中指定用於比對的請求元件，因此**單一標頭**元件的修訂不適用於**標頭**上相符的規則。如需日誌欄位的清單，請參閱 [保護套件 (Web ACL) 流量的日誌欄位](logging-fields.md)。
**注意**  
此設定不會影響請求取樣。您可以透過設定保護套件 (Web ACL) 資料保護或停用保護套件 (Web ACL) 的取樣，將欄位排除在請求取樣之外。
+ **日誌篩選** – 您可以新增篩選，以指定哪些 Web 請求保留在日誌中，以及哪些 Web 請求遭到捨棄。您可以篩選 Web 請求評估期間 AWS WAF 套用的設定。您可以依下列設定進行篩選：
  + **完整標籤** – 完整標籤具有字首、選用命名空間和標籤名稱。字首識別新增標籤之規則的規則群組或保護套件 (Web ACL) 內容。如需標籤的資訊，請參閱 [中的 Web 請求標籤 AWS WAF](waf-labels.md)。
  + **規則動作** – 您可以篩選任何正常規則動作設定，也可以篩選規則群組規則的舊版`EXCLUDED_AS_COUNT`覆寫選項。如需規則動作設定的資訊，請參閱 [在 中使用規則動作 AWS WAF](waf-rule-action.md)。如需規則群組規則目前和舊版規則動作覆寫的相關資訊，請參閱 [在 中覆寫規則群組動作 AWS WAF](web-acl-rule-group-override-options.md)。
    + 一般規則動作篩選條件適用於規則中設定的動作，也適用於使用目前選項來覆寫規則群組規則動作所設定的動作。
    + `EXCLUDED_AS_COUNT` 日誌篩選條件與`Count`動作日誌篩選條件重疊。 會`EXCLUDED_AS_COUNT`同時篩選目前和舊版選項，以將規則群組規則動作覆寫至 Count。

# 保護套件 (Web ACL) 流量的日誌欄位
<a name="logging-fields"></a>

下列清單說明可能的日誌欄位。

**動作**  
 AWS WAF 套用至請求的終止動作。這表示允許、封鎖、CAPTCHA 或挑戰。當 Web 請求不包含有效的字符時， CAPTCHA和 Challenge動作正在終止。

**args**  
查詢字串。

**captchaResponse**  
請求的 CAPTCHA 動作狀態，會在CAPTCHA動作套用至請求時填入。此欄位會填入任何CAPTCHA動作，無論是否終止。如果請求多次套用CAPTCHA動作，此欄位會從上次套用動作之後填入。  
當請求不包含字符或字符無效或過期時，CAPTCHA動作會終止 Web 請求檢查。如果CAPTCHA動作正在終止，此欄位會包含回應代碼和失敗原因。如果動作為非終止，此欄位會包含求解時間戳記。若要區分終止和非終止動作，您可以在此欄位中篩選非空白`failureReason`屬性。

**cfDistributionTenantId**  
與 Web 請求相關聯之 CloudFront 分佈租用戶的識別符。此欄位是選用的，僅適用於與 CloudFront 分佈租用戶相關聯的保護套件 (Web ACLs)。

**challengeResponse**  
請求的挑戰動作狀態，Challenge會在動作套用至請求時填入。此欄位會填入任何Challenge動作，無論是否終止。如果請求多次套用Challenge動作，此欄位會從上次套用動作之後填入。  
當請求不包含字符或字符無效或過期時，Challenge動作會終止 Web 請求檢查。如果Challenge動作正在終止，此欄位會包含回應代碼和失敗原因。如果動作為非終止，此欄位會包含求解時間戳記。若要區分終止和非終止動作，您可以在此欄位中篩選非空白`failureReason`屬性。

**clientAsn**  
與 Web 請求原始伺服器 IP 地址相關聯的自治系統編號 (ASN)。  
**clientAsn** 只有在使用 ASN 比對陳述式時才會登入 AWS WAF 日誌。否則不會記錄此欄位。

**clientIp**  
傳送請求的用戶端 IP 地址。

**國家/地區**  
請求來源的國家/地區。如果 AWS WAF 無法判斷原始國家/地區，則會將此欄位設定為 `-`。

**國家/地區**  
請求來源的國家/地區。如果 AWS WAF 無法判斷原始國家/地區，則會將此欄位設定為 `-`。

**excludedRules**  
僅用於規則群組規則。規則群組中已排除的規則清單。這些規則的動作設定為 Count。  
如果您使用覆寫規則動作選項覆寫規則以計數，則相符項目不會在此處列出。它們會列為動作對 `action`和 `overriddenAction`。    
exclusionType  
表示排除規則具有動作 的類型Count。  
ruleId  
在規則群組中被排除的規則 ID。

**formatVersion**  
日誌的格式版本。

**forwardedAsn**  
與轉送 Web 請求之實體的 IP 地址 相關聯的自治系統編號 (ASN)。

**標頭**  
標題清單。

**httpMethod**  
請求的 HTTP 方法。

**httpRequest**  
請求的中繼資料。

**httpSourceId**  
相關聯資源的 ID：  
+ 對於 Amazon CloudFront 分佈，ID 是 ARN 語法`distribution-id`中的 ：

  `arn:partitioncloudfront::account-id:distribution/distribution-id` 
+ 對於 Application Load Balancer，ID 是 ARN 語法`load-balancer-id`中的 ：

  `arn:partition:elasticloadbalancing:region:account-id:loadbalancer/app/load-balancer-name/load-balancer-id`
+ 對於 Amazon API Gateway REST API，ID 是 ARN 語法`api-id`中的 ：

  `arn:partition:apigateway:region::/restapis/api-id/stages/stage-name`
+ 對於 an AWS AppSync GraphQL API，ID 是 ARN 語法`GraphQLApiId`中的 ：

  `arn:partition:appsync:region:account-id:apis/GraphQLApiId`
+ 對於 Amazon Cognito 使用者集區，ID 是 ARN 語法`user-pool-id`中的 ：

  `arn:partition:cognito-idp:region:account-id:userpool/user-pool-id`
+ 對於 AWS App Runner 服務，ID 是 ARN 語法`apprunner-service-id`中的 ：

  `arn:partition:apprunner:region:account-id:service/apprunner-service-name/apprunner-service-id`

**httpSourceName**  
請求的來源。可能的值：`CF`Amazon CloudFront、`APIGW`Amazon API Gateway、`ALB`Application Load Balancer、`APPSYNC` AWS AppSync`COGNITOIDP`Amazon Cognito、`APPRUNNER`App Runner 和 `VERIFIED_ACCESS` Verified Access。

**httpVersion**  
HTTP 版本。

**ja3Fingerprint**  
請求的 JA3 指紋。  
JA3 指紋檢查僅適用於 Amazon CloudFront 分佈和 Application Load Balancer。
JA3 指紋是從傳入請求的 TLS Client Hello 衍生的 32 個字元雜湊。此指紋可做為用戶端 TLS 組態的唯一識別符。 會針對具有足夠 TLS Client Hello 資訊以進行計算的每個請求 AWS WAF ，計算並記錄此指紋。  
當您在保護套件 (Web ACL) 規則中設定 JA3 指紋比對時，請提供此值。如需建立與 JA3 指紋相符項目的詳細資訊，請參閱 [JA3 指紋](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-ja3-fingerprint) 中的 [在 中請求元件 AWS WAF](waf-rule-statement-fields-list.md) 以取得規則陳述式。

**ja4Fingerprint**  
請求的 JA4 指紋。  
JA4 指紋檢查僅適用於 Amazon CloudFront 分佈和 Application Load Balancer。
JA4 指紋是從傳入請求的 TLS Client Hello 衍生的 36 個字元雜湊。此指紋可做為用戶端 TLS 組態的唯一識別符。 會針對具有足夠 TLS Client Hello 資訊以進行計算的每個請求 AWS WAF ，計算並記錄此指紋。  
當您在保護套件 (Web ACL) 規則中設定 JA4 指紋比對時，請提供此值。如需建立與 JA4 指紋相符項目的詳細資訊，請參閱 [JA4 指紋](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-ja4-fingerprint) 中的 [在 中請求元件 AWS WAF](waf-rule-statement-fields-list.md) 以取得規則陳述式。

**labels**  
Web 請求上的標籤。這些標籤是由用來評估 request. AWS WAF logs 前 100 個標籤的規則所套用。

**nonTerminatingMatchingRules**  
符合請求的非終止規則清單。清單中的每個項目都包含下列資訊。    
動作  
 AWS WAF 套用至請求的動作。這表示計數、CAPTCHA 或挑戰。當 Web 請求包含有效的字符時， CAPTCHA和 Challenge 不會終止。  
ruleId  
符合請求且未終止的規則 ID。  
ruleMatchDetails  
符合請求之規則的詳細資訊。此欄位只會填入 SQL Injection 和跨網站指令碼 (XSS) 比對規則陳述式。比對規則可能需要符合多個檢查條件，因此這些比對詳細資訊會以比對條件陣列的形式提供。
每個規則提供的任何其他資訊會根據規則組態、規則比對類型和比對的詳細資訊等因素而有所不同。例如，對於具有 CAPTCHA或 Challenge動作的規則，`challengeResponse`將列出 `captchaResponse`或 。如果比對規則位於規則群組中，且您已覆寫其設定的規則動作，則設定的 動作將在 中提供`overriddenAction`。

**oversizeFields**  
Web 請求中由保護套件 (Web ACL) 檢查的欄位清單，以及超過 AWS WAF 檢查限制的欄位清單。如果欄位過大，但保護套件 (Web ACL) 未檢查，則不會在此處列出。  
此清單可包含下列零個或多個值：`REQUEST_BODY`、`REQUEST_HEADERS`、 `REQUEST_JSON_BODY`和 `REQUEST_COOKIES`。如需超大欄位的詳細資訊，請參閱 [在 中過大 Web 請求元件 AWS WAF](waf-oversize-request-components.md)。

**rateBasedRuleList**  
處理請求的以速率為基礎的規則名單。如需速率型規則的相關資訊，請參閱 [在 中使用以速率為基礎的規則陳述式 AWS WAF](waf-rule-statement-type-rate-based.md)。    
rateBasedRuleId  
處理請求的速率規則 ID。若此項目已終止請求，則 `rateBasedRuleId` 的 ID 將與 `terminatingRuleId` 的 ID 相同。  
rateBasedRuleName  
對請求採取動作的以速率為基礎的規則名稱。  
limitKey  
規則正在使用的彙總類型。可能的值`IP`適用於 Web 請求原始伺服器、`FORWARDED_IP`在請求的標頭中轉送的 IP、`CUSTOMKEYS`自訂彙總金鑰設定。 和 `CONSTANT`用於將所有請求計數在一起，無需彙總。  
limitValue  
僅在單一 IP 地址類型的速率限制時使用。如果請求包含無效的 IP 地址，則 `limitvalue`為 `INVALID`。  
maxRateAllowed  
特定彙總執行個體在指定時段內允許的請求數目上限。彙總執行個體是由 加上您在以速率為基礎的規則組態中提供`limitKey`的任何其他金鑰規格所定義。  
evaluationWindowSec  
 AWS WAF 包含在請求中的時間，以秒為單位。  
customValues  
請求中以速率為基礎的規則識別的唯一值。對於字串值，日誌會列印字串值的前 32 個字元。根據金鑰類型，這些值可能僅適用於金鑰，例如 HTTP 方法或查詢字串，也可能適用於金鑰和名稱，例如標頭和標頭名稱。

**requestHeadersInserted**  
插入以進行自訂請求處理的標頭清單。

**requestId**  
請求的 ID，由基礎主機服務產生。對於 Application Load Balancer，這是追蹤 ID。對於所有其他 ，這是請求 ID。

**responseCodeSent**  
與自訂回應一起傳送的回應碼。

**ruleGroupId**  
規則群組的 ID。若規則封鎖請求，則 `ruleGroupID` 的 ID 將與 `terminatingRuleId` 的 ID 相同。

**ruleGroupList**  
對此請求採取動作的規則群組清單，其中包含相符資訊。

**terminatingRule**  
終止請求的規則。如果存在，則會包含下列資訊。    
動作  
 AWS WAF 套用至請求的終止動作。這表示允許、封鎖、CAPTCHA 或挑戰。當 Web 請求不包含有效的字符時， CAPTCHA和 Challenge動作正在終止。  
ruleId  
符合請求的規則 ID。  
ruleMatchDetails  
符合請求之規則的詳細資訊。此欄位只會填入 SQL Injection 和跨網站指令碼 (XSS) 比對規則陳述式。比對規則可能需要符合多個檢查條件，因此這些比對詳細資訊會以比對條件陣列的形式提供。
每個規則提供的任何其他資訊會根據規則組態、規則比對類型和相符的詳細資訊等因素而有所不同。例如，對於具有 CAPTCHA或 Challenge動作的規則，`challengeResponse`將列出 `captchaResponse`或 。如果相符規則位於規則群組中，且您已覆寫其設定的規則動作，則設定的 動作將在 中提供`overriddenAction`。

**terminatingRuleId**  
終止請求的規則 ID。如果無法終止請求，則值為 `Default_Action`。

**terminatingRuleMatchDetails**  
符合請求之終止規則的詳細資訊。終止規則對 Web 請求具有結束檢查程序的動作。終止規則的可能動作包括 Allow、CAPTCHA、 Block和 Challenge。在檢查 Web 請求期間，在第一個符合請求且具有終止動作的規則中， 會 AWS WAF 停止檢查並套用動作。除了日誌中針對相符終止規則所回報的威脅之外，Web 請求還可能包含其他威脅。  
這只會為 SQL Injection 和跨網站指令碼 (XSS) 符合規則陳述式填入。比對規則可能需要多個檢查條件的比對，因此這些比對詳細資訊會以比對條件陣列的形式提供。

**terminatingRuleType**  
終止請求的規則類型。可能的值：RATE\$1BASED、REGULAR、GROUP 和 MANAGED\$1RULE\$1GROUP。

**timestamp**  
時間戳記，以毫秒為單位。

**uri**  
URI 請求。

**fragment**  
遵循 "\$1" 符號的 URL 部分，提供有關資源的其他資訊，例如 \$1section2。

**webaclId**  
保護套件的 GUID (Web ACL)。

# 保護套件 (Web ACL) 流量的日誌範例
<a name="logging-examples"></a>

本節提供記錄保護套件 (Web ACL) 流量的範例。

**Example 以速率為基礎的規則 1：使用一個索引鍵的規則組態，設定為 `Header:dogname`**  

```
    {
      "Name": "RateBasedRule",
      "Priority": 1,
      "Statement": {
        "RateBasedStatement": {
          "Limit": 100,
          "AggregateKeyType": "CUSTOM_KEYS",
          "CustomKeys": [
            {
              "Header": {
                "Name": "dogname",
                "TextTransformations": [
                  {
                    "Priority": 0,
                    "Type": "NONE"
                  }
                ]
              }
            }
          ]
        }
      },
      "Action": {
        "Block": {}
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "RateBasedRule"
      }
    }
```

**Example 以速率為基礎的規則 1：以速率為基礎的規則封鎖請求的日誌項目**  

```
{
   "timestamp":1683355579981,
   "formatVersion":1,
   "webaclId": ...,
   "terminatingRuleId":"RateBasedRule",
   "terminatingRuleType":"RATE_BASED",
   "action":"BLOCK",
   "terminatingRuleMatchDetails":[
      
   ],
   "httpSourceName":"APIGW",
   "httpSourceId":"EXAMPLE11:rjvegx5guh:CanaryTest",
   "ruleGroupList":[
      
   ],
   "rateBasedRuleList":[
      {
         "rateBasedRuleId": ...,
         "rateBasedRuleName":"RateBasedRule",
         "limitKey":"CUSTOMKEYS",
         "maxRateAllowed":100,
         "evaluationWindowSec":"120",
         "customValues":[
            {
               "key":"HEADER",
               "name":"dogname",
               "value":"ella"
            }
         ]
      }
   ],
   "nonTerminatingMatchingRules":[
      
   ],
   "requestHeadersInserted":null,
   "responseCodeSent":null,
   "httpRequest":{
      "clientIp":"52.46.82.45",
      "country":"FR",
      "headers":[
         {
            "name":"X-Forwarded-For",
            "value":"52.46.82.45"
         },
         {
            "name":"X-Forwarded-Proto",
            "value":"https"
         },
         {
            "name":"X-Forwarded-Port",
            "value":"443"
         },
         {
            "name":"Host",
            "value":"rjvegx5guh.execute-api.eu-west-3.amazonaws.com"
         },
         {
            "name":"X-Amzn-Trace-Id",
            "value":"Root=1-645566cf-7cb058b04d9bb3ee01dc4036"
         },
         {
            "name":"dogname",
            "value":"ella"
         },
         {
            "name":"User-Agent",
            "value":"RateBasedRuleTestKoipOneKeyModulePV2"
         },
         {
            "name":"Accept-Encoding",
            "value":"gzip,deflate"
         }
      ],
      "uri":"/CanaryTest",
      "args":"",
      "httpVersion":"HTTP/1.1",
      "httpMethod":"GET",
      "requestId":"Ed0AiHF_CGYF-DA="
   }
}
```

**Example 以速率為基礎的規則 2：具有兩個索引鍵的規則組態，設定為 `Header:dogname`和 `Header:catname`**  

```
    {
      "Name": "RateBasedRule",
      "Priority": 1,
      "Statement": {
        "RateBasedStatement": {
          "Limit": 100,
          "AggregateKeyType": "CUSTOM_KEYS",
          "CustomKeys": [
            {
              "Header": {
                "Name": "dogname",
                "TextTransformations": [
                  {
                    "Priority": 0,
                    "Type": "NONE"
                  }
                ]
              }
            },
            {
              "Header": {
                "Name": "catname",
                "TextTransformations": [
                  {
                    "Priority": 0,
                    "Type": "NONE"
                  }
                ]
              }
            }
          ]
        }
      },
      "Action": {
        "Block": {}
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "RateBasedRule"
      }
    }
```

**Example 以速率為基礎的規則 2：以速率為基礎的規則封鎖請求的日誌項目**  

```
{
   "timestamp":1633322211194,
   "formatVersion":1,
   "webaclId":...,
   "terminatingRuleId":"RateBasedRule",
   "terminatingRuleType":"RATE_BASED",
   "action":"BLOCK",
   "terminatingRuleMatchDetails":[
      
   ],
   "httpSourceName":"APIGW",
   "httpSourceId":"EXAMPLE11:rjvegx5guh:CanaryTest",
   "ruleGroupList":[
      
   ],
   "rateBasedRuleList":[
      {
         "rateBasedRuleId":...,
         "rateBasedRuleName":"RateBasedRule",
         "limitKey":"CUSTOMKEYS",
         "maxRateAllowed":100,
         "evaluationWindowSec":"120",
         "customValues":[
            {
               "key":"HEADER",
               "name":"dogname",
               "value":"ella"
            },
            {
               "key":"HEADER",
               "name":"catname",
               "value":"goofie"
            }
         ]
      }
   ],
   "nonTerminatingMatchingRules":[
      
   ],
   "requestHeadersInserted":null,
   "responseCodeSent":null,
   "httpRequest":{
      "clientIp":"52.46.82.35",
      "country":"FR",
      "headers":[
         {
            "name":"X-Forwarded-For",
            "value":"52.46.82.35"
         },
         {
            "name":"X-Forwarded-Proto",
            "value":"https"
         },
         {
            "name":"X-Forwarded-Port",
            "value":"443"
         },
         {
            "name":"Host",
            "value":"23llbyn8v3.execute-api.eu-west-3.amazonaws.com"
         },
         {
            "name":"X-Amzn-Trace-Id",
            "value":"Root=1-64556629-17ac754c2ed9f0620e0f2a0c"
         },
         {
            "name":"catname",
            "value":"goofie"
         },
         {
            "name":"dogname",
            "value":"ella"
         },
         {
            "name":"User-Agent",
            "value":"Apache-HttpClient/UNAVAILABLE (Java/11.0.19)"
         },
         {
            "name":"Accept-Encoding",
            "value":"gzip,deflate"
         }
      ],
      "uri":"/CanaryTest",
      "args":"",
      "httpVersion":"HTTP/1.1",
      "httpMethod":"GET",
      "requestId":"EdzmlH5OCGYF1vQ="
   }
}
```

**Example SQLi 偵測時觸發之規則的日誌輸出 （終止）**  

```
{
    "timestamp": 1576280412771,
    "formatVersion": 1,
    "webaclId": "arn:aws:wafv2:ap-southeast-2:111122223333:regional/webacl/STMTest/1EXAMPLE-2ARN-3ARN-4ARN-123456EXAMPLE",
    "terminatingRuleId": "STMTest_SQLi_XSS",
    "terminatingRuleType": "REGULAR",
    "action": "BLOCK",
    "terminatingRuleMatchDetails": [
        {
            "conditionType": "SQL_INJECTION",
            "sensitivityLevel": "HIGH",
            "location": "HEADER",
            "matchedData": [
                "10",
                "AND",
                "1"
            ]
        }
    ],
    "httpSourceName": "-",
    "httpSourceId": "-",
    "ruleGroupList": [],
    "rateBasedRuleList": [],
    "nonTerminatingMatchingRules": [],
    "httpRequest": {
        "clientIp": "1.1.1.1",
        "country": "AU",
        "headers": [
            {
                "name": "Host",
                "value": "localhost:1989"
            },
            {
                "name": "User-Agent",
                "value": "curl/7.61.1"
            },
            {
                "name": "Accept",
                "value": "*/*"
            },
            {
                "name": "x-stm-test",
                "value": "10 AND 1=1"
            }
        ],
        "uri": "/myUri",
        "args": "",
        "httpVersion": "HTTP/1.1",
        "httpMethod": "GET",
        "requestId": "rid"
    },
    "labels": [
        {
            "name": "value"
        }
    ]
}
```

**Example SQLi 偵測時觸發之規則的日誌輸出 （非終止）**  

```
{
    "timestamp":1592357192516
    ,"formatVersion":1
    ,"webaclId":"arn:aws:wafv2:us-east-1:123456789012:global/webacl/hello-world/5933d6d9-9dde-js82-v8aw-9ck28nv9"
    ,"terminatingRuleId":"Default_Action"
    ,"terminatingRuleType":"REGULAR"
    ,"action":"ALLOW"
    ,"terminatingRuleMatchDetails":[]
    ,"httpSourceName":"-"
    ,"httpSourceId":"-"
    ,"ruleGroupList":[]
    ,"rateBasedRuleList":[]
    ,"nonTerminatingMatchingRules":
    [{
        "ruleId":"TestRule"
        ,"action":"COUNT"
        ,"ruleMatchDetails":
        [{
            "conditionType":"SQL_INJECTION"
            ,"sensitivityLevel": "HIGH"
            ,"location":"HEADER"
            ,"matchedData":[
                "10"
                ,"and"
                ,"1"]
            }]
    }]
    ,"httpRequest":{
        "clientIp":"3.3.3.3"
        ,"country":"US"
        ,"headers":[
            {"name":"Host","value":"localhost:1989"}
            ,{"name":"User-Agent","value":"curl/7.61.1"}
            ,{"name":"Accept","value":"*/*"}
            ,{"name":"myHeader","myValue":"10 AND 1=1"}
            ]
            ,"uri":"/myUri","args":""
            ,"httpVersion":"HTTP/1.1"
            ,"httpMethod":"GET"
            ,"requestId":"rid"
    },
    "labels": [
        {
            "name": "value"
        }
    ]
}
```

**Example 在規則群組內觸發的多個規則的日誌輸出 (RuleA-XSS 正在終止，而 Rule-B 正在非終止）**  

```
{
    "timestamp":1592361810888,
    "formatVersion":1,
    "webaclId":"arn:aws:wafv2:us-east-1:123456789012:global/webacl/hello-world/5933d6d9-9dde-js82-v8aw-9ck28nv9"
    ,"terminatingRuleId":"RG-Reference"
    ,"terminatingRuleType":"GROUP"
    ,"action":"BLOCK",
    "terminatingRuleMatchDetails":
    [{
        "conditionType":"XSS"
        ,"location":"HEADER"
        ,"matchedData":["<","frameset"]
    }]
    ,"httpSourceName":"-"
    ,"httpSourceId":"-"
    ,"ruleGroupList":
    [{
        "ruleGroupId":"arn:aws:wafv2:us-east-1:123456789012:global/rulegroup/hello-world/c05lb698-1f11-4m41-aef4-99a506d53f4b"
        ,"terminatingRule":{
            "ruleId":"RuleA-XSS"
            ,"action":"BLOCK"
            ,"ruleMatchDetails":null
            }
        ,"nonTerminatingMatchingRules":
        [{
            "ruleId":"RuleB-SQLi"
            ,"action":"COUNT"
            ,"ruleMatchDetails":
            [{
                "conditionType":"SQL_INJECTION"
                ,"sensitivityLevel": "LOW"
                ,"location":"HEADER"
                ,"matchedData":[
                    "10"
                    ,"and"
                    ,"1"]
            }]
        }]
        ,"excludedRules":null
    }]
    ,"rateBasedRuleList":[]
    ,"nonTerminatingMatchingRules":[]
    ,"httpRequest":{
        "clientIp":"3.3.3.3"
        ,"country":"US"
        ,"headers":
        [
            {"name":"Host","value":"localhost:1989"}
            ,{"name":"User-Agent","value":"curl/7.61.1"}
            ,{"name":"Accept","value":"*/*"}
            ,{"name":"myHeader1","value":"<frameset onload=alert(1)>"}
            ,{"name":"myHeader2","value":"10 AND 1=1"}
            ]
        ,"uri":"/myUri"
        ,"args":""
        ,"httpVersion":"HTTP/1.1"
        ,"httpMethod":"GET"
        ,"requestId":"rid"
    },
    "labels": [
        {
            "name": "value"
        }
    ]
}
```

**Example 為檢查具有內容類型 JSON 的請求內文而觸發的規則的日誌輸出**  
AWS WAF 目前會將 JSON 內文檢查的位置報告為 `UNKNOWN`。  

```
{
    "timestamp": 1576280412771,
    "formatVersion": 1,
    "webaclId": "arn:aws:wafv2:ap-southeast-2:123456789012:regional/webacl/test/111",
    "terminatingRuleId": "STMTest_SQLi_XSS",
    "terminatingRuleType": "REGULAR",
    "action": "BLOCK",
    "terminatingRuleMatchDetails": [
        {
            "conditionType": "SQL_INJECTION",
            "sensitivityLevel": "LOW",
            "location": "UNKNOWN",
            "matchedData": [
                "10",
                "AND",
                "1"
            ]
        }
    ],
    "httpSourceName": "ALB",
    "httpSourceId": "alb",
    "ruleGroupList": [],
    "rateBasedRuleList": [],
    "nonTerminatingMatchingRules": [],
    "requestHeadersInserted":null,
    "responseCodeSent":null,
    "httpRequest": {
        "clientIp": "1.1.1.1",
        "country": "AU",
        "headers": [],
        "uri": "",
        "args": "",
        "httpVersion": "HTTP/1.1",
        "httpMethod": "POST",
        "requestId": "null"
    },
    "labels": [
        {
            "name": "value"
        }
    ]
}
```

**Example 針對具有有效、未過期 CAPTCHA 字符之 Web 請求的 CAPTCHA 規則的日誌輸出**  
下列日誌清單適用於符合規則與 CAPTCHA動作的 Web 請求。Web 請求具有有效和未過期的 CAPTCHA 字符，並且僅被標註為 CAPTCHA 比對者 AWS WAF，類似於Count動作的行為。此 CAPTCHA 比對會記錄在 下`nonTerminatingMatchingRules`。  

```
{
  "timestamp": 1632420429309,
  "formatVersion": 1,
  "webaclId": "arn:aws:wafv2:us-east-1:123456789012:regional/webacl/captcha-web-acl/585e38b5-afce-4d2a-b417-14fb08b66c67",
  "terminatingRuleId": "Default_Action",
  "terminatingRuleType": "REGULAR",
  "action": "ALLOW",
  "terminatingRuleMatchDetails": [],
  "httpSourceName": "APIGW",
  "httpSourceId": "123456789012:b34myvfw0b:pen-test",
  "ruleGroupList": [],
  "rateBasedRuleList": [],
  "nonTerminatingMatchingRules": [
    {
      "ruleId": "captcha-rule",
      "action": "CAPTCHA",
      "ruleMatchDetails": [],
      "captchaResponse": {
        "responseCode": 0,
        "solveTimestamp": 1632420429
      }
    }
  ],
  "requestHeadersInserted": [
    {
      "name": "x-amzn-waf-test-header-name",
      "value": "test-header-value"
    }
  ],
  "responseCodeSent": null,
  "httpRequest": {
    "clientIp": "72.21.198.65",
    "country": "US",
    "headers": [
      {
        "name": "X-Forwarded-For",
        "value": "72.21.198.65"
      },
      {
        "name": "X-Forwarded-Proto",
        "value": "https"
      },
      {
        "name": "X-Forwarded-Port",
        "value": "443"
      },
      {
        "name": "Host",
        "value": "b34myvfw0b.gamma.execute-api.us-east-1.amazonaws.com"
      },
      {
        "name": "X-Amzn-Trace-Id",
        "value": "Root=1-614cc24d-5ad89a09181910c43917a888"
      },
      {
        "name": "cache-control",
        "value": "max-age=0"
      },
      {
        "name": "sec-ch-ua",
        "value": "\"Chromium\";v=\"94\", \"Google Chrome\";v=\"94\", \";Not A Brand\";v=\"99\""
      },
      {
        "name": "sec-ch-ua-mobile",
        "value": "?0"
      },
      {
        "name": "sec-ch-ua-platform",
        "value": "\"Windows\""
      },
      {
        "name": "upgrade-insecure-requests",
        "value": "1"
      },
      {
        "name": "user-agent",
        "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36"
      },
      {
        "name": "accept",
        "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
      },
      {
        "name": "sec-fetch-site",
        "value": "same-origin"
      },
      {
        "name": "sec-fetch-mode",
        "value": "navigate"
      },
      {
        "name": "sec-fetch-user",
        "value": "?1"
      },
      {
        "name": "sec-fetch-dest",
        "value": "document"
      },
      {
        "name": "referer",
        "value": "https://b34myvfw0b.gamma.execute-api.us-east-1.amazonaws.com/pen-test/pets"
      },
      {
        "name": "accept-encoding",
        "value": "gzip, deflate, br"
      },
      {
        "name": "accept-language",
        "value": "en-US,en;q=0.9"
      },
      {
        "name": "cookie",
        "value": "aws-waf-token=51c71352-41f5-4f6d-b676-c24907bdf819:EQoAZ/J+AAQAAAAA:t9wvxbw042wva7E2Y6lgud/bS6YG0CJKVAJqaRqDZ140ythKW0Zj9wKB2O8lSkYDRqf1yONcVBFo5u0eYi0tvT4rtQCXsu+KanAardW8go4QSLw4yoED59lgV7oAhGyCalAzE7ra29j+RvvZPsQyoQuDCrtoY/TvQyMTXIXzGPDC/rKBbg=="
      }
    ],
    "uri": "/pen-test/pets",
    "args": "",
    "httpVersion": "HTTP/1.1",
    "httpMethod": "GET",
    "requestId": "GINMHHUgoAMFxug="
  }
}
```

**Example 針對沒有 CAPTCHA 字符的 Web 請求記錄 CAPTCHA 規則的輸出**  
下列日誌清單適用於符合規則與 CAPTCHA動作的 Web 請求。Web 請求沒有 CAPTCHA 字符，已被 封鎖 AWS WAF。  

```
{
  "timestamp": 1632420416512,
  "formatVersion": 1,
  "webaclId": "arn:aws:wafv2:us-east-1:123456789012:regional/webacl/captcha-web-acl/585e38b5-afce-4d2a-b417-14fb08b66c67",
  "terminatingRuleId": "captcha-rule",
  "terminatingRuleType": "REGULAR",
  "action": "CAPTCHA",
  "terminatingRuleMatchDetails": [],
  "httpSourceName": "APIGW",
  "httpSourceId": "123456789012:b34myvfw0b:pen-test",
  "ruleGroupList": [],
  "rateBasedRuleList": [],
  "nonTerminatingMatchingRules": [],
  "requestHeadersInserted": null,
  "responseCodeSent": 405,
  "httpRequest": {
    "clientIp": "72.21.198.65",
    "country": "US",
    "headers": [
      {
        "name": "X-Forwarded-For",
        "value": "72.21.198.65"
      },
      {
        "name": "X-Forwarded-Proto",
        "value": "https"
      },
      {
        "name": "X-Forwarded-Port",
        "value": "443"
      },
      {
        "name": "Host",
        "value": "b34myvfw0b.gamma.execute-api.us-east-1.amazonaws.com"
      },
      {
        "name": "X-Amzn-Trace-Id",
        "value": "Root=1-614cc240-18b57ff33c10e5c016b508c5"
      },
      {
        "name": "sec-ch-ua",
        "value": "\"Chromium\";v=\"94\", \"Google Chrome\";v=\"94\", \";Not A Brand\";v=\"99\""
      },
      {
        "name": "sec-ch-ua-mobile",
        "value": "?0"
      },
      {
        "name": "sec-ch-ua-platform",
        "value": "\"Windows\""
      },
      {
        "name": "upgrade-insecure-requests",
        "value": "1"
      },
      {
        "name": "user-agent",
        "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36"
      },
      {
        "name": "accept",
        "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
      },
      {
        "name": "sec-fetch-site",
        "value": "cross-site"
      },
      {
        "name": "sec-fetch-mode",
        "value": "navigate"
      },
      {
        "name": "sec-fetch-user",
        "value": "?1"
      },
      {
        "name": "sec-fetch-dest",
        "value": "document"
      },
      {
        "name": "accept-encoding",
        "value": "gzip, deflate, br"
      },
      {
        "name": "accept-language",
        "value": "en-US,en;q=0.9"
      }
    ],
    "uri": "/pen-test/pets",
    "args": "",
    "httpVersion": "HTTP/1.1",
    "httpMethod": "GET",
    "requestId": "GINKHEssoAMFsrg="
  },
  "captchaResponse": {
    "responseCode": 405,
    "solveTimestamp": 0,
    "failureReason": "TOKEN_MISSING"
  }
}
```