

**에 대한 새로운 콘솔 환경 소개 AWS WAF**

이제 업데이트된 환경을 사용하여 콘솔의 모든 위치에서 AWS WAF 기능에 액세스할 수 있습니다. 자세한 내용은 [콘솔 작업을 참조하세요](https://docs.aws.amazon.com/waf/latest/developerguide/working-with-console.html).

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# AWS WAF 보호 팩(웹 ACL) 트래픽 로깅
<a name="logging"></a>

이 섹션에서는 AWS WAF 보호 팩(웹 ACLs)의 로깅 옵션에 대해 설명합니다.

로깅을 활성화하여 웹 ACL에서 분석한 트래픽에 대한 자세한 정보를 기록할 수 있습니다. 로깅된 정보에는가 리소스로부터 AWS 웹 요청을 AWS WAF 받은 시간, 요청에 대한 세부 정보, 요청이 일치하는 규칙에 대한 세부 정보가 포함됩니다. Amazon CloudWatch Logs 로그 그룹, Amazon Simple Storage Service(AmazonS3) 버킷 또는 Amazon Data Firehose 전송 스트림에 보호 팩(웹 ACL) 로그를 전송할 수 있습니다.

보호 팩(웹 ACLs)에 대해 활성화할 수 있는 로그 외에도에서 처리하는 웹 사이트 또는 애플리케이션 트래픽의 서비스 로그를 AWS 사용하여 AWS 고객 및 서비스를 AWS WAF 지원하고 보호합니다.

**참고**  
보호 팩(웹 ACL) 로깅 구성은 AWS WAF 로그에만 영향을 줍니다. 특히 로깅을 위한 수정된 필드 구성은 요청 샘플링 또는 Security Lake 데이터 수집에 영향을 미치지 않습니다. 보호 팩(웹 ACL) 데이터 보호를 구성하여 수집 또는 샘플링에서 필드를 제외할 수 있습니다. 데이터 보호 외에도 Security Lake 데이터 수집은 Security Lake 서비스를 통해 완전히 구성됩니다.

**Topics**
+ [보호 팩(웹 ACL) 트래픽 정보 로깅 요금](logging-pricing.md)
+ [AWS WAF 로깅 대상](logging-destinations.md)
+ [보호 팩(웹 ACL)에 대한 로깅 구성](logging-management-configure.md)
+ [보호 팩(웹 ACL) 레코드 찾기](logging-management.md)
+ [보호 팩(웹 ACL) 트래픽에 대한 로그 필드](logging-fields.md)
+ [보호 팩(웹 ACL) 트래픽에 대한 로그 예제](logging-examples.md)

**기타 데이터 수집 및 분석 옵션**  
로깅 외에도 데이터 수집 및 분석을 위해 다음 옵션을 활성화할 수 있습니다.
+ **Amazon Security Lake** - 보호 팩(웹 ACL) 데이터를 수집하도록 Security Lake를 구성할 수 있습니다. 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)을 참조하세요.
+ **요청 샘플링** - 애플리케이션이 수신하는 트래픽 유형에 대한 아이디어를 얻기 위해 보호 팩(웹 ACL)이 평가하는 웹 요청을 샘플링하도록 보호 팩(웹 ACL)을 구성할 수 있습니다. 이 옵션에 대한 자세한 내용은 [웹 요청 샘플 보기](web-acl-testing-view-sample.md) 섹션을 참조하세요.

# 보호 팩(웹 ACL) 트래픽 정보 로깅 요금
<a name="logging-pricing"></a>

이 섹션에서는 보호 팩(웹 ACL) 트래픽 로그 사용에 대한 요금 고려 사항에 대해 설명합니다.

보호 팩(웹 ACL) 트래픽 정보 로깅에는 각 로그 대상 유형과 관련된 비용에 따라 요금이 부과됩니다. 이러한 요금은 AWS WAF사용 요금에 추가로 부과됩니다. 비용은 선택하는 대상 유형이나 기록하는 데이터 양과 같은 요인에 따라 달라질 수 있습니다.

다음은 각 로깅 대상 유형에 대한 요금 정보의 링크를 제공합니다.
+ **CloudWatch Logs** - 요금은 벤더 로그 전송에 대한 요금입니다. [Amazon CloudWatch Logs 요금](https://aws.amazon.com/cloudwatch/pricing/)을 참조하세요. **유료 티어**에서 **로그** 탭을 선택한 다음 **판매 로그**에서 **CloudWatch Logs로 전송** 정보를 참조하세요.
+ **Amazon S3 버킷** - Amazon S3 요금에는 Amazon S3 버킷으로의 CloudWatch Logs 판매 로그 전송 요금과 Amazon S3 사용 요금이 합산됩니다.
  + Amazon S3은 [Amazon S3 요금](https://aws.amazon.com/s3/pricing/)을 참조하세요.
  + Amazon S3로의 CloudWatch Logs 판매 로그 전송은 [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 로그에 대해 선택할 수 있는 로깅 옵션에 대해 설명합니다. 각 섹션에서는 대상 유형에 특정된 동작에 대한 정보를 포함하여 로로깅을 구성하기 위한 지침을 제공합니다. 로깅 대상을 구성한 후 보호 팩(웹 ACL) 로깅 구성에 해당 사양을 제공하여 로깅을 시작할 수 있습니다.

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

# Amazon CloudWatch Logs 로그 그룹에 보호 팩(웹 ACL) 트래픽 로그 전송
<a name="logging-cw-logs"></a>

이 주제에서는 CloudWatch Logs 로그 그룹에 보호 팩(웹 ACL) 트래픽 로그를 전송하는 방법에 대해 설명합니다.

**참고**  
 AWS WAF사용 요금 외에 로그인 요금이 부과됩니다. 자세한 내용은 [보호 팩(웹 ACL) 트래픽 정보 로깅 요금](logging-pricing.md) 단원을 참조하세요.

Amazon CloudWatch Logs로 로그를 전송하려면 CloudWatch Logs 로그 그룹을 생성합니다. 로그인을 활성화하면 로그 그룹 ARN을 AWS WAF제공합니다. 보호 팩(웹 ACL)에 대한 로깅을 활성화하면가 로그 스트림의 CloudWatch Logs 로그 그룹에 로그를 AWS WAF 전송합니다.

CloudWatch Logs를 사용하면 AWS WAF 콘솔에서 보호 팩(웹 ACL)에 대한 로그를 탐색할 수 있습니다. 보호 팩(웹 ACL) 페이지에서 **로깅 인사이트** 탭을 선택합니다. 이 옵션은 CloudWatch 콘솔을 통해 CloudWatch Logs에 대해 제공되는 로깅 인사이트에 추가됩니다.

 AWS WAF 보호 팩(웹 ACL)과 동일한 리전에서 보호 팩(웹 ACL)을 관리하는 데 사용하는 것과 동일한 계정을 사용하여 보호 팩(웹 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
```

다음은 리전 `us-east-1`의 보호 팩(웹 ACL) `TestWebACL`에 대한 예제 로그 스트림입니다.

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

## 로그를 CloudWatch Logs에 게시하는 데 필요한 권한
<a name="logging-cw-logs-permissions"></a>

CloudWatch Logs 로그 그룹에 대한 보호 팩(웹 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)을 참조하세요.

이러한 권한을 통해 보호 팩(웹 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` 로깅 구성 리소스에서만 지원됩니다.

# Amazon Simple Storage Service 버킷으로 보호 팩(웹 ACL) 트래픽 로그 전송
<a name="logging-s3"></a>

이 주제에서는 Amazon S3 버킷으로 보호 팩(웹 ACL) 트래픽 로그를 전송하기 위한 정보를 제공합니다.

**참고**  
 AWS WAF사용 요금 외에 로그인 요금이 부과됩니다. 자세한 내용은 [보호 팩(웹 ACL) 트래픽 정보 로깅 요금](logging-pricing.md) 단원을 참조하세요.

보호 팩(웹 ACL) 트래픽 로그를 Amazon S3로 전송하려면 보호 팩(웹 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 로그에 액세스하고 분석할 수 있습니다. Athena에서 표준 SQL을 사용해 Amazon S3의 데이터를 손쉽게 직접 분석할 수 있습니다. 에서 몇 가지 작업을 수행 AWS Management Console하면 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.

보호 팩(웹 ACL)의 로그 파일은 5분 간격으로 Amazon S3 버킷에 게시됩니다. 각 로그 파일에는 이전 5분 동안 기록된 트래픽에 대한 로그 레코드가 포함됩니다.

로그 파일의 최대 크기는 75MB입니다. 로그 파일이 5분 내에 파일 크기 한도에 도달하는 경우, 로그는 레코드의 로그 파일로의 추가를 중단하고 Amazon S3 버킷에 게시한 다음 새로운 로그 파일을 생성합니다.

로그 파일은 압축된 상태입니다. Amazon S3 콘솔을 사용해 파일을 열면 Amazon S3에서 로그 레코드의 압축을 해제하고 이를 표시합니다. 로그 파일을 다운로드하는 경우, 압축을 해제해야 레코드를 볼 수 있습니다.

단일 로그 파일에는 여러 레코드와 함께 인터리브 항목이 포함되어 있습니다. 보호 팩(웹 ACL)의 모든 로그 파일을 보려면 보호 팩(웹 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 리소스 이름(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/
```

**버킷 폴더 및 파일 이름**  
버킷 내에서 사용자가 제공한 접두사에 따라 계정 ID, 리전, 보호 팩(웹 ACL) 이름, 날짜 및 시간에 따라 결정되는 폴더 구조로 AWS WAF 로그가 작성됩니다.

```
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`를 준수합니다.

다음은 이름이 `aws-waf-logs-LOGGING-BUCKET-SUFFIX`인 Amazon S3 버킷의 로그 파일 예제를 보여줍니다. 는 AWS 계정 입니다`11111111111`. 보호 팩(웹 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 버킷에 대한 보호 팩(웹 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).

다음 권한을 통해 보호 팩(웹 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 Console 사용 설명서*의 [S3 버킷 정책을 추가하려면 어떻게 해야 합니까?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-bucket-policy.html)를 참조하세요. 버킷이 여러 계정으로부터 로그를 수신하는 경우, `Resource` 요소 입력 내용을 각 계정의 `AWSLogDeliveryWrite` 정책 설명에 추가합니다.

예를 들어 다음 버킷 정책은 `111122223333`가 라는 버킷에 로그를 게시하도록 허용합니다 AWS 계정 . `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:*"]
                }
            }
        }
    ]
}
```

------

**참고**  
경우에 따라 `delivery.logs.amazonaws.com`에 `s3:ListBucket` 권한이 부여되지 않은 경우 AWS CloudTrail 에서 `AccessDenied` 오류가 표시될 수 있습니다. CloudTrail 로그에서 이러한 오류를 방지하려면 `delivery.logs.amazonaws.com`에 `s3:ListBucket` 권한을 부여하고 앞의 버킷 정책에서 설정한 `s3:GetBucketAcl ` 권한과 함께 표시된 `Condition` 파라미터를 포함해야 합니다. 이 작업을 보다 간단하게 수행하기 위해 새로운 `Statement`를 만드는 대신 `AWSLogDeliveryAclCheck`를 `“Action”: [“s3:GetBucketAcl”, “s3:ListBucket”]`으로 직접 업데이트할 수 있습니다.

## KMS 키와 AWS Key Management Service 함께를 사용하기 위한 권한
<a name="logging-s3-permissions-encrypt-kms"></a>

로깅 대상이 AWS Key Management Service (SSE-KMS)에 저장된 키로 서버 측 암호화를 사용하고 고객 관리형 키(KMS 키)를 사용하는 경우 KMS 키를 사용할 수 있는 AWS WAF 권한을 부여해야 합니다. 이렇게 하기 위해서는 선택한 대상의 KMS 키에 키 정책을 추가합니다. 이렇게 하면 AWS WAF 로깅을 통해 대상에 로그 파일을 쓸 수 있습니다.

가 Amazon S3 버킷에 AWS WAF 로그인할 수 있도록 KMS 키에 다음 키 정책을 추가합니다.

```
{
    "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는 ACL(액세스 제어 목록)을 사용하여 AWS WAF 로그에서 생성한 로그 파일에 대한 액세스를 관리합니다. 기본적으로 버킷 소유자는 각 로그 파일에 대한 `FULL_CONTROL` 권한을 보유합니다. 로그 전송 소유자가 버킷 소유자와 다른 경우에는 권한이 없습니다. 로그 전송 계정에는 `READ` 및 `WRITE` 권한이 부여됩니다. 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [액세스 제어 목록(ACL) 개요](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html)를 참조하세요.

# Amazon Data Firehose 전송 스트림으로 보호 팩(웹 ACL) 트래픽 로그 전송
<a name="logging-kinesis"></a>

이 섹션에서는 Amazon Data Firehos 전송 스트림에 보호 팩(웹 ACL) 트래픽 로그를 전송하는 방법에 대한 정보를 제공합니다.

**참고**  
 AWS WAF사용 요금 외에 로그인 요금이 부과됩니다. 자세한 내용은 [보호 팩(웹 ACL) 트래픽 정보 로깅 요금](logging-pricing.md) 단원을 참조하세요.

AmazonData Firehose로 로그를 보내려면 보호 팩(웹 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)을 참조하세요.

## 보호 팩(웹 ACL)에 대한 Amazon Data Firehose 전송 스트림 구성
<a name="logging-kinesis-configuration"></a>

다음과 같이 보호 팩(웹 ACL)에 대한 Amazon Data Firehose 전송 스트림을 구성합니다.
+ 보호 팩(웹 ACL)을 관리하는 데 사용하는 것과 동일한 계정을 사용하여 생성합니다.
+ 보호 팩(웹 ACL)과 동일한 리전에서 생성합니다. Amazon CloudFront에 대한 로그를 캡처하고 있는 경우, 미국 동부(버지니아 북부) 리전 `us-east-1`에서 Firehose를 생성합니다.
+ Data Firehose에 `aws-waf-logs-` 접두사로 시작하는 이름을 지정합니다. 예를 들어 `aws-waf-logs-us-east-2-analytics`입니다.
+ 직접 입력으로 구성하여 애플리케이션이 전송 스트림에 직접 액세스할 수 있도록 합니다. [Amazon Data Firehose 콘솔](https://console.aws.amazon.com/firehose)에서 전송 스트림 **소스** 설정으로 **Direct 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 전송 스트림으로 보호 팩(웹 ACL) 로깅을 성공적으로 활성화하려면 다음 권한이 있어야 합니다.
+ `iam:CreateServiceLinkedRole`
+ `firehose:ListDeliveryStreams`
+ `wafv2:PutLoggingConfiguration`

서비스 연결 역할 및 `iam:CreateServiceLinkedRole` 권한에 대한 자세한 내용은 [에 대한 서비스 연결 역할 사용 AWS WAF](using-service-linked-roles.md) 섹션을 참조하세요.

# 보호 팩(웹 ACL)에 대한 로깅 구성
<a name="logging-management-configure"></a>

이 섹션에서는 보호 팩(웹 ACL)에 대한 데이터 보호를 구성하는 지침을 제공합니다.

**참고**  
 AWS WAF사용 요금 외에 로그인 요금이 부과됩니다. 자세한 내용은 [보호 팩(웹 ACL) 트래픽 정보 로깅 요금](logging-pricing.md) 단원을 참조하세요.

보호 팩(웹 ACL)에 대한 로깅을 활성화하려면 사용 중인 로깅 대상을 이미 구성했어야 합니다. 대상 옵션 및 각 옵션의 요구 사항에 대한 자세한 내용은 [AWS WAF 로깅 대상](logging-destinations.md) 섹션을 참조하세요.

**보호 팩(웹 ACL)에 대한 로깅 구성**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/wafv2/homev2](https://console.aws.amazon.com/wafv2/homev2) AWS WAF 콘솔을 엽니다.

1. 탐색 창에서 **보호 팩(웹 ACL)**을 선택합니다.

1. 로깅을 활성화하려는 보호 팩(웹 ACL)의 이름을 선택합니다. 콘솔에서 보호 팩(웹 ACL)의 설명으로 이동하여 여기에서 설명을 편집할 수 있습니다.

1. **로깅 및 지표** 탭에서 **로깅 활성화**를 선택합니다.

1. 로깅 대상 유형을 선택한 다음 구성한 로깅 대상을 선택합니다. 이름이 `aws-waf-logs-`로 시작하는 로깅 대상을 선택해야 합니다.

1. (선택 사항) 일부 필드를 로그에 포함하지 않으려면 해당 필드를 수정합니다. 삭제할 필드를 선택한 후 **추가**를 선택합니다. 필요에 따라 이 작업을 반복하여 추가 필드를 삭제합니다. 삭제된 필드는 로그에서 `xxx`로 표시됩니다.
**참고**  
이 설정은 요청 샘플링에 영향을 미치지 않습니다. 보호 팩(웹 ACL) 데이터 보호를 구성하거나 보호 팩(웹 ACL)에 대한 샘플링을 비활성화하여 요청 샘플링에서 필드를 제외할 수 있습니다.

1. (선택 사항) 모든 요청을 로그로 전송하지 않으려면 필터링 기준과 동작을 추가합니다. **필터 로그**에서 적용하려는 각 필터에 대해 **필터 추가**를 선택한 다음 기준과 일치하는 요청을 유지할지 아니면 삭제할지 여부를 지정합니다. 필터 추가를 완료할 때 필요 시 **기본 로깅 동작**을 수정합니다.
**참고**  
필터를 여러 개 추가하는 경우는 위에서 시작하여 필터를 AWS WAF 평가합니다.

1. **로깅 활성화**를 선택합니다.
**참고**  
로깅을 성공적으로 활성화하면 AWS WAF 는 로깅 대상에 로그를 쓰는 데 필요한 권한이 있는 서비스 연결 역할을 생성합니다. 자세한 내용은 [에 대한 서비스 연결 역할 사용 AWS WAF](using-service-linked-roles.md) 단원을 참조하십시오.

# 보호 팩(웹 ACL) 레코드 찾기
<a name="logging-management"></a>

이 섹션에서는 보호 팩(웹 ACL) 레코드를 찾는 방법에 대해 설명합니다.

**참고**  
 AWS WAF사용 요금 외에 로그인 요금이 부과됩니다. 자세한 내용은 [보호 팩(웹 ACL) 트래픽 정보 로깅 요금](logging-pricing.md) 단원을 참조하세요.

**로그에서 로그 레코드를 찾을 수 없는 경우**  
드문 경우지만 AWS WAF 로그 전송이 100% 미만으로 떨어질 수 있으며, 로그는 최선을 다해 전송됩니다. AWS WAF 아키텍처는 다른 모든 고려 사항보다 애플리케이션의 보안을 우선시합니다. 로깅 흐름에 트래픽 제한이 발생하는 경우와 같은 일부 상황에서는 레코드가 삭제될 수 있습니다. 이는 몇 개 이상의 레코드에는 영향을 미치지 않아야 합니다. 누락된 로그 항목이 여러 개 발견되면 [AWS Support 센터](https://console.aws.amazon.com/support/home#/)에 문의하세요.

보호 팩(웹 ACL)의 로깅 구성에서가 로그로 AWS WAF 전송하는 항목을 사용자 지정할 수 있습니다.
+ **필드 수정** – 해당하는 일치 설정을 사용하는 규칙에 대한 로그 레코드에서 **URI 경로**, **쿼리 문자열**, **단일 헤더** 및 **HTTP 메서드** 필드를 수정할 수 있습니다. 삭제된 필드는 로그에서 `REDACTED`로 표시됩니다. 예를 들어 **쿼리 문자열** 필드를 수정하면 로그에서 **쿼리 문자열** 일치 구성 요소 설정을 사용하는 모든 규칙에 대해 해당 필드가 `REDACTED`로 나열됩니다. 교정은 규칙에서 일치하도록 지정한 요청 구성 요소에만 적용되므로 **단일 헤더** 구성 요소의 수정은 **헤더**와 일치하는 규칙에는 적용되지 않습니다. 로그 필드 목록은 [보호 팩(웹 ACL) 트래픽에 대한 로그 필드](logging-fields.md) 섹션을 참조하세요.
**참고**  
이 설정은 요청 샘플링에 영향을 미치지 않습니다. 보호 팩(웹 ACL) 데이터 보호를 구성하거나 보호 팩(웹 ACL)에 대한 샘플링을 비활성화하여 요청 샘플링에서 필드를 제외할 수 있습니다.
+ **로그 필터링** - 필터링을추가하여 로그에 보관되는 웹 요청과 삭제되는 웹 요청을 지정할 수 있습니다. 웹 요청 평가 중에 AWS WAF 적용되는 설정을 기준으로 필터링합니다. 다음 설정을 기준으로 필터링할 수 있습니다.
  + **정규화된 레이블** – 정규화된 레이블에는 접두사, 선택적 네임스페이스 및 레이블 이름이 포함됩니다. 접두사는 레이블을 추가한 규칙의 규칙 그룹 또는 보호 팩(웹 ACL) 컨텍스트를 식별합니다. 레이블에 대한 자세한 내용은 [의 웹 요청 레이블 지정 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로 재정의하기 위해 현재 옵션과 레거시 옵션을 모두 필터링합니다.

# 보호 팩(웹 ACL) 트래픽에 대한 로그 필드
<a name="logging-fields"></a>

다음 목록에서는 가능한 로그 필드에 대해 설명합니다.

**작업**  
요청에 AWS WAF 적용된 종료 작업입니다. 이는 허용, 차단, CAPTCHA 또는 챌린지를 나타냅니다. 웹 요청에 유효한 토큰이 없으면 CAPTCHA 및 Challenge 작업이 종료됩니다.

**args**  
쿼리 문자열.

**captchaResponse**  
요청에 CAPTCHA 작업이 적용될 때 채워지는 요청에 대한 CAPTCHA 작업 상태입니다. 이 필드는 종료든 종료되지 않든 모든 CAPTCHA 작업에 채워집니다. 요청에 CAPTCHA 작업이 여러 번 적용되는 경우 이 필드는 작업이 마지막으로 적용된 시점부터 채워집니다.  
요청에 토큰이 포함되지 않은 경우 또는 토큰이 유효하지 않거나 만료된 경우 CAPTCHA 작업에서 웹 요청 검사를 종료합니다. CAPTCHA 작업이 종료되는 경우 이 필드에는 응답 코드와 실패 이유가 포함됩니다. 작업이 종료되지 않는 경우 이 필드에는 해석 타임스탬프가 포함됩니다. 종료 작업과 비종료 작업을 구분하려면 이 필드에서 비어 있지 않은 `failureReason` 속성을 필터링할 수 있습니다.

**cfDistributionTenantId**  
웹 요청과 연결된 CloudFront 배포 테넌트의 식별자입니다. 이 필드는 선택 사항이며 CloudFront 배포 테넌트와 연결된 보호 팩(웹 ACL)에만 적용됩니다.

**challengeResponse**  
요청에 Challenge 작업이 적용될 때 채워지는 요청에 대한 챌린지 작업 상태입니다. 이 필드는 종료든 종료되지 않든 모든 Challenge 작업에 채워집니다. 요청에 Challenge 작업이 여러 번 적용되는 경우 이 필드는 작업이 마지막으로 적용된 시점부터 채워집니다.  
요청에 토큰이 포함되지 않은 경우 또는 토큰이 유효하지 않거나 만료된 경우 Challenge 작업에서 웹 요청 검사를 종료합니다. Challenge 작업이 종료되는 경우 이 필드에는 응답 코드와 실패 이유가 포함됩니다. 작업이 종료되지 않는 경우 이 필드에는 해석 타임스탬프가 포함됩니다. 종료 작업과 비종료 작업을 구분하려면 이 필드에서 비어 있지 않은 `failureReason` 속성을 필터링할 수 있습니다.

**clientAsn**  
웹 요청 오리진의 IP 주소와 연결된 Autonomous System Number(ASN)입니다.  
**clientAsn**은 ASN 일치 문이 사용되는 경우에만 AWS WAF 로그에 로깅됩니다. 그 외에는 이 필드가 로깅되는 경우가 없습니다.

**clientIp**  
클라이언트가 요청을 보내는 IP 주소.

**country**  
요청의 출처 국가. AWS WAF 가 오리진 국가를 확인할 수 없는 경우이 필드는 로 설정됩니다`-`.

**country**  
요청의 출처 국가. AWS WAF 가 오리진 국가를 확인할 수 없는 경우이 필드는 로 설정됩니다`-`.

**excludedRules**  
규칙 그룹 규칙에만 사용됩니다. 규칙 그룹에서 제외한 규칙의 목록입니다. 이 규칙에 대한 작업은 Count로 설정됩니다.  
규칙 재정의 작업 옵션을 사용하여 규칙을 개수로 재정의하는 경우 일치 항목이 여기에 나열되지 않습니다. 이들 항목은 작업 쌍인 `action` 및 `overriddenAction`으로 나열됩니다.    
exclusionType  
제외된 규칙에 Count 작업이 있음을 나타내는 유형입니다.  
ruleId  
규칙 그룹 내에서 제외된 규칙의 ID입니다.

**formatVersion**  
로그의 포맷 버전.

**forwardedAsn**  
웹 요청을 전달한 엔터티의 IP 주소와 연결된 Autonomous System Number(ASN)입니다.

**헤더**  
헤더 목록.

**httpMethod**  
요청의 HTTP 메서드.

**httpRequest**  
요청에 대한 메타데이터.

**httpSourceId**  
연결된 리소스의 ID입니다.  
+ Amazon CloudFront 배포의 경우 ARN 구문에서 ID는 `distribution-id`입니다.

  `arn:partitioncloudfront::account-id:distribution/distribution-id` 
+ Application Load Balancer의 경우 ARN 구문에서 ID는 `load-balancer-id`입니다.

  `arn:partition:elasticloadbalancing:region:account-id:loadbalancer/app/load-balancer-name/load-balancer-id`
+ Amazon API Gateway REST API의 경우 ARN 구문에서 ID는 `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 사용자 풀의 경우 ARN 구문의 ID는 `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**  
요청의 소스. 가능한 값: Amazon CloudFront`CF`의 경우 , Amazon API Gateway`APIGW`의 경우 , `ALB` Application Load Balancer`APPSYNC`의 경우 , Amazon Cognito`COGNITOIDP`의 경우 AWS AppSync, App Runner`APPRUNNER`의 경우 , Verified Access`VERIFIED_ACCESS`의 경우 .

**httpVersion**  
HTTP 버전.

**ja3Fingerprint**  
요청의 JA3 지문.  
JA3 지문 검사는 Amazon CloudFront 배포 및 Application Load Balancer에서만 사용할 수 있습니다.
JA3 자문은 수신 요청의 TLS 클라이언트 Hello에서 파생된 32자 해시입니다. 이 지문은 클라이언트의 TLS 구성에 대한 고유 식별자 역할을 합니다.는 AWS WAF 계산에 충분한 TLS 클라이언트 Hello 정보가 있는 각 요청에 대해이 지문을 계산하고 로깅합니다.  
보호 팩(웹 ACL) 규칙에서 JA3 지문 일치를 구성할 때 이 값을 제공합니다. JA3 지문과의 일치 생성에 대한 자세한 내용은 규칙 문에 대한 [에서 구성 요소 요청 AWS WAF](waf-rule-statement-fields-list.md)의 [JA3 지문](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-ja3-fingerprint) 섹션을 참조하세요.

**ja4Fingerprint**  
요청의 JA4 지문입니다.  
JA4 지문 검사는 Amazon CloudFront 배포 및 Application Load Balancer에서만 사용할 수 있습니다.
JA4 지문은 수신 요청의 TLS 클라이언트 Hello에서 파생된 36자 해시입니다. 이 지문은 클라이언트의 TLS 구성에 대한 고유 식별자 역할을 합니다.는 AWS WAF 계산에 충분한 TLS 클라이언트 Hello 정보가 있는 각 요청에 대해이 지문을 계산하고 로깅합니다.  
보호 팩(웹 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**  
웹 요청의 레이블 이러한 레이블은 request. AWS WAF logs에서 처음 100개의 레이블을 평가하는 데 사용된 규칙에 의해 적용되었습니다.

**nonTerminatingMatchingRules**  
요청과 일치한 비 종료 규칙 목록입니다. 목록의 각 항목에는 다음 정보가 포함되어 있습니다.    
작업  
요청에 AWS WAF 적용된 작업입니다. 이는 개수, CAPTCHA 또는 챌린지를 나타냅니다. 웹 요청에 유효한 토큰이 포함된 경우 CAPTCHA 및 Challenge가 종료되지 않습니다.  
ruleId  
요청에 부합되는 비 종료 규칙의 ID.  
ruleMatchDetails  
요청과 일치하는 규칙에 대한 자세한 정보입니다. 이 필드는 SQL 명령어 삽입 및 크로스 사이트 스크립팅(XSS) 일치 규칙 문에 대해서만 채워집니다. 일치 규칙에는 둘 이상의 검사 기준에 대한 일치가 필요할 수 있으므로 이러한 일치 세부 정보는 일치 기준 배열로 제공됩니다.
각 규칙에 대해 제공되는 추가 정보는 규칙 구성, 규칙 일치 유형, 일치 세부 정보 등의 요소에 따라 달라집니다. 예를 들어 CAPTCHA 또는 Challenge 작업이 있는 규칙의 경우 `captchaResponse` 또는 `challengeResponse`가 나열됩니다. 일치하는 규칙이 규칙 그룹에 있고 구성된 규칙 작업을 재정의한 경우 구성된 작업이 `overriddenAction`에 제공됩니다.

**oversizeFields**  
보호 팩(웹 ACL)에서 검사하고 AWS WAF 검사 한도를 초과하는 웹 요청의 필드 목록입니다. 필드 크기가 너무 크지만 보호 팩(웹 ACL)이 해당 필드를 검사하지 않는 경우 여기에 나열되지 않습니다.  
이 목록에는 `REQUEST_BODY`, `REQUEST_JSON_BODY`, `REQUEST_HEADERS` 및 `REQUEST_COOKIES` 값 중 0개 이상이 포함될 수 있습니다. 과대 필드에 대한 자세한 내용은 [에서 웹 요청 구성 요소 크기 초과 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`, 요청의 헤더에 전달된 IP에는 `FORWARDED_IP`, 사용자 지정 집계 키 설정에는 `CUSTOMKEYS`, 그리고 집계 없이 모든 요청 수를 계산하려는 경우 `CONSTANT`입니다.  
리밋-밸류  
단일 IP 주소 유형에 의해 속도를 제한할 때만 사용됩니다. 요청에 유효하지 않은 IP 주소가 포함된 경우 `limitvalue`는 `INVALID`입니다.  
maxRateAllowed  
특정 집계 인스턴스에 대해 지정된 기간 동안 허용되는 최대 요청 수입니다. 집계 인스턴스는 속도 기반 규칙 구성에 제공된 `limitKey`에 추가 키 사양을 더해 정의됩니다.  
evaluationWindowSec  
요청에 AWS WAF 포함된 시간은 초 단위로 계산됩니다.  
customValues  
요청의 속도 기반 규칙에 의해 식별된 고유 값. 문자열 값의 경우 로그는 문자열 값의 처음 32자를 출력합니다. 키 유형에 따라 이러한 값은 HTTP 메서드 또는 쿼리 문자열과 같이 키에만 사용할 수 있는 값일 수도 있고 헤더 및 헤더 이름과 같은 키와 이름에 모두 사용할 수 있는 값일 수도 있습니다.

**요청 헤더가 삽입되었습니다.**  
사용자 지정 요청 처리를 위해 삽입된 헤더 목록.

**requestId**  
기본 호스트 서비스에 의해 생성되는 요청의 ID입니다. Application Load Balancer의 경우 추적 ID입니다. 다른 모든 경우 이것이 요청 ID입니다.

**responseCodeSent**  
사용자 지정 응답과 함께 전송된 응답 코드입니다.

**ruleGroupId**  
규칙 그룹의 ID. 규칙에서 요청을 차단한 경우 `ruleGroupID`의 ID는 `terminatingRuleId`의 ID와 동일합니다.

**ruleGroupList**  
일치 정보가 포함된 이 요청에 작용하는 규칙 그룹의 목록.

**terminatingRule**  
요청을 종료한 규칙. 이 정보가 있는 경우 다음 정보가 포함됩니다.    
작업  
요청에 AWS WAF 적용된 종료 작업입니다. 이는 허용, 차단, CAPTCHA 또는 챌린지를 나타냅니다. 웹 요청에 유효한 토큰이 없으면 CAPTCHA 및 Challenge 작업이 종료됩니다.  
ruleId  
요청과 일치하는 규칙의 ID입니다.  
ruleMatchDetails  
요청과 일치하는 규칙에 대한 자세한 정보입니다. 이 필드는 SQL 명령어 삽입 및 크로스 사이트 스크립팅(XSS) 일치 규칙 문에 대해서만 채워집니다. 일치 규칙에는 둘 이상의 검사 기준에 대한 일치가 필요할 수 있으므로 이러한 일치 세부 정보는 일치 기준 배열로 제공됩니다.
각 규칙에 대해 제공되는 추가 정보는 규칙 구성, 규칙 일치 유형, 일치 세부 정보 등의 요소에 따라 달라집니다. 예를 들어 CAPTCHA 또는 Challenge 작업이 있는 규칙의 경우 `captchaResponse` 또는 `challengeResponse`가 나열됩니다. 일치하는 규칙이 규칙 그룹에 있고 구성된 규칙 작업을 재정의한 경우 구성된 작업이 `overriddenAction`에 제공됩니다.

**terminatingRuleId**  
요청을 종료한 규칙의 ID. 요청을 종료하는 규칙이 없으면 이 값은 `Default_Action`입니다.

**terminatingRuleMatchDetails**  
요청과 일치하는 종료 규칙에 대한 자세한 정보입니다. 종료 규칙에는 웹 요청에 대한 검사 프로세스를 종료하는 작업이 포함되어 있습니다. 종료 규칙에 사용 가능한 작업으로는 Allow, Block, CAPTCHA 및 Challenge가 있습니다. 웹 요청을 검사하는 동안 요청과 일치하고 종료 작업이 있는 첫 번째 규칙에서는 검사를 AWS WAF 중지하고 작업을 적용합니다. 웹 요청에는 일치하는 종료 규칙에 대해 로그에 보고된 위협 외에도 다른 위협이 포함될 수 있습니다.  
이는 SQL 명령어 삽입 및 크로스 사이트 스크립팅(XSS) 일치 규칙 문에 대해서만 채워집니다. 일치 규칙에는 둘 이상의 검사 기준에 대한 일치가 필요할 수 있으므로 이러한 일치 세부 정보는 일치 기준 배열로 제공됩니다.

**terminatingRuleType**  
요청을 종료한 규칙의 유형. 가능한 값: RATE\$1BASED, REGULAR, GROUP 및 MANAGED\$1RULE\$1GROUP.

**timestamp**  
밀리초 단위의 타임스탬프.

**uri**  
요청의 URI.

**fragment**  
‘\$1’ 기호 뒤에 오는 URL의 부분으로, \$1section2처럼 리소스에 대한 추가 정보를 제공합니다.

**webaclId**  
보호 팩(웹 ACL)의 GUID.

# 보호 팩(웹 ACL) 트래픽에 대한 로그 예제
<a name="logging-examples"></a>

이 섹션에서는 보호 팩(웹 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 토큰을 사용하는 웹 요청에 대한 CAPTCHA 규칙의 로그 출력**  
다음 로그 목록은 CAPTCHA 작업을 포함하는 규칙과 일치하는 웹 요청에 대한 것입니다. 웹 요청에는 유효하고 만료되지 않은 CAPTCHA 토큰이 있으며 AWS WAF, Count 작업 동작과 유사하게에 의한 CAPTCHA 일치로만 기록됩니다. 이 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 토큰이 없는 웹 요청에 대한 CAPTCHA 규칙의 로그 출력**  
다음 로그 목록은 CAPTCHA 작업을 포함하는 규칙과 일치하는 웹 요청에 대한 것입니다. 웹 요청에 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"
  }
}
```