

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

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

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

# 將保護套件 (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)。