

# 액세스 로그(표준 로그)
<a name="AccessLogs"></a>

로그 파일을 만들도록 CloudFront를 구성할 수 있습니다. 이러한 로그 파일에는 CloudFront에서 수신하는 모든 사용자(뷰어) 요청에 대한 세부 정보가 포함됩니다. 이러한 로그를 *액세스 로그*라고 부르며 *표준 로그*라고도 합니다.

각 로그에는 요청을 받은 시간, 처리 시간, 요청 경로, 서버 응답과 같은 정보가 포함되어 있습니다. 이러한 액세스 로그를 사용하여 응답 시간을 분석하고 문제를 해결할 수 있습니다.

다음 다이어그램은 CloudFront에서 객체 요청에 대한 정보를 어떻게 기록하는지 보여 줍니다. 이 예제에서는 배포가 Amazon S3 버킷으로 액세스 로그를 전송하도록 구성됩니다.

![\[액세스 로그 기본 흐름\]](http://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/images/Logging.png)


1. 이 예제에서는 A와 B라는 두 웹 사이트가 있고 그에 해당하는 CloudFront 배포 2개가 있습니다. 사용자가 배포와 연결된 URL을 사용하여 객체를 요청합니다.

1. CloudFront에서 각 요청을 해당 엣지 로케이션으로 라우팅합니다.

1. CloudFront에서 각 요청에 대한 데이터를 해당 배포 관련 로그 파일에 기록합니다. 이 예제에서는 배포 A와 관련된 요청에 대한 정보가 배포 A 로그 파일에 기록되고, 배포 B와 관련된 요청에 대한 정보가 배포 B 로그 파일에 기록됩니다.

1. CloudFront는 로깅을 활성화할 때 지정한 Amazon S3 버킷에 배포 관련 로그 파일을 정기적으로 저장합니다. 그런 다음, CloudFront는 새 로그 파일에 배포에 대한 후속 요청에 대한 정보를 저장하기 시작합니다.

   지정된 시간 동안 콘텐츠에 액세스하는 뷰어가 없는 경우 해당 시간 동안 로그 파일이 수신되지 않습니다.

**참고**  
모든 요청을 완전히 살펴보기 보다는 콘텐츠에 대한 요청 특성을 이해하는 데 로그를 사용하는 것이 좋습니다. CloudFront는 최대 효과에 기초하여 액세스 로그를 전송합니다. 요청에 따라서는 실제로 요청이 처리된 지 한참 후에 로그 레코드가 전송되거나 아예 전송되지 않을 수도 있습니다. 로그 항목이 액세스 로그에서 생략되는 경우, 액세스 로그의 항목 수가 AWS 결제 및 사용 보고서에 표시되는 사용량과 일치하지 않습니다.

CloudFront는 2가지 버전의 표준 로깅을 지원합니다. 표준 로깅(레거시)은 Amazon S3*로만* 액세스 로그 전송을 지원합니다. 표준 로깅(v2)은 추가 전송 대상을 지원합니다. 배포에 대해 하나 또는 두 로깅 옵션을 모두 구성할 수 있습니다. 자세한 내용은 다음 항목을 참조하세요.

**Topics**
+ [

# 표준 로깅(v2) 구성
](standard-logging.md)
+ [

# 표준 로깅(레거시) 구성
](standard-logging-legacy-s3.md)
+ [

# 표준 로깅 참조
](standard-logs-reference.md)

**작은 정보**  
또한 CloudFront의 실시간 액세스 로그는 배포에 대해 이루어진 요청에 대한 정보를 실시간으로 제공합니다(로그는 요청을 받은 후 몇 초 내에 전달됩니다). 실시간 액세스 로그를 사용하여 콘텐츠 전송 성능을 모니터링 및 분석하고 이에 기초해 조치를 취할 수 있습니다. 자세한 내용은 [실시간 액세스 로그 사용](real-time-logs.md) 섹션을 참조하세요.

# 표준 로깅(v2) 구성
<a name="standard-logging"></a>

배포를 만들거나 업데이트할 때 액세스 로그(표준 로그)를 활성화할 수 있습니다. 표준 로깅(v2)에는 다음 기능이 포함됩니다.
+ 액세스 로그를 Amazon CloudWatch Logs, Amazon Data Firehose, Amazon Simple Storage Service(Amazon S3)로 전달합니다.
+ 원하는 로그 필드를 선택합니다. [실시간 액세스 로그 필드의 하위 집합](#standard-logging-real-time-log-selection)을 선택할 수도 있습니다.
+ 추가 [출력 로그 파일 ](#supported-log-file-format)형식을 선택합니다.

Amazon S3를 사용하는 경우 다음의 선택 사항 기능이 제공됩니다.
+ 옵트인 AWS 리전에 로그를 전송합니다.
+ 파티셔닝을 사용하여 로그를 구성합니다.
+ Hive 호환 파일 이름을 사용합니다.

자세한 내용은 [Amazon S3로 로그 전송](#send-logs-s3) 섹션을 참조하세요.

표준 로깅을 시작하려면 다음 작업을 완료합니다.

1. 로그를 수신할 지정된 AWS 서비스에 필수 권한을 설정합니다.

1. CloudFront 콘솔 또는 CloudWatch API에서 표준 로깅을 구성합니다.

1. 액세스 로그를 확인합니다.

**참고**  
표준 로깅(v2)을 사용 설정해도 표준 로깅(레거시)에 영향을 미치거나 해당 로그가 변경되지 않습니다. 표준 로깅(v2)을 사용하는 것 외에도 배포 시 표준 로깅(레거시)을 계속 사용할 수 있습니다. 자세한 내용은 [표준 로깅(레거시) 구성](standard-logging-legacy-s3.md) 섹션을 참조하세요.
표준 로깅(레거시)을 이미 사용 설정했고 Amazon S3에 대한 표준 로깅(v2)을 사용하려는 경우 *다른* Amazon S3 버킷을 지정하거나 동일한 버킷에서 *별도의 경로*를 사용하는 것이 좋습니다(예: 로그 접두사 또는 파티셔닝 사용). 이렇게 하면 어떤 로그 파일이 어떤 배포와 연결되어 있는지 추적하고 로그 파일이 서로 덮어쓰는 것을 방지할 수 있습니다.

## 권한
<a name="permissions-standard-logging"></a>

CloudFront는 CloudWatch 판매된 로그를 사용하여 액세스 로그를 전달합니다. 이렇게 하려면 로그 전송을 사용 설정할 수 있도록 지정된 AWS 서비스에 대한 권한이 필요합니다.

각 로그 대상에 필요한 권한을 보려면 *Amazon CloudWatch Logs 사용 설명서*의 다음 주제 중에서 선택합니다.
+ [CloudWatch 로그](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-V2-CloudWatchLogs)
+ [Firehose](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-V2-Firehose) – 
+ [Amazon S3](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-V2-S3)

로그 대상에 대한 권한을 설정한 후 배포에 대한 표준 로깅을 사용 설정할 수 있습니다.

**참고**  
CloudFront는 액세스 로그를 다른 AWS 계정(크로스 계정)로 전송하는 것을 지원합니다. 크로스 계정 전송을 사용하려면 두 계정(계정 및 수신 계정)에 필수 권한이 부여되어 있어야 합니다. 자세한 내용은 *Amazon CloudWatch Logs 사용 설명서*에 나와 있는 [크로스 계정 전송을 위한 표준 로깅 사용](#enable-standard-logging-cross-accounts) 섹션 또는 [Cross-account delivery example](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#vended-logs-crossaccount-example)을 참조하시기 바랍니다.

## 표준 로깅 사용
<a name="set-up-standard-logging"></a>

표준 로깅을 사용하기 위해 CloudFront 콘솔 또는 CloudWatch API를 사용할 수 있습니다.

**Contents**
+ [

### 표준 로깅 사용(CloudFront 콘솔)
](#access-logging-console)
+ [

### 표준 로깅 사용(CloudWatch API)
](#enable-access-logging-api)

### 표준 로깅 사용(CloudFront 콘솔)
<a name="access-logging-console"></a>

**CloudFront 배포 시 표준 로깅을 사용하려면 다음과 같이 하세요(콘솔의 경우).**

1. CloudFront 콘솔을 사용하여 [기존 배포를 업데이트](HowToUpdateDistribution.md#HowToUpdateDistributionProcedure)합니다.

1. **Logging**(로깅) 탭을 선택합니다.

1. **추가**를 선택한 다음 로그를 수신할 서비스를 선택합니다.
   + CloudWatch Logs
   + Firehose
   + Amazon S3

1. **대상**에서 서비스의 리소스를 선택합니다. 리소스를 아직 만들지 않은 경우 **생성**을 선택하거나 다음 설명서를 통해 확인할 수 있습니다.
   + CloudWatch Logs에서 **[로그 그룹 이름](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)**을 입력합니다.
   + Firehose에 **[Firehose 전송 스트림](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html)**을 입력합니다.
   + Amazon S3에서 **[버킷 이름](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)**을 입력합니다.
**작은 정보**  
접두사를 지정하려면 버킷 이름 뒤에 접두사를 입력합니다(예: `amzn-s3-demo-bucket.s3.amazonaws.com/MyLogPrefix`). 접두사를 지정하지 않으면 CloudFront에서 자동으로 접두사를 추가합니다. 자세한 내용은 [Amazon S3로 로그 전송](#send-logs-s3) 섹션을 참조하세요.

1. **추가 설정 - *선택 사항***에서 다음 옵션을 지정할 수 있습니다.

   1. **필드 선택**에서 대상으로 전송할 로그 필드 이름을 선택합니다. [액세스 로그 필드](standard-logs-reference.md#BasicDistributionFileFormat) 및 [실시간 액세스 로그 필드](#standard-logging-real-time-log-selection)의 하위 집합을 선택할 수 있습니다.

   1. (Amazon S3만 해당) **파티셔닝**에서 로그 파일 데이터를 파티셔닝할 경로를 지정합니다.

   1. (Amazon S3만 해당) **Hive 호환 파일 형식**에서 확인란을 선택하여 Hive 호환 S3 경로를 사용할 수 있습니다. 이렇게 하면 Hive 호환 도구에 새 데이터를 쉽게 로드할 수 있습니다.

   1. **출력 형식**에서 원하는 형식을 지정합니다.
**참고**  
**Parquet**를 선택하면 액세스 로그를 Apache Parquet로 변환하는 데 CloudWatch 요금이 발생합니다. 자세한 내용은 [Vended Logs section for CloudWatch pricing](https://aws.amazon.com/cloudwatch/pricing/)을 참조하시기 바랍니다.

   1. **필드 구분 기호**에서 로그 필드를 구분하는 방법을 지정합니다.

1. 배포를 업데이트하거나 만드는 단계를 완료합니다.

1. 다른 대상을 추가하려면 3\$16단계를 반복합니다.

1. **로그** 페이지에서 배포 옆의 표준 로그 상태가 **활성화됨**인지 확인합니다.

1. (선택 사항) 쿠키 로깅을 사용 설정하려면 **관리**, **설정**을 선택하고 **쿠키 로깅**을 켠 다음 **변경 사항 저장**을 선택합니다.
**작은 정보**  
쿠키 로깅은 배포의 *모든 *표준 로깅에 적용되는 전역 설정입니다. 별도의 전송 대상에서 이 설정을 재정의할 수 없습니다.

표준 로깅 전송 및 로그 필드에 대한 자세한 내용은 [표준 로깅 참조](standard-logs-reference.md) 섹션을 참조하시기 바랍니다.

### 표준 로깅 사용(CloudWatch API)
<a name="enable-access-logging-api"></a>

CloudWatch API를 사용하여 배포에 대한 표준 로깅을 사용 설정할 수도 있습니다.

**참고**  
표준 로깅을 사용하기 위해 CloudWatch API를 호출할 때 다른 대상으로 리전 간 전송을 사용하려는 경우에도 미국 동부(버지니아 북부) 리전(`us-east-1`)을 지정해야 합니다. 예를 들어 유럽(아일랜드) 리전(`eu-west-1`)의 S3 버킷에 액세스 로그를 보내려면 `us-east-1` 리전에서 CloudWatch API를 사용합니다.
표준 로깅에 쿠키를 포함하는 추가 옵션이 있습니다. CloudFront API에서 이는 `IncludeCookies` 파라미터입니다. CloudWatch API를 사용하여 액세스 로깅을 구성하고 쿠키를 포함하도록 지정하는 경우 CloudFront 콘솔 또는 CloudFront API를 사용하여 쿠키를 포함하도록 배포를 업데이트해야 합니다. 그렇지 않으면 CloudFront는 로그 대상으로 쿠키를 전송할 수 없습니다. 자세한 내용은 [쿠키 로깅](DownloadDistValuesGeneral.md#DownloadDistValuesCookieLogging) 섹션을 참조하세요.

**배포에 대한 표준 로깅을 사용하려면 다음과 같이 합니다(CloudWatch API의 경우).**

1. 배포를 만든 후 Amazon 리소스 이름(ARN)을 가져옵니다.

   CloudFront 콘솔의 **배포** 페이지에서 ARN을 찾거나 [GetDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_GetDistribution.html) API 작업을 사용할 수 있습니다. 배포 ARN은 `arn:aws:cloudfront::123456789012:distribution/d111111abcdef8` 형식을 따릅니다.

1. 다음으로 CloudWatch [PutDeliverySource](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliverySource.html) API 작업을 사용하여 배포에 대한 전송 소스를 만듭니다.

   1. 전송 소스 이름을 입력합니다.

   1. 배포의 `resourceArn`을 전달합니다.

   1. `logType`에서 수집되는 로그 유형으로 `ACCESS_LOGS`를 지정합니다.

   1.   
**Example 예: AWS CLI put-delivery-source 명령**  

      다음은 배포에 대한 전송 소스를 구성하는 예제입니다.

      ```
      aws logs put-delivery-source --name S3-delivery --resource-arn arn:aws:cloudfront::123456789012:distribution/d111111abcdef8 --log-type ACCESS_LOGS
      ```

      **출력**

      ```
      {
       "deliverySource": {
       "name": "S3-delivery",
       "arn": "arn:aws:logs:us-east-1:123456789012:delivery-source:S3-delivery",
       "resourceArns": [
       "arn:aws:cloudfront::123456789012:distribution/d111111abcdef8"
       ],
       "service": "cloudfront",
       "logType": "ACCESS_LOGS"
       }
      }
      ```

1. [PutDeliveryDestination](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestination.html) API 작업을 사용하여 로그를 저장할 위치를 구성합니다.

   1. `destinationResourceArn`에서 대상의 ARN을 지정합니다. CloudWatch Logs 로그 그룹, Firehose 전송 스트림, Amazon S3 버킷이 될 수 있습니다.

   1. `outputFormat`에서 로그의 출력 형식을 지정합니다.

   1.   
**Example 예: AWS CLI put-delivery-destination 명령**  

      다음은 Amazon S3 버킷에 대한 전송 대상을 구성하는 예제입니다.

      ```
      aws logs put-delivery-destination --name S3-destination --delivery-destination-configuration destinationResourceArn=arn:aws:s3:::amzn-s3-demo-bucket
      ```

      **출력**

      ```
      {
          "name": "S3-destination",
          "arn": "arn:aws:logs:us-east-1:123456789012:delivery-destination:S3-destination",
          "deliveryDestinationType": "S3",
          "deliveryDestinationConfiguration": {
              "destinationResourceArn": "arn:aws:s3:::amzn-s3-demo-bucket"
          }
      }
      ```
**참고**  
크로스 계정에 로그를 전달하는 경우 [PutDeliveryDestinationPolicy](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestinationPolicy.html) API 작업을 사용하여 대상 계정 AWS Identity and Access Management(IAM) 정책을 할당해야 합니다. IAM 정책은 한 계정에서 다른 계정으로의 전송을 허용합니다.

1. [CreateDelivery](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateDelivery.html) API 작업을 사용하여 이전 단계에서 만든 대상에 전송 소스를 연결합니다. 이 API 작업은 전송 소스를 최종 대상과 연결합니다.

   1. `deliverySourceName`에서 소스의 이름을 지정합니다.

   1. `deliveryDestinationArn`에서 전송 대상의 ARN을 지정합니다.

   1. `fieldDelimiter`에서 각 로그 필드를 구분할 문자열을 지정합니다.

   1. `recordFields`에서 원하는 로그 필드를 지정합니다.

   1. S3를 사용하는 경우 `enableHiveCompatiblePath` 및 `suffixPath`를 사용할지 여부를 지정합니다.  
**Example 예: AWS CLI create-delivery 명령**  

   다음은 전송을 만드는 예제입니다.

   ```
   aws logs create-delivery --delivery-source-name cf-delivery --delivery-destination-arn arn:aws:logs:us-east-1:123456789012:delivery-destination:S3-destination
   ```

   **출력**

   ```
   {
       "id": "abcNegnBoTR123",
       "arn": "arn:aws:logs:us-east-1:123456789012:delivery:abcNegnBoTR123",
       "deliverySourceName": "cf-delivery",
       "deliveryDestinationArn": "arn:aws:logs:us-east-1:123456789012:delivery-destination:S3-destination",
       "deliveryDestinationType": "S3",
       "recordFields": [
           "date",
           "time",
           "x-edge-location",
           "sc-bytes",
           "c-ip",
           "cs-method",
           "cs(Host)",
           "cs-uri-stem",
           "sc-status",
           "cs(Referer)",
           "cs(User-Agent)",
           "cs-uri-query",
           "cs(Cookie)",
           "x-edge-result-type",
           "x-edge-request-id",
           "x-host-header",
           "cs-protocol",
           "cs-bytes",
           "time-taken",
           "x-forwarded-for",
           "ssl-protocol",
           "ssl-cipher",
           "x-edge-response-result-type",
           "cs-protocol-version",
           "fle-status",
           "fle-encrypted-fields",
           "c-port",
           "time-to-first-byte",
           "x-edge-detailed-result-type",
           "sc-content-type",
           "sc-content-len",
           "sc-range-start",
           "sc-range-end",
           "c-country",
           "cache-behavior-path-pattern"
       ],
        "fieldDelimiter": ""
   }
   ```

1. CloudFront 콘솔의 **로그** 페이지에서 배포 옆의 표준 로그 상태가 **활성화됨**인지 확인합니다.

   표준 로깅 전송 및 로그 필드에 대한 자세한 내용은 [표준 로깅 참조](standard-logs-reference.md) 섹션을 참조하시기 바랍니다.

**참고**  
AWS CloudFormation을 사용하여 CloudFront에 대한 표준 로깅(v2)을 사용하려면 다음 CloudWatch Logs 속성을 사용할 수 있습니다.  
[Delivery](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-delivery.html)
[DeliveryDestination](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-deliverydestination.html)
[DeliverySource](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-deliverysource.html)
`ResourceArn`은 CloudFront 배포이며, `LogType`은 지원되는 로그 유형의 `ACCESS_LOGS`여야 합니다.

## 크로스 계정 전송을 위한 표준 로깅 사용
<a name="enable-standard-logging-cross-accounts"></a>

AWS 계정에 대해 표준 로깅을 활성화하고 액세스 로그를 다른 계정으로 전송하려면 소스 계정과 대상 계정을 올바르게 구성해야 합니다. CloudFront 배포가 있는 *소스 계정*은 액세스 로그를 *대상 계정*으로 전송합니다.

이 예제 절차에서 소스 계정(*111111111111*)은 대상 계정(*222222222222*)의 Amazon S3 버킷으로 액세스 로그를 전송합니다. 대상 계정의 Amazon S3 버킷으로 액세스 로그를 보내려면 AWS CLI를 사용합니다.

### 대상 계정 구성
<a name="steps-destination-account"></a>

대상 계정의 경우 다음 절차를 완료합니다.

**대상 계정을 구성하려면 다음과 같이 합니다.**

1. 로그 전송 대상을 만들려면 다음 AWS CLI 명령을 입력합니다. 이 예제에서는 `MyLogPrefix` 문자열을 사용하여 액세스 로그의 접두사를 만듭니다.

   ```
   aws logs put-delivery-destination --name cloudfront-delivery-destination --delivery-destination-configuration "destinationResourceArn=arn:aws:s3:::amzn-s3-demo-bucket-cloudfront-logs/MyLogPrefix"
   ```

   **출력**

   ```
   {
       "deliveryDestination": {
           "name": "cloudfront-delivery-destination",
           "arn": "arn:aws:logs:us-east-1:222222222222:delivery-destination:cloudfront-delivery-destination",
           "deliveryDestinationType": "S3",
           "deliveryDestinationConfiguration": {"destinationResourceArn": "arn:aws:s3:::amzn-s3-demo-bucket-cloudfront-logs/MyLogPrefix"}
       }
   }
   ```
**참고**  
접두사 *없이* S3 버킷을 지정하면 CloudFront는 `AWSLogs/<account-ID>/CloudFront`를 S3 전송 대상의 `suffixPath`에 표시되는 접두사로 자동으로 추가합니다. 자세한 내용은 [S3DeliveryConfiguration](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_S3DeliveryConfiguration.html)을 참조하시기 바랍니다.

1. 소스 계정이 로그 전송을 만들 수 있도록 로그 전송 대상에 대한 리소스 정책을 추가합니다.

   다음 정책에서 *111111111111*을 소스 계정 ID로 교체하고 1단계의 출력에서 전송 대상 ARN을 지정합니다.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowCreateDelivery",
               "Effect": "Allow",
               "Principal": {"AWS": "111111111111"},
               "Action": ["logs:CreateDelivery"],
               "Resource": "arn:aws:logs:us-east-1:222222222222:delivery-destination:cloudfront-delivery-destination"
           }
       ]
   }
   ```

------

1. `deliverypolicy.json`과 같은 파일을 저장합니다.

1. 이전 정책을 전송 대상에 연결하려면 다음 AWS CLI 명령을 입력합니다.

   ```
   aws logs put-delivery-destination-policy --delivery-destination-name cloudfront-delivery-destination --delivery-destination-policy file://deliverypolicy.json
   ```

1. 아래 스테이트먼트를 대상 Amazon S3 버킷 정책에 추가하여 리소스 ARN과 소스 계정 ID를 교체합니다. 이 정책을 사용하면 `delivery.logs.amazonaws.com` 서비스 위탁자가 `s3:PutObject` 작업을 수행할 수 있습니다.

   ```
   {
       "Sid": "AWSLogsDeliveryWrite",
       "Effect": "Allow",
       "Principal": {"Service": "delivery.logs.amazonaws.com"},
       "Action": "s3:PutObject",
       "Resource": "arn:aws:s3:::amzn-s3-demo-bucket-cloudfront-logs/*",
       "Condition": {
           "StringEquals": {
               "s3:x-amz-acl": "bucket-owner-full-control",
               "aws:SourceAccount": "111111111111"
           },
           "ArnLike": {"aws:SourceArn": "arn:aws:logs:us-east-1:111111111111:delivery-source:*"}
       }
   }
   ```

1. 버킷에 AWS KMS를 사용하는 경우 KMS 키 정책에 다음 스테이트먼트를 추가하여 `delivery.logs.amazonaws.com` 서비스 위탁자에 대한 권한을 부여합니다.

   ```
   {
       "Sid": "Allow Logs Delivery to use the key",
       "Effect": "Allow",
       "Principal": {"Service": "delivery.logs.amazonaws.com"},
       "Action": [
           "kms:Encrypt",
           "kms:Decrypt",
           "kms:ReEncrypt*",
           "kms:GenerateDataKey*",
           "kms:DescribeKey"
       ],
       "Resource": "*",
       "Condition": {
           "StringEquals": {"aws:SourceAccount": "111111111111"},
           "ArnLike": {"aws:SourceArn": "arn:aws:logs:us-east-1:111111111111:delivery-source:*"}
       }
   }
   ```

### 소스 계정 구성
<a name="steps-source-account"></a>

대상 계정을 구성한 후 다음 절차에 따라 전송 소스를 만들고 소스 계정의 배포에 대한 로깅을 사용 설정합니다.

**소스 계정을 구성하려면 다음과 같이 합니다.**

1. CloudFront 표준 로깅을 위한 전송 소스를 만들어 CloudWatch Logs로 로그 파일을 보낼 수 있습니다.

   다음 AWS CLI 명령을 입력하여 이름과 배포 ARN을 교체할 수 있습니다.

   ```
   aws logs put-delivery-source --name s3-cf-delivery --resource-arn arn:aws:cloudfront::111111111111:distribution/E1TR1RHV123ABC --log-type ACCESS_LOGS
   ```

   **출력**

   ```
   {
       "deliverySource": {
           "name": "s3-cf-delivery",
           "arn": "arn:aws:logs:us-east-1:111111111111:delivery-source:s3-cf-delivery",
           "resourceArns": ["arn:aws:cloudfront::111111111111:distribution/E1TR1RHV123ABC"],
           "service": "cloudfront",
           "logType": "ACCESS_LOGS"
       }
   }
   ```

1. 소스 계정의 로그 전송 소스와 대상 계정의 로그 전송 대상을 매핑하는 전송을 만듭니다.

   다음 AWS CLI 명령에서 [1단계: 대상 계정 구성](#steps-destination-account)의 출력에서 전송 대상 ARN을 지정합니다.

   ```
   aws logs create-delivery --delivery-source-name s3-cf-delivery --delivery-destination-arn arn:aws:logs:us-east-1:222222222222:delivery-destination:cloudfront-delivery-destination
   ```

   **출력**

   ```
   {
       "delivery": {
           "id": "OPmOpLahVzhx1234",
           "arn": "arn:aws:logs:us-east-1:111111111111:delivery:OPmOpLahVzhx1234",
           "deliverySourceName": "s3-cf-delivery",
           "deliveryDestinationArn": "arn:aws:logs:us-east-1:222222222222:delivery-destination:cloudfront-delivery-destination",
           "deliveryDestinationType": "S3",
           "recordFields": [
               "date",
               "time",
               "x-edge-location",
               "sc-bytes",
               "c-ip",
               "cs-method",
               "cs(Host)",
               "cs-uri-stem",
               "sc-status",
               "cs(Referer)",
               "cs(User-Agent)",
               "cs-uri-query",
               "cs(Cookie)",
               "x-edge-result-type",
               "x-edge-request-id",
               "x-host-header",
               "cs-protocol",
               "cs-bytes",
               "time-taken",
               "x-forwarded-for",
               "ssl-protocol",
               "ssl-cipher",
               "x-edge-response-result-type",
               "cs-protocol-version",
               "fle-status",
               "fle-encrypted-fields",
               "c-port",
               "time-to-first-byte",
               "x-edge-detailed-result-type",
               "sc-content-type",
               "sc-content-len",
               "sc-range-start",
               "sc-range-end",
               "c-country",
               "cache-behavior-path-pattern"
           ],
           "fieldDelimiter": "\t"
       }
   }
   ```

1. 크로스 계정 전송이 성공했는지 확인합니다.

   1. *소스* 계정에서 CloudFront 콘솔에 로그인하고 배포를 선택합니다. **로깅** 탭의 **유형**에서 S3 크로스 계정 로그 전송을 위해 만든 항목을 볼 수 있습니다.

   1. *대상* 계정에서 Amazon S3 콘솔에 로그인하고 Amazon S3 버킷을 선택합니다. 버킷 이름에 `MyLogPrefix` 접두사와 해당 폴더에 전달된 액세스 로그가 표시됩니다.

## 출력 파일 형식
<a name="supported-log-file-format"></a>

선택한 전송 대상에 따라 로그 파일에 대해 다음 형식 중 하나를 지정할 수 있습니다.
+ JSON
+ Plain
+ w3c
+ 원시
+ Parquet(Amazon S3만 해당)

**참고**  
전송 대상을 처음 만들 때만 출력 형식을 설정할 수 있습니다. 이는 나중에 업데이트할 수 없습니다. 출력 형식을 변경하려면 전송을 삭제하고 다른 전송을 만듭니다.

자세한 내용은 *Amazon CloudWatch Logs API 참조*에 나와 있는 [PutDeliveryDestination](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestination.html)을 참조하시기 바랍니다.

## 표준 로깅 설정 편집
<a name="standard-logs-v2-edit-settings"></a>

[CloudFront 콘솔](https://console.aws.amazon.com/cloudfront/v4/home) 또는 CloudWatch API를 사용하여 로깅을 사용 또는 사용 해제하고 다른 로그 설정을 업데이트할 수 있습니다. 로깅 설정에 대한 변경 내용은 12시간 내에 적용됩니다.

자세한 내용은 다음 항목을 참조하세요.
+ CloudFront 콘솔을 사용하여 배포를 업데이트하려면 [배포 업데이트](HowToUpdateDistribution.md) 섹션을 참조하시기 바랍니다.
+ CloudFront API를 사용하여 배포를 업데이트하려면 *Amazon CloudFront API 참조*에 나와 있는 [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html)을 참조하시기 바랍니다.
+ CloudWatch Logs API 작업에 대한 자세한 내용은 [Amazon CloudWatch Logs API 참조](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/Welcome.html)를 참조하시기 바랍니다.

## 액세스 로그 필드
<a name="standard-logging-real-time-log-selection"></a>

표준 로깅(레거시)에서 지원하는 로그 필드와 동일한 로그 필드를 선택할 수 있습니다. 자세한 내용은 [로그 파일 필드](standard-logs-reference.md#BasicDistributionFileFormat)를 참조하시기 바랍니다.

또한 다음의 [실시간 액세스 로그 필드](real-time-logs.md#understand-real-time-log-config)를 선택할 수 있습니다.

1. `timestamp(ms)` - 밀리초 단위의 타임스탬프

1. `origin-fbl` - CloudFront와 오리진 간의 첫 바이트 지연 시간(초) 

1. `origin-lbl` - CloudFront와 오리진 간의 마지막 바이트 지연 시간(초) 

1. `asn` - 뷰어의 Autonomous System Number(ASN) 

1. `c-country` - 뷰어의 지리적 위치를 나타내는 국가 코드이며, 뷰어의 IP 주소로 결정됨 국가 코드 목록은 [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) 단원을 참조하세요.

1. `cache-behavior-path-pattern` - 뷰어 요청과 일치하는 캐시 동작을 식별하는 경로 패턴 

## CloudWatch Logs에 로그 전송
<a name="send-logs-cloudwatch-logs"></a>

CloudWatch Logs로 로그를 전송하려면 CloudWatch Logs 로그 그룹을 만들거나 기존 버전을 사용합니다. CloudWatch Logs 로그 그룹의 구성에 대한 자세한 내용은 [Working with Log Groups and Log Streams](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)을 참조하시기 바랍니다.

로그 그룹을 만든 후에는 표준 로깅을 허용하는 데 필요한 권한이 있어야 합니다. 필수 권한에 대한 자세한 내용은 *Amazon CloudWatch Logs 사용 설명서*의 [Logs sent to CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-V2-CloudWatchLogs)를 참조하시기 바랍니다.

**참고**  
CloudWatch Logs 로그 그룹의 이름을 지정할 경우 `[\w-]` 정규식 패턴만 사용합니다. 자세한 내용은 *Amazon CloudWatch Logs API 참조*에 나와 있는 [PutDeliveryDestination](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestination.html#API_PutDeliveryDestination_RequestSyntax) API 작업을 참조하시기 바랍니다.
로그 그룹 리소스 정책이 크기 제한을 초과하지 않는지 확인합니다. CloudWatch Logs 주제의 [로그 그룹 리소스 정책 크기 제한 고려 사항](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-V2-CloudWatchLogs) 섹션을 참조하시기 바랍니다.

### CloudWatch Logs로 전송된 액세스 로그 예제
<a name="example-access-logs-cwl"></a>

```
{ 
"date": "2024-11-14", 
"time": "21:34:06", 
"x-edge-location": "SOF50-P2", 
"asn": "16509", 
"timestamp(ms)": "1731620046814", 
"origin-fbl": "0.251", 
"origin-lbl": "0.251", 
"x-host-header": "d111111abcdef8.cloudfront.net", 
"cs(Cookie)": "examplecookie=value" 
}
```

## Firehose로 로그 전송
<a name="send-logs-kinesis"></a>

Firehose로 로그를 보내려면 기존 Firehose 전송 스트림을 만들거나 사용합니다. 그런 다음 Firehose 전송 스트림을 로그 전송 대상으로 지정합니다. 미국 동부(버지니아 북부) us-east-1 리전에서 Firehose 전송 스트림을 지정해야 합니다.

전송 스트림 생성에 관한 자세한 내용은 [Amazon Data Firehose 전송 스트림 생성](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html)을 참조하세요.

전송 스트림을 만든 후 표준 로깅을 허용하는 데 필요한 권한이 있어야 합니다. 자세한 내용은 *Amazon CloudWatch Logs 사용 설명서*의 [Logs sent to Firehose](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-V2-Firehose)를 참조하시기 바랍니다.

**참고**  
Firehose 스트림의 이름을 지정할 경우 `[\w-]` 정규식 패턴만 사용합니다. 자세한 내용은 *Amazon CloudWatch Logs API 참조*에 나와 있는 [PutDeliveryDestination](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestination.html#API_PutDeliveryDestination_RequestSyntax) API 작업을 참조하시기 바랍니다.

### Firehose로 전송된 액세스 로그 예제
<a name="example-access-logs-firehose"></a>

```
{"date":"2024-11-15","time":"19:45:51","x-edge-location":"SOF50-P2","asn":"16509","timestamp(ms)":"1731699951183","origin-fbl":"0.254","origin-lbl":"0.254","x-host-header":"d111111abcdef8.cloudfront.net","cs(Cookie)":"examplecookie=value"}
{"date":"2024-11-15","time":"19:45:52","x-edge-location":"SOF50-P2","asn":"16509","timestamp(ms)":"1731699952950","origin-fbl":"0.125","origin-lbl":"0.125","x-host-header":"d111111abcdef8.cloudfront.net","cs(Cookie)":"examplecookie=value"}
```

## Amazon S3로 로그 전송
<a name="send-logs-s3"></a>

Amazon S3로 액세스 로그를 전송하려면 S3 버킷을 만들거나 기존 버킷을 사용합니다. CloudFront에서 로깅을 사용할 때 버킷 이름을 지정합니다. 버킷 생성에 대해 자세히 알아보려면 *Amazon Simple Storage Service 사용 설명서*의 [버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)을 참조하시기 바랍니다.

버킷을 만든 후 표준 로깅을 허용하는 데 필요한 권한이 있어야 합니다. 자세한 내용은 *Amazon CloudWatch Logs 사용 설명서*의 [Amazon S3로 전송된 로그](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-V2-S3)를 참조하세요.
+ 로깅을 사용 설정하면 AWS가 자동으로 필요한 버킷 정책을 추가합니다.
+ [옵트인 AWS 리전](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-regions.html)에서 S3 버킷을 사용할 수도 있습니다.

**참고**  
표준 로깅(레거시)을 이미 사용 설정했고 Amazon S3에 대한 표준 로깅(v2)을 사용하려는 경우 *다른* Amazon S3 버킷을 지정하거나 동일한 버킷에서 *별도의 경로*를 사용하는 것이 좋습니다(예: 로그 접두사 또는 파티셔닝 사용). 이렇게 하면 어떤 로그 파일이 어떤 배포와 연결되어 있는지 추적하고 로그 파일이 서로 덮어쓰는 것을 방지할 수 있습니다.

**Topics**
+ [

### S3 버킷 지정
](#prefix-s3-buckets)
+ [

### 분할
](#partitioning)
+ [

### Hive 호환 파일 이름 형식
](#hive-compatible-file-name-format)
+ [

### 로그에 액세스하는 경로 예제
](#bucket-path-examples)
+ [

### Amazon S3로 전송된 액세스 로그의 예제
](#example-access-logs-s3)

### S3 버킷 지정
<a name="prefix-s3-buckets"></a>

S3 버킷을 전송 대상으로 지정할 때 다음 사항에 유의하시기 바랍니다.

S3 버킷 이름은 `[\w-]` 정규식 패턴만 사용할 수 있습니다. 자세한 내용은 *Amazon CloudWatch Logs API 참조*에 나와 있는 [PutDeliveryDestination](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestination.html#API_PutDeliveryDestination_RequestSyntax) API 작업을 참조하시기 바랍니다.

S3 버킷에 접두사를 지정한 경우 해당 경로 아래에 로그가 나타납니다. 접두사를 지정하지 않으면 CloudFront에서 자동으로 `AWSLogs/{account-id}/CloudFront` 접두사를 추가합니다.

자세한 내용은 [로그에 액세스하는 경로 예제](#bucket-path-examples) 섹션을 참조하세요.

### 분할
<a name="partitioning"></a>

CloudFront가 S3 버킷으로 액세스 로그를 전송할 때 파티셔닝을 사용하여 액세스 로그를 구성할 수 있습니다. 이렇게 하면 원하는 경로를 기반으로 액세스 로그를 구성하고 찾을 수 있습니다.

다음 변수를 사용하여 폴더 경로를 만들 수 있습니다.
+ `{DistributionId}` 또는 `{distributionid}`
+ `{yyyy}`
+ `{MM}`
+ `{dd}`
+ `{HH}`
+ `{accountid}`

원하는 수의 변수를 사용하고 경로에 폴더 이름을 지정할 수 있습니다. 그런 다음 CloudFront는 이 경로를 사용하여 S3 버킷에 폴더 구조를 만듭니다.

**예제**
+ `my_distribution_log_data/{DistributionId}/logs`
+ `/cloudfront/{DistributionId}/my_distribution_log_data/{yyyy}/{MM}/{dd}/{HH}/logs `

**참고**  
 접미사 경로의 배포 ID에 두 변수 중 하나를 사용할 수 있습니다. 그러나 AWS Glue에 액세스 로그를 보내는 경우 AWS Glue는 파티션 이름을 소문자로 예상하므로 `{distributionid}` 변수를 사용해야 합니다. CloudFront에서 기존 로그 구성을 업데이트하여 `{DistributionId}`를 `{distributionid}`로 바꿉니다.

### Hive 호환 파일 이름 형식
<a name="hive-compatible-file-name-format"></a>

전송된 액세스 로그가 포함된 S3 객체가 Apache Hive와의 통합을 허용하는 접두사 구조를 사용하도록 이 옵션을 사용할 수 있습니다. 자세한 내용은 [CreateDelivery](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateDelivery.html) API 작업을 참조하시기 바랍니다.

**Example 예제**  

```
/cloudfront/DistributionId={DistributionId}/my_distribution_log_data/year={yyyy}/month={MM}/day={dd}/hour={HH}/logs
```

파티셔닝 및 Hive 호환 옵션에 대한 자세한 내용은 *Amazon CloudWatch Logs API 참조*의 [S3DeliveryConfiguration](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_S3DeliveryConfiguration.html) 요소를 참조하시기 바랍니다.

### 로그에 액세스하는 경로 예제
<a name="bucket-path-examples"></a>

S3 버킷을 대상으로 지정할 경우 다음 옵션을 사용하여 액세스 로그의 경로를 만들 수 있습니다.
+ Amazon S3 버킷(접두사가 있거나 없는 경우)
+ CloudFront 제공 변수를 사용하거나 직접 입력하여 파티셔닝
+ Hive 호환 옵션 사용

다음 표는 선택한 옵션에 따라 버킷에 액세스 로그가 표시되는 방법을 보여줍니다.

#### 접두사가 있는 Amazon S3 버킷
<a name="bucket-with-prefix"></a>


| Amazon S3 버킷 이름 | 접미사 경로에서 지정하는 파티션 | 접미사 경로 업데이트 | Hive 호환 사용 설정 여부 | 액세스 로그 전송 대상 | 
| --- | --- | --- | --- | --- | 
| amzn-s3-demo-bucket/MyLogPrefix | 없음 | 없음 | 아니요 | amzn-s3-demo-bucket/MyLogPrefix/ | 
| amzn-s3-demo-bucket/MyLogPrefix | myFolderA/ | myFolderA/ | 아니요 | amzn-s3-demo-bucket/MyLogPrefix/myFolderA/ | 
| amzn-s3-demo-bucket/MyLogPrefix | myFolderA/\$1yyyy\$1 | myFolderA/\$1yyyy\$1 | 예 | amzn-s3-demo-bucket/MyLogPrefix/myFolderA/year=2025 | 

#### 접두사가 없는 Amazon S3 버킷
<a name="bucket-without-prefix"></a>


| Amazon S3 버킷 이름 | 접미사 경로에서 지정하는 파티션 | 접미사 경로 업데이트 | Hive 호환 사용 설정 여부 | 액세스 로그 전송 대상 | 
| --- | --- | --- | --- | --- | 
| amzn-s3-demo-bucket | 없음 | AWSLogs/\$1account-id\$1/CloudFront/ | 아니요 | amzn-s3-demo-bucket/AWSLogs/<your-account-ID>/CloudFront/ | 
| amzn-s3-demo-bucket | myFolderA/ | AWSLogs/\$1account-id\$1/CloudFront/myFolderA/ | 아니요 | amzn-s3-demo-bucket/AWSLogs/<your-account-ID>/CloudFront/myFolderA/ | 
| amzn-s3-demo-bucket | myFolderA/ | AWSLogs/\$1account-id\$1/CloudFront/myFolderA/ | 예 | amzn-s3-demo-bucket/AWSLogs/aws-account-id=<your-account-ID>/CloudFront/myFolderA/ | 
| amzn-s3-demo-bucket | myFolderA/\$1yyyy\$1 | AWSLogs/\$1account-id\$1/CloudFront/myFolderA/\$1yyyy\$1 | 예 | amzn-s3-demo-bucket/AWSLogs/aws-account-id=<your-account-ID>/CloudFront/myFolderA/year=2025 | 

#### 파티션 역할 AWS 계정 ID
<a name="bucket-account-id-partition"></a>


| Amazon S3 버킷 이름 | 접미사 경로에서 지정하는 파티션 | 접미사 경로 업데이트 | Hive 호환 사용 설정 여부 | 액세스 로그 전송 대상 | 
| --- | --- | --- | --- | --- | 
| amzn-s3-demo-bucket | 없음 | AWSLogs/\$1account-id\$1/CloudFront/ | 예 | amzn-s3-demo-bucket/AWSLogs/aws-account-id=<your-account-ID>/CloudFront/ | 
| amzn-s3-demo-bucket | myFolderA/\$1accountid\$1 | AWSLogs/\$1account-id\$1/CloudFront/myFolderA/\$1accountid\$1 | 예 | amzn-s3-demo-bucket/AWSLogs/aws-account-id=<your-account-ID>/CloudFront/myFolderA/accountid=<your-account-ID> | 

**참고**  
`{account-id}` 변수는 CloudFront용으로 예약되어 있습니다. 접두사 *없이* Amazon S3 버킷을 지정하면 CloudFront가 자동으로 접미사 경로에 이 변수를 추가합니다. 로그가 Hive와 호환되는 경우 이 변수는 `aws-account-id`로 표시됩니다.
CloudFront가 접미사 경로에 계정 ID를 추가하도록 `{accountid}` 변수를 사용할 수 있습니다. 로그가 Hive와 호환되는 경우 이 변수는 `accountid`로 표시됩니다.
접미사 경로에 대한 자세한 내용은 [S3DeliveryConfiguration](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_S3DeliveryConfiguration.html)을 참조하시기 바랍니다.

### Amazon S3로 전송된 액세스 로그의 예제
<a name="example-access-logs-s3"></a>

```
#Fields: date time x-edge-location asn timestamp(ms) x-host-header cs(Cookie)
2024-11-14    22:30:25    SOF50-P2    16509    1731623425421    
d111111abcdef8.cloudfront.net    examplecookie=value2
```

## 표준 로깅 사용 해제
<a name="delete-standard-log-destination"></a>

배포가 더 이상 필요하지 않은 경우 배포에 대한 표준 로깅을 사용 해제할 수 있습니다.

**표준 로깅을 사용 해제하려면 다음과 같이 합니다.**

1. CloudFront 콘솔에 로그인합니다.

1. **배포**를 선택한 다음 배포 ID를 선택합니다.

1. **로깅**을 선택한 다음 **액세스 로그 대상**에서 대상을 선택합니다.

1. **관리**를 선택한 다음 **삭제**를 선택합니다.

1. 표준 로깅이 2개 이상인 경우 이전 단계를 반복합니다.

**참고**  
CloudFront 콘솔에서 표준 로깅을 삭제하면 이 작업은 전송 및 전송 대상만 삭제합니다. AWS 계정에서 전송 소스를 삭제하지 않습니다. 전송 소스를 삭제하려면 `aws logs delete-delivery-source --name DeliverySourceName` 명령에서 전송 소스 이름을 지정합니다. 자세한 내용은 *Amazon CloudWatch Logs API 참조*에 나와 있는 [DeleteDeliverySource](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DeleteDeliverySource.html)를 참조하시기 바랍니다.

## 문제 해결
<a name="troubleshooting-access-logs-v2"></a>

CloudFront 표준 로깅(v2)을 사용할 때 발생하는 일반적인 문제를 해결하려면 다음 정보를 사용합니다.

### 전송 소스가 이미 존재함
<a name="access-logging-resource-already-used"></a>

배포에 대한 표준 로깅을 사용하는 경우 전송 소스를 만듭니다. 그런 다음 해당 전송 소스를 사용하여 원하는 대상 유형인 CloudWatch Logs, Firehose, Amazon S3에 대한 전송을 만듭니다. 현재 배포당 하나의 전송 소스만 보유할 수 있습니다. 동일한 배포에 대해 다른 전송 소스를 만들려고 하면 다음 오류 메시지가 나타납니다.

```
This ResourceId has already been used in another Delivery Source in this account
```

다른 전송 소스를 만들려면 먼저 기존 전송 소스를 삭제합니다. 자세한 내용은 *Amazon CloudWatch Logs API 참조*에 나와 있는 [DeleteDeliverySource](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DeleteDeliverySource.html)를 참조하시기 바랍니다.

### 접미사 경로를 변경했는데 Amazon S3 버킷이 내 로그를 수신할 수 없음
<a name="access-logging-s3-permission"></a>

표준 로깅(v2)을 사용 설정하고 접두사 없이 버킷 ARN을 지정하는 경우 CloudFront는 접미사 경로에 다음 기본값(`AWSLogs/{account-id}/CloudFront`)을 추가합니다. CloudFront 콘솔 또는 [UpdateDeliveryConfiguration](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_UpdateDeliveryConfiguration.html) API 작업을 사용하여 다른 접미사 경로를 지정하는 경우 동일한 경로를 사용하도록 Amazon S3 버킷 정책을 업데이트해야 합니다.

**Example 예: 접미사 경로 업데이트**  

1. 기본 접미사 경로는 `AWSLogs/{account-id}/CloudFront`이며 `myFolderA`로 바꿉니다.

1. 새 접미사 경로가 Amazon S3 버킷 정책에 지정된 경로와 다르기 때문에 액세스 로그가 전달되지 않습니다.

1. 다음 단계 중 하나를 수행할 수 있습니다.
   + Amazon S3 버킷 권한을 `amzn-s3-demo-bucket/AWSLogs/<your-account-ID>/CloudFront/*`에서 `amzn-s3-demo-bucket/myFolderA/*`로 업데이트합니다.
   + 기본 접미사를 다시 사용하도록 로깅 구성을 업데이트합니다(`AWSLogs/{account-id}/CloudFront`).
자세한 내용은 [권한](#permissions-standard-logging) 섹션을 참조하세요.

## 로그 파일 삭제
<a name="standard-logs-v2-delete"></a>

CloudFront는 대상에서 로그 파일을 자동으로 삭제하지 않습니다. 로그 파일 삭제에 대한 자세한 내용은 다음 주제를 참조하시기 바랍니다.

**Amazon S3**
+ *Amazon Simple Storage Service 콘솔 사용 설명서*의 [객체 삭제](https://docs.aws.amazon.com/AmazonS3/latest/userguide/DeletingObjects.html)

**CloudWatch Logs**
+ *Amazon CloudWatch Logs 사용 설명서*의 [Working with log groups and log streams](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)
+ *Amazon CloudWatch Logs API 참조*의 [DeleteLogGroup](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DeleteLogGroup.html)

**Firehose**
+ *Amazon Data Firehose API 참조*의 [DeleteDeliveryStream](https://docs.aws.amazon.com/firehose/latest/APIReference/API_DeleteDeliveryStream.html)

## 가격 책정
<a name="pricing-standard-logs"></a>

CloudFront는 표준 로그 사용에 대한 요금을 부과하지 않습니다. 그러나 선택한 로그 전송 대상에 따라 전송, 수집, 스토리지, 액세스에 대한 요금이 발생할 수 있습니다. 자세한 내용은 [Amazon CloudWatch Logs 요금](https://aws.amazon.com/cloudwatch/pricing/)을 참조하시기 바랍니다. **유료 티어**에서 **로그** 탭을 선택한 다음 **판매된 로그**에서 각 전송 대상의 정보를 참조하시기 바랍니다.

AWS 서비스의 요금에 대한 자세한 내용은 다음 주제를 참조하시기 바랍니다.
+ [Amazon CloudWatch Logs 요금](https://aws.amazon.com/cloudwatch/pricing/)
+ [Amazon Data Firehose 요금](https://aws.amazon.com/kinesis/data-firehose/pricing/)
+ [Amazon S3 요금](https://aws.amazon.com/s3/pricing/) 
**참고**  
로그 파일을 저장하고 액세스하는 데 Amazon S3 요금이 발생하지만 Amazon S3로 로그를 전송하는 것에 대한 추가 요금은 없습니다. **Parquet** 옵션을 사용하여 액세스 로그를 Apache Parquet로 변환하면 이 옵션에 대한 CloudWatch 요금이 발생합니다. 자세한 내용은 [Vended Logs section for CloudWatch pricing](https://aws.amazon.com/cloudwatch/pricing/)을 참조하시기 바랍니다.

# 표준 로깅(레거시) 구성
<a name="standard-logging-legacy-s3"></a>

**참고**  
이 주제는 이전 버전의 표준 로깅에 관한 내용입니다. 최신 버전은 [표준 로깅(v2) 구성](standard-logging.md) 페이지를 참조하세요.
표준 로깅(레거시)을 이미 사용 설정했고 Amazon S3에 대한 표준 로깅(v2)을 사용하려는 경우 *다른* Amazon S3 버킷을 지정하거나 동일한 버킷에서 *별도의 경로*를 사용하는 것이 좋습니다(예: 로그 접두사 또는 파티셔닝 사용). 이렇게 하면 어떤 로그 파일이 어떤 배포와 연결되어 있는지 추적하고 로그 파일이 서로 덮어쓰는 것을 방지할 수 있습니다.

표준 로깅(레거시)을 시작하려면 다음 단계를 완료합니다.

1. 로그를 수신할 Amazon S3 버킷을 선택하고 필수 권한을 추가합니다.

1. CloudFront 콘솔 또는 CloudFront API에서 표준 로깅(레거시)을 구성합니다. 로그를 수신할 Amazon S3 버킷만 선택할 수 있습니다.

1. 액세스 로그를 확인합니다.

## 표준 로그용 Amazon S3 버킷 선택
<a name="access-logs-choosing-s3-bucket"></a>

배포에 대해 로깅을 활성화하는 경우 CloudFront에서 로그 파일을 저장할 Amazon S3 버킷을 지정할 수 있습니다. Amazon S3를 오리진으로 사용할 경우에는 로그 파일에 **별도의 버킷을 사용하는 것이 좋습니다.

CloudFront에서 액세스 로그를 저장하려는 Amazon S3 버킷을 지정합니다(예: `amzn-s3-demo-bucket.s3.amazonaws.com`).

동일 버킷에 여러 배포에 대한 로그 파일을 저장할 수 있습니다. 로깅을 활성화할 경우 파일 이름에 접두사(선택 사항)를 지정하여 배포와 연결되는 로그 파일을 추적할 수 있습니다.

**S3 버킷 선택 관련**  
버킷에 액세스 제어 목록(ACL)이 활성화되어 있어야 합니다. CloudFront 콘솔에서 ACL이 활성화되지 않은 버킷을 선택하면 오류 메시지가 표시됩니다. [권한](#AccessLogsBucketAndFileOwnership)을(를) 참조하세요.
**버킷 소유자**로 설정된 [S3 객체 소유권](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)이 적용된 Amazon S3 버킷을 선택하지 마세요. 이 설정은 버킷과 그 안의 객체에 대한 ACL을 비활성화하여 CloudFront에서 버킷으로 로그 파일을 전송하지 못하도록 합니다.[표준 로깅 V2](standard-logging.md)[AWS 리전](https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html)

## 권한
<a name="AccessLogsBucketAndFileOwnership"></a>

**중요**  
2023년 4월부터 CloudFront 표준 로그에 사용되는 새 S3 버킷에 대해 S3 ACL을 활성화해야 합니다. [버킷을 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-ownership-new-bucket.html)할 때 ACL을 활성화하거나 [기존 버킷](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-ownership-existing-bucket.html)에 ACL을 활성화할 수 있습니다.  
변경 사항에 대한 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [새 S3 버킷에 대한 기본 설정 FAQ](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-faq.html)와 *AWS 뉴스 블로그*의 [2023년 4월에 예정된 Amazon S3 보안 변경 사항](https://aws.amazon.com/blogs/aws/heads-up-amazon-s3-security-changes-are-coming-in-april-of-2023/)을 참조하세요.

로그 파일용으로 지정하는 버킷에 대해 AWS 계정에 다음 권한이 있어야 합니다.
+ 버킷의 ACL에서 `FULL_CONTROL` 권한을 부여받아야 합니다. 버킷 소유자인 경우 기본적으로 계정에 이 권한이 있습니다. 이 권한이 없을 경우 버킷 소유자가 버킷에 대한 ACL을 업데이트해야 합니다.
+ `s3:GetBucketAcl`
+ `s3:PutBucketAcl`

**버킷에 대한 ACL**  
배포를 생성하거나 업데이트하고 로깅을 활성화할 경우 CloudFront는 이러한 권한을 사용하여 버킷에 대한 ACL을 업데이트함으로써 `awslogsdelivery` 계정에 `FULL_CONTROL` 권한을 부여합니다. `awslogsdelivery` 계정이 로그 파일을 버킷에 기록합니다. ACL을 업데이트하는 데 필요한 권한이 계정에 없을 경우 배포를 생성하거나 업데이트할 수 없습니다.  
프로그래밍 방식으로 버킷 생성 요청을 제출했는데 지정한 이름의 버킷이 이미 존재하는 경우, S3는 해당 버킷에 대한 권한을 기본값으로 재설정합니다. 액세스 로그를 S3 버킷에 저장하도록 CloudFront를 구성했는데 더 이상 해당 버킷에서 로그를 가져오지 않는 경우, 버킷에 대한 권한을 점검하여 CloudFront가 필요한 권한을 가지고 있는지 확인하세요.

**버킷에 대한 ACL 복원**  
`awslogsdelivery` 계정에 대한 권한을 제거할 경우 CloudFront는 S3 버킷에 로그를 저장할 수 없습니다. CloudFront에서 배포에 대한 로그를 다시 저장할 수 있게 하려면 다음 중 하나를 수행하여 ACL 권한을 복원합니다.  
+ CloudFront의 배포에 대한 로깅을 비활성화한 다음 이를 다시 활성화합니다. 자세한 내용은 [표준 로깅](DownloadDistValuesGeneral.md#DownloadDistValuesLoggingOnOff) 섹션을 참조하세요.
+ Amazon S3 콘솔의 S3 버킷으로 이동하고 권한을 추가하여 `awslogsdelivery`에 대한 ACL 권한을 수동으로 추가합니다. `awslogsdelivery`에 대한 ACL을 추가하려면 계정에 대해 다음과 같이 정식 ID를 입력해야 합니다.

  `c4c1ede66af53448b93c283ce9448c4ba468c9432aa01d700d3878632f77d2d0`

  

  S3 버킷에 ACL을 추가하는 방법에 대한 자세한 내용은 **Amazon Simple Storage Service 사용 설명서의 [ACL 구성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/managing-acls.html)을 참조하세요.

**각 로그 파일의 ACL**  
버킷의 ACL 외에도 각 로그 파일마다 ACL이 있습니다. 버킷 소유자에게는 각 로그 파일에 대한 `FULL_CONTROL` 권한이 있으며, 배포 소유자(버킷 소유자와 다른 경우)에게는 아무런 권한이 없습니다. `awslogsdelivery` 계정에는 읽기 및 쓰기 권한이 있습니다.

**로깅 비활성화**  
로깅을 비활성화하더라도 CloudFront가 버킷이나 로그 파일에 대한 ACL이 자동으로 삭제되지 않습니다. 필요한 경우 ACL을 삭제할 수 있습니다.

### SSE-KMS 버킷에 필요한 키 정책
<a name="AccessLogsKMSPermissions"></a>

표준 로그의 S3 버킷이 고객 관리형 키를 사용하여 AWS KMS keys(SSE-KMS)로 서버 측 암호화를 사용하는 경우, 고객 관리형 키의 키 정책에 다음 설명을 추가해야 합니다. 이렇게 하면 CloudFront가 버킷에 로그 파일을 쓸 수 있습니다. CloudFront는 로그 파일을 버킷에 쓸 수 없기 때문에 SSE-KMS와 함께 AWS 관리형 키를 사용할 수 없습니다.

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

표준 로그의 S3 버킷이 [S3 버킷 키](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-key.html)와 함께 SSE-KMS를 사용하는 경우 정책 설명에 `kms:Decrypt` 권한을 추가해야 합니다. 이 경우 전체 정책 설명은 다음과 같습니다.

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

**참고**  
S3 버킷에 대해 SSE-KMS를 사용 설정할 때 고객 관리형 키에 대한 전체 ARN을 지정합니다. 자세한 내용은 Amazon Simple Storage Service 사용 설명서**의 [AWS KMS keys(SSE-KMS)로 서버 측 암호화 지정](https://docs.aws.amazon.com/AmazonS3/latest/userguide/specifying-kms-encryption.html)을 참조하세요.

## 표준 로깅(레거시) 사용
<a name="standard-logs-legacy-enable"></a>

표준 로그를 사용하려면 CloudFront 콘솔 또는 CloudFront API를 사용합니다.

**Contents**
+ [

### 표준 로깅(레거시) 사용(CloudFront 콘솔)
](#standard-logs-legacy-enable-console)
+ [

### 표준 로깅(레거시) 사용(CloudFront API)
](#standard-logs-legacy-enable-api)

### 표준 로깅(레거시) 사용(CloudFront 콘솔)
<a name="standard-logs-legacy-enable-console"></a>

**CloudFront 배포에 대한 표준 로그를 사용하려면 다음과 같이 합니다(콘솔의 경우).**

1. CloudFront 콘솔을 사용하여 [새 배포](distribution-web-creating-console.md)를 만들거나 [기존 배포를 업데이트](HowToUpdateDistribution.md#HowToUpdateDistributionProcedure)합니다.

1. **표준 로깅** 섹션의 **로그 전송**에서 **켜기**를 선택합니다.

1. (선택 사항) **쿠키 로깅**에서 로그에 쿠키를 포함하려면 **켜기**를 선택합니다. 자세한 내용은 [쿠키 로깅](DownloadDistValuesGeneral.md#DownloadDistValuesCookieLogging) 섹션을 참조하세요.
**작은 정보**  
쿠키 로깅은 배포의 *모든 *표준 로그에 적용되는 전역 설정입니다. 별도의 전송 대상에서 이 설정을 재정의할 수 없습니다.

1. **전송 대상** 섹션에서 **Amazon S3(레거시)**를 지정합니다.

1. Amazon S3 버킷을 지정합니다. 버킷이 아직 없는 경우 **생성**을 선택하거나 설명서를 보고 [버킷을 만들](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) 수 있습니다.

1. (선택 사항) **로그 접두사**에서, CloudFront에서 이 배포에 대한 액세스 로그 파일 이름에 접두사로 지정하려는 문자열(해당하는 경우)을 지정합니다(예: `exampleprefix/`). 후행 슬래시(/)는 선택 사항이지만 로그 파일을 쉽게 검색할 수 있도록 넣는 것이 좋습니다. 자세한 내용은 [로그 접두사](DownloadDistValuesGeneral.md#DownloadDistValuesLogPrefix) 섹션을 참조하세요.

1. 배포를 업데이트하거나 만드는 단계를 완료합니다.

1. **로그** 페이지에서 배포 옆의 표준 로그 상태가 **활성화됨**인지 확인합니다.

   표준 로깅 전송 및 로그 필드에 대한 자세한 내용은 [표준 로깅 참조](standard-logs-reference.md) 섹션을 참조하시기 바랍니다.

### 표준 로깅(레거시) 사용(CloudFront API)
<a name="standard-logs-legacy-enable-api"></a>

CloudFront API를 사용하여 배포에 대한 표준 로그를 사용 설정할 수도 있습니다.

**배포에 대한 표준 로그를 사용하려면 다음과 같이 합니다(CloudFront API의 경우).**
+ [CreateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html) 또는 [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html) API 작업을 사용하고 [LoggingConfig](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_LoggingConfig.html) 객체를 구성합니다.

## 표준 로깅 설정 편집
<a name="ChangeSettings"></a>

[CloudFront 콘솔](https://console.aws.amazon.com/cloudfront/v4/home) 또는 CloudFront API를 사용하여 로깅을 활성화/비활성화하거나, 로그가 저장되는 Amazon S3 버킷을 변경하고 로그 파일의 접두사를 변경할 수 있습니다. 로깅 설정에 대한 변경 내용은 12시간 내에 적용됩니다.

자세한 정보는 다음 주제를 참조하십시오.
+ CloudFront 콘솔을 사용하여 배포를 업데이트하려면 [배포 업데이트](HowToUpdateDistribution.md) 섹션을 참조하세요.
+ CloudFront API를 사용하여 배포를 업데이트하려면 *Amazon CloudFront API 참조*의 [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html)을 참조하세요.

## Amazon S3로 로그 전송
<a name="standard-logs-in-s3"></a>

Amazon S3로 로그를 전송하면 로그가 다음 형식으로 표시됩니다.

### 파일 이름 형식
<a name="AccessLogsFileNaming"></a>

CloudFront에서 Amazon S3 버킷에 저장하는 각 로그 파일의 이름에는 다음 파일 이름 형식이 사용됩니다.

`<optional prefix>/<distribution ID>.YYYY-MM-DD-HH.unique-ID.gz`

날짜 및 시간이 협정 세계시(UTC)로 표시됩니다.

예를 들어 접두사로 `example-prefix`를 사용하고 배포 ID가 `EMLARXS9EXAMPLE`이면 파일 이름은 다음과 같습니다.

`example-prefix/EMLARXS9EXAMPLE.2019-11-14-20.RT4KCN4SGK9.gz`

배포에 대한 로깅을 활성화할 경우 파일 이름에 접두사(선택 사항)를 지정하여 배포와 연결되는 로그 파일을 추적할 수 있습니다. 로그 파일 접두사의 값을 포함하고 접두사가 슬래시(`/`)로 끝나지 않으면 CloudFront에서 슬래시를 자동으로 추가합니다. 접두사가 슬래시로 끝나면 CloudFront에서 슬래시를 추가하지 않습니다.

파일 이름의 끝에 붙은 `.gz`는 CloudFront에서 로그 파일이 gzip으로 압축되었음을 나타냅니다.

## 표준 로그 파일 형식
<a name="LogFileFormat"></a>

로그 파일의 각 항목은 단일 최종 사용자 요청에 대한 세부 정보를 제공합니다. 이러한 로그 파일은 다음과 같은 특성을 갖습니다.
+ [W3C 확장 로그 파일 형식](https://www.w3.org/TR/WD-logfile.html)을 사용합니다.
+ 탭으로 구분된 값을 포함합니다.
+ 레코드를 포함합니다. 이 때 레코드가 시간 순서대로 나열되어 있지 않을 수도 있습니다.
+ 두 헤더 행(파일 형식 버전이 표시된 행과 각 레코드에 포함된 W3C 필드가 나열된 행)을 포함합니다.
+ 필드 값에서 공백 및 다른 특정 문자에 상응하는 URL 인코딩 값을 포함합니다.

  상응하는 URL 인코딩 값은 다음과 같은 문자에 사용됩니다.
  + ASCII 문자 코드 0\$132
  + ASCII 문자 코드 127 이상
  + 다음 표의 모든 문자

  URL 인코딩 표준은 [RFC 1738](https://tools.ietf.org/html/rfc1738.html)에 정의되어 있습니다.


|  URL 인코딩 값  |  문자  | 
| --- | --- | 
|  %3C  |  <  | 
|  %3E  |  >  | 
|  %22  |  "  | 
|  %23  |  \$1  | 
|  %25  |  %  | 
|  %7B  |  \$1  | 
|  %7D  |  \$1  | 
|  %7C  |  \$1  | 
|  %5C  |  \$1  | 
|  %5E  |  ^  | 
|  %7E  |  \$1  | 
|  %5B  |  [  | 
|  %5D  |  ]  | 
|  %60  |  `  | 
|  %27  |  '  | 
|  %20  |  공백  | 

## 로그 파일 삭제
<a name="DeletingLogFiles"></a>

CloudFront는 Amazon S3 버킷에서 로그 파일을 자동으로 삭제하지 않습니다. Amazon S3 버킷에서 로그 파일을 삭제하는 방법에 대한 자세한 내용은 *Amazon Simple Storage Service 콘솔 사용 설명서*의 [객체 삭제](https://docs.aws.amazon.com/AmazonS3/latest/userguide/DeletingObjects.html)를 참조하시기 바랍니다.

## 가격 책정
<a name="AccessLogsCharges"></a>

표준 로깅은 CloudFront의 선택적 기능입니다. CloudFront는 표준 로그 사용에 대한 요금을 부과하지 않습니다. 하지만 Amazon S3에 파일을 저장하고 액세스하는 데 일반적인 Amazon S3 요금이 부과됩니다. 사용자는 언제든지 이를 삭제할 수 있습니다.

Amazon S3 요금에 대한 자세한 내용은 [Amazon S3 요금](https://aws.amazon.com/s3/pricing/)을 참조하세요.

CloudFront 요금에 대한 자세한 내용은 [CloudFront 요금](https://aws.amazon.com/cloudfront/pricing/)을 참조하세요.

# 표준 로깅 참조
<a name="standard-logs-reference"></a>

다음 섹션은 표준 로깅(v2)과 표준 로깅(레거시) 모두에 적용됩니다.

**Topics**
+ [

## 로그 파일 전송 타이밍
](#access-logs-timing)
+ [

## 요청 URL 또는 헤더가 최대 크기를 초과했을 때 요청이 기록되는 방법
](#access-logs-request-URL-size)
+ [

## 로그 파일 필드
](#BasicDistributionFileFormat)
+ [

## 로그 분석
](#access-logs-analyzing)

## 로그 파일 전송 타이밍
<a name="access-logs-timing"></a>

CloudFront는 1시간 동안 여러 번 배포에 대한 표준 로그를 전송합니다. 일반적으로 로그 파일에는 지정된 시간 동안 CloudFront에서 수신한 요청에 대한 정보가 들어 있습니다. CloudFront는 일반적으로 로그에 표시된 이벤트가 발생하고 한 시간 이내에 해당 기간 동안의 로그 파일을 대상으로 전송합니다. 하지만 한 기간에 대한 일부 또는 전체 로그 파일 항목이 때때로 최대 24시간까지 지연되기도 합니다. 로그 항목이 지연되는 경우 CloudFront는 해당 항목을 로그 파일에 저장하며 파일 이름에는 파일이 전송된 날짜 및 시간이 아니라 요청이 *발생한* 기간의 날짜 및 시간이 포함됩니다.

CloudFront는 로그 파일을 생성할 때 로그 파일에 포함되는 기간 중에 객체에 대한 요청을 받은 모든 엣지 로케이션의 배포 관련 정보를 통합합니다.

CloudFront는 CloudFront에서 배포와 연결된 객체에 대해 받는 요청 수에 따라 한 기간 동안 두 개 이상의 파일을 저장할 수 있습니다.

CloudFront는 로깅을 활성화하고 약 4시간이 지나면 액세스 로그들을 안정적으로 전송하기 시작합니다. 그 전에는 일부 액세스 로그들을 가져올 수 있습니다.

**참고**  
해당 기간 동안 객체를 요청하는 사용자가 없으면 해당 기간 동안 아무런 로그 파일도 수신되지 않습니다.

## 요청 URL 또는 헤더가 최대 크기를 초과했을 때 요청이 기록되는 방법
<a name="access-logs-request-URL-size"></a>

쿠키를 포함하여 모든 요청 헤더의 총 크기가 20KB를 초과하거나 URL이 8192바이트를 초과하면 CloudFront가 요청을 완전히 구문 분석할 수 없고 요청을 기록할 수 없습니다. 요청이 기록되지 않으므로 로그 파일에 반환된 HTTP 오류 상태 코드가 표시되지 않습니다.

요청 본문이 최대 크기를 초과하면 HTTP 오류 상태 코드를 포함하여 요청이 기록됩니다.

## 로그 파일 필드
<a name="BasicDistributionFileFormat"></a>

배포에 대한 로그 파일에는 33개의 필드가 포함되어 있습니다. 다음 목록에는 각 필드 이름이 해당 필드의 정보에 대한 설명과 함께 순서대로 포함되어 있습니다.

1. **`date`**

   이벤트가 발생한 날짜가 `YYYY-MM-DD` 형식으로 표시됩니다. 예를 들어 `2019-06-30`입니다. 날짜 및 시간이 협정 세계시(UTC)로 표시됩니다. WebSocket 연결의 경우, 연결이 종료된 날짜가 됩니다.

1. **`time`**

   CloudFront 서버에서 요청 응답을 완료한 시간(UTC)입니다(예: `01:42:39`). WebSocket 연결의 경우, 연결이 종료된 시간이 됩니다.

1. **`x-edge-location`**

   요청을 처리한 엣지 로케이션입니다. 각 엣지 로케이션은 3자 코드와 임의로 배정된 번호로 식별됩니다(예: DFW3). 3자 코드는 일반적으로 엣지 로케이션의 지리적 위치 부근 공항을 나타내는 국제 항공 수송 협회(IATA) 공항 코드에 상응합니다. 이러한 약어는 향후에 변경될 수 있습니다.

1. **`sc-bytes`**

   요청에 대한 응답으로 서버가 최종 사용자에게 보낸 총 바이트 수(헤더 포함)입니다. WebSocket 및 gRPC 연결의 경우, 연결을 통해 서버에서 클라이언트로 전송된 총 바이트 수입니다.

1. **`c-ip`**

   요청을 한 최종 사용자의 IP 주소(예: `192.0.2.183` 또는 `2001:0db8:85a3::8a2e:0370:7334`)입니다. 최종 사용자가 HTTP 프록시 또는 로드 밸런서를 사용하여 요청을 전송하는 경우, 해당 필드 값은 프록시 또는 로드 밸런서의 IP 주소입니다. `x-forwarded-for` 필드도 참조하십시오.

1. **`cs-method`**

   최종 사용자로부터 수신된 HTTP 요청 메서드입니다.

1. **`cs(Host)`**

   CloudFront 배포의 도메인 이름(예: d111111abcdef8.cloudfront.net)입니다.

1. **`cs-uri-stem`**

   경로 및 객체를 식별하는 요청 URL의 일부(예: `/images/cat.jpg`)입니다. URL과 쿼리 문자열의 물음표(?)는 로그에 포함되지 않습니다.

1. **`sc-status`**

   다음 값 중 하나를 포함합니다.
   + 서버 응답의 HTTP 상태 코드(예: `200`)입니다.
   + `000`(서버가 요청에 응답하기 전에 최종 사용자가 연결을 종료했음을 나타냄) 서버가 응답을 전송하기 시작한 후 최종 사용자가 연결을 종료하는 경우, 이 필드에는 서버가 전송하기 시작하는 응답의 HTTP 상태 코드가 포함됩니다.

1. **`cs(Referer)`**

   요청의 `Referer` 헤더 값입니다. 다음은 요청을 시작한 도메인 이름입니다. 일반적인 참조자에는 검색 엔진, 객체에 직접 연결하는 기타 웹 사이트 및 자체 웹 사이트가 포함됩니다.

1. **`cs(User-Agent)`**

   요청의 `User-Agent` 헤더 값입니다. `User-Agent` 헤더는 요청을 제출한 디바이스 유형 및 브라우저 등의 요청 소스를 식별하고 검색 엔진에서 요청이 온 경우에는 어느 검색 엔진인지 식별합니다.

1. **`cs-uri-query`**

   요청 URL의 쿼리 문자열 부문(있는 경우)입니다.

   URL에 쿼리 문자열이 포함되지 않은 경우 이 필드의 값은 하이픈(-)입니다. 자세한 내용은 [쿼리 문자열 파라미터 기반의 콘텐츠 캐싱](QueryStringParameters.md) 섹션을 참조하세요.

1. **`cs(Cookie)`**

   이름-값 페어 및 관련 속성을 포함한 요청의 `Cookie` 헤더입니다.

   쿠키 로깅을 활성화하는 경우 CloudFront는 오리진에 전달하도록 선택한 쿠키와 관계없이 모든 요청의 쿠키를 기록합니다. 요청에 쿠키 헤더가 포함되지 않은 경우 이 필드의 값은 하이픈(-)입니다. 쿠키에 대한 자세한 내용은 [쿠키 기반의 콘텐츠 캐싱](Cookies.md) 단원을 참조하십시오.

1. **`x-edge-result-type`**

   마지막 바이트가 서버를 떠난 후 서버가 응답을 분류한 방식입니다. 경우에 따라 서버가 응답을 전송할 준비가 된 시간과 가 응답 전송을 완료한 시간 사이에 결과 유형이 변경될 수 있습니다. `x-edge-response-result-type` 필드도 참조하십시오.

   예를 들어 HTTP 스트리밍에서 서버가 캐시 스트림의 한 세그먼트를 찾는다고 가정해 보십시오. 이 시나리오에서 이 필드의 값은 보통 `Hit`입니다. 그러나 서버가 전체 세그먼트를 전달하기 전에 최종 사용자가 연결을 종료하면 최종 결과 유형(및 이 필드 값)은 `Error`가 됩니다.

   콘텐츠가 캐시 가능하지 않고 오리진으로 직접 프록시 처리되므로 WebSocket 및 gRPC 연결에서 이 필드의 값이 `Miss`가 됩니다.

   가능한 값은 다음과 같습니다.
   + `Hit` - 서버가 캐시에서 최종 사용자에게 객체를 제공했습니다.
   + `RefreshHit` - 서버가 캐시에서 객체를 찾았지만 객체가 만료되었기 때문에 서버가 오리진에 접속하여 캐시에 최신 버전의 객체가 있는지 확인했습니다.
   + `Miss` - 캐시의 객체로는 요청을 충족할 수 없어서 서버가 요청을 오리진으로 전달했으며 결과가 최종 사용자에게 반환되었습니다.
   + `LimitExceeded` - CloudFront 할당량(이전에는 제한이라고 함)이 초과되어 요청이 거부되었습니다.
   + `CapacityExceeded` - 객체 제공을 요청하는 시점에 용량이 충분하지 않아 서버에서 HTTP 503 상태 코드가 반환되었습니다.
   + `Error` - 일반적으로 이는 요청으로 인해 클라이언트 오류(`sc-status` 필드 값이 `4xx` 범위에 있음) 또는 서버 오류(`sc-status` 필드 값이 `5xx` 범위에 있음)가 발생했음을 의미합니다. `sc-status` 필드의 값이 `200`인 경우 또는 이 필드의 값이 `Error`이고 `x-edge-response-result-type` 필드의 값이 `Error`가 아닌 경우, HTTP 요청이 성공했지만 모든 바이트를 수신하기 전에 클라이언트의 연결이 끊어졌음을 의미합니다.
   + `Redirect` - 서버는 배포 설정에 따라 최종 사용자를 HTTP에서 HTTPS로 리디렉션했습니다.
   + `LambdaExecutionError` - 잘못된 연결, 함수 시간 초과, AWS 종속성 문제 또는 기타 일반 가용성 문제로 인해 배포와 연결된 Lambda@Edge 함수가 완료되지 않았습니다.

1. **`x-edge-request-id`**

   요청을 고유하게 식별하는 불투명 문자열입니다. CloudFront는 `x-amz-cf-id` 응답 헤더에도 이 문자열을 전송합니다.

1. **`x-host-header`**

   최종 사용자가 이 요청에 대한 `Host` 헤더에 포함한 값입니다. 객체 URL에 CloudFront 도메인 이름(예: d111111abcdef8.cloudfront.net)을 사용하는 경우, 이 필드에는 도메인 이름이 포함됩니다. 객체 URL(예: www.example.com)에 대체 도메인 이름(CNAME)을 사용하는 경우, 이 필드에 대체 도메인 이름이 포함됩니다.

   대체 도메인 이름을 사용하는 경우 배포와 연결된 도메인 이름은 필드7에 있는 `cs(Host)` 섹션을 참조하세요.

1. **`cs-protocol`**

   최종 사용자 요청 프로토콜(`http`, `https`, `grpcs`, `ws` 또는 `wss`)입니다.

1. **`cs-bytes`**

   최종 사용자가 요청에 포함한 데이터의 바이트 수(헤더 포함)입니다. WebSocket 및 gRPC 연결의 경우, 연결에서 클라이언트로부터 서버로 전송된 총 바이트 수입니다.

1. **`time-taken`**

   서버가 최종 사용자 요청을 수신한 시점부터 서버에서 출력 대기열에 대한 응답의 최종 바이트를 쓰는 시점 간의 시간 차이(1/1,000초 단위, 예: 0.082)로, 서버에서 측정됩니다. 최종 사용자 관점에서 보면 전체 응답을 가져오는 데 걸리는 총 시간은 네트워크 지연 시간과 TCP 버퍼링으로 인해 이 값보다 큽니다.

1. **`x-forwarded-for`**

   최종 사용자가 HTTP 프록시 또는 로드 밸런서를 사용하여 요청을 전송하는 경우, `c-ip` 필드의 값은 프록시 또는 로드 밸런서의 IP 주소입니다. 이 경우 이 필드는 요청을 시작한 최종 사용자의 IP 주소입니다. 이 필드에는 여러 개의 쉼표로 구분된 IP 주소가 포함될 수 있습니다. 각 IP 주소는 IPv4 주소(예:`192.0.2.183`) 또는 IPv6 주소(예:`2001:0db8:85a3::8a2e:0370:7334`)일 수 있습니다.

   최종 사용자가 HTTP 프록시 또는 로드 밸런서를 사용하지 않은 경우 이 필드의 값은 하이픈(-)입니다.

1. **`ssl-protocol`**

   요청에 HTTPS가 사용된 경우, 이 필드에는 최종 사용자 및 서버가 요청 및 응답 전송을 위해 협상한 SSL/TLS 프로토콜이 포함됩니다. 가능한 값 목록은 [최종 사용자와 CloudFront 간에 지원되는 프로토콜 및 암호](secure-connections-supported-viewer-protocols-ciphers.md)에서 지원되는 SSL/TLS 프로토콜을 참조하세요.

   필드 17의 `cs-protocol`이 `http`인 경우 이 필드의 값은 하이픈(-)입니다.

1. **`ssl-cipher`**

   요청에 HTTPS가 사용되는 경우, 이 필드에는 최종 사용자 및 서버가 요청 및 응답 암호화를 위해 협상한 SSL/TLS 암호가 포함됩니다. 가능한 값 목록은 [최종 사용자와 CloudFront 간에 지원되는 프로토콜 및 암호](secure-connections-supported-viewer-protocols-ciphers.md)에서 지원되는 SSL/TLS 암호를 참조하세요.

   필드 17의 `cs-protocol`이 `http`인 경우 이 필드의 값은 하이픈(-)입니다.

1. **`x-edge-response-result-type`**

   최종 사용자에게 응답을 반환하기 직전에 서버에서 응답을 분류한 방식입니다. `x-edge-result-type` 필드도 참조하십시오. 가능한 값은 다음과 같습니다.
   + `Hit` - 서버가 캐시에서 최종 사용자에게 객체를 제공했습니다.
   + `RefreshHit` - 서버가 캐시에서 객체를 찾았지만 객체가 만료되었기 때문에 서버가 오리진에 접속하여 캐시에 최신 버전의 객체가 있는지 확인했습니다.
   + `Miss` - 캐시의 객체로는 요청을 충족할 수 없어서 서버가 요청을 오리진 서버로 전달했으며 결과가 최종 사용자에게 반환되었습니다.
   + `LimitExceeded` - CloudFront 할당량(이전에는 제한이라고 함)이 초과되어 요청이 거부되었습니다.
   + `CapacityExceeded` - 객체 제공을 요청하는 시점에 엣지 로케이션의 용량이 충분하지 않아 서버에서 503 오류가 반환되었습니다.
   + `Error` - 일반적으로 이는 요청으로 인해 클라이언트 오류(`sc-status` 필드 값이 `4xx` 범위에 있음) 또는 서버 오류(`sc-status` 필드 값이 `5xx` 범위에 있음)가 발생했음을 의미합니다.

     `x-edge-result-type` 필드의 값이 `Error`이고 이 필드의 값이 `Error`가 아닌 경우 다운로드를 완료하기 전에 클라이언트 연결이 끊어졌습니다.
   + `Redirect` - 서버는 배포 설정에 따라 최종 사용자를 HTTP에서 HTTPS로 리디렉션했습니다.
   + `LambdaExecutionError` - 잘못된 연결, 함수 시간 초과, AWS 종속성 문제 또는 기타 일반 가용성 문제로 인해 배포와 연결된 Lambda@Edge 함수가 완료되지 않았습니다.

1. **`cs-protocol-version`**

   최종 사용자가 요청에서 지정한 HTTP 버전입니다. 가능한 값은 `HTTP/0.9`, `HTTP/1.0`, `HTTP/1.1`, `HTTP/2.0` 및 `HTTP/3.0`입니다.

1. **`fle-status`**

   배포에 대해 [필드 레벨 암호화](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/field-level-encryption.html)가 구성될 때, 요청 본문이 처리되었는지를 나타내는 코드가 이 필드에 포함됩니다. 서버가 성공적으로 요청 본문을 처리하고, 지정된 필드 값을 암호화하고, 요청을 오리진으로 전달할 때 이 필드 값은 `Processed`입니다. 이 경우 `x-edge-result-type` 값은 계속해서 클라이언트 측 또는 서버 측 오류를 나타낼 수 있습니다.

   이 필드에 가능한 값은 다음과 같습니다.
   + `ForwardedByContentType` - 어떠한 콘텐츠 유형도 구성되지 않았기 때문에 서버가 요청을 구문 분석 또는 암호화 없이 오리진에 전달했습니다.
   + `ForwardedByQueryArgs` - 요청에 필드 레벨 암호화 구성에 없는 쿼리 인수가 포함되기 때문에 서버가 요청을 구문 분석 또는 암호화 없이 오리진에 전달했습니다.
   + `ForwardedDueToNoProfile` - 필드 레벨 암호화 구성에 어떠한 프로필도 지정되지 않았기 때문에 서버가 요청을 구문 분석 또는 암호화 없이 오리진에 전달했습니다.
   + `MalformedContentTypeClientError` - `Content-Type` 헤더 값이 유효하지 않은 형식이기 때문에 서버가 요청을 거부하고 최종 사용자에게 HTTP 400 상태 코드를 반환했습니다.
   + `MalformedInputClientError` - 요청 본문이 유효하지 않은 형식이기 때문에 서버가 요청을 거부하고 최종 사용자에게 HTTP 400 상태 코드를 반환했습니다.
   + `MalformedQueryArgsClientError` - 쿼리 인수가 비어 있거나 유효하지 않은 형식이기 때문에 서버가 요청을 거부하고 최종 사용자에게 HTTP 400 상태 코드를 반환했습니다.
   + `RejectedByContentType` - 필드 레벨 암호화 구성에 어떠한 콘텐츠 유형도 지정되지 않았기 때문에 서버가 요청을 거부하고 최종 사용자에게 HTTP 400 상태 코드를 반환했습니다.
   + `RejectedByQueryArgs` - 필드 레벨 암호화 구성에 어떠한 쿼리 인수도 지정되지 않았기 때문에 서버가 요청을 거부하고 최종 사용자에게 HTTP 400 상태 코드를 반환했습니다.
   + `ServerError` - 오리진 서버가 오류를 반환했습니다.

   요청이 필드 레벨 암호화 할당량(이전에는 제한이라고 함) 을 초과하면 이 필드에 다음 오류 코드 중 하나가 포함되고 서버는 HTTP 상태 코드 400을 최종 사용자에게 반환합니다. 필드 레벨 암호화의 현재 할당량에 대한 목록은 [필드 레벨 암호화에 대한 할당량](cloudfront-limits.md#limits-field-level-encryption) 단원을 참조하세요.
   + `FieldLengthLimitClientError` - 암호화되도록 구성된 필드가 허용되는 최대 길이를 초과했습니다.
   + `FieldNumberLimitClientError` - 배포가 암호화하도록 구성된 요청에 허용된 필드 수보다 많은 필드가 있습니다.
   + `RequestLengthLimitClientError` - 필드 레벨 암호화 구성 시 요청 본문의 길이가 허용되는 최대 길이를 초과했습니다.

   배포에 대해 필드 레벨 암호화가 구성되지 않은 경우 이 필드의 값은 하이픈(-)입니다.

1. **`fle-encrypted-fields`**

   서버가 암호화하여 오리진에 전달한 [필드 레벨 암호화](field-level-encryption.md)의 수입니다. CloudFront 서버는 데이터를 암호화하면서 처리된 요청을 오리진으로 스트리밍합니다. 따라서 `fle-status` 값이 오류인 경우에도 이 필드에 값이 있을 수 있습니다.

   배포에 대해 필드 레벨 암호화가 구성되지 않은 경우 이 필드의 값은 하이픈(-)입니다.

1. **`c-port`**

   최종 사용자가 보낸 요청의 포트 번호입니다.

1. **`time-to-first-byte`**

   요청을 수신한 후 응답의 첫 바이트를 쓸 때까지의 시간(초)이며 서버에서 측정합니다.

1. **`x-edge-detailed-result-type`**

   이 필드에는 `x-edge-result-type` 필드와 동일한 값이 포함됩니다. 단, 다음과 같은 경우는 예외입니다.
   + 객체가 [Origin Shield](origin-shield.md) 계층에서 최종 사용자에게 제공된 경우 이 필드에 `OriginShieldHit`가 포함합니다.
   + 객체가 CloudFront 캐시에 없고 [오리진 요청 Lambda @Edge 함수](lambda-at-the-edge.md)에 의해 응답이 생성된 경우 이 필드에는 `MissGeneratedResponse`가 포함됩니다.
   + `x-edge-result-type` 필드의 값이 `Error`인 경우 이 필드에는 오류에 대한 추가 정보를 제공하는 다음 값 중 하나가 포함됩니다.
     + `AbortedOrigin` - 서버에 오리진 관련된 문제가 발생했습니다.
     + `ClientCommError` - 서버와 최종 사용자 간의 통신 문제로 인해 최종 사용자에게 대한 응답이 중단되었습니다.
     + `ClientGeoBlocked` - 최종 사용자의 지리적 위치에서 요청을 거부하도록 배포가 구성됩니다.
     + `ClientHungUpRequest` - 요청을 보내는 동안 최종 사용자가 중간에 중지했습니다.
     + `Error` - 오류 유형이 기타 모든 카테고리에 적합하지 않아 오류가 발생했습니다. 이러한 오류 유형은 서버가 캐시에서 오류 응답을 제공할 때 발생할 수 있습니다.
     + `InvalidRequest` - 서버가 최종 사용자로부터 잘못된 요청을 받았습니다.
     + `InvalidRequestBlocked` - 요청한 리소스에 대한 액세스가 차단됩니다.
     + `InvalidRequestCertificate` - 배포가 HTTPS 연결이 설정된 SSL/TLS 인증서와 일치하지 않습니다.
     + `InvalidRequestHeader` - 요청에 잘못된 헤더가 포함되어 있습니다.
     + `InvalidRequestMethod` - 사용되었던 HTTP 요청 메서드를 처리하도록 배포가 구성되지 않았습니다. 이러한 문제는 배포에서 캐시 가능한 요청만 지원하는 경우 발생할 수 있습니다.
     + `OriginCommError` - 오리진에 연결하거나 오리진에서 데이터를 읽는 동안 요청 시간이 초과되었습니다.
     + `OriginConnectError` - 서버를 오리진에 연결할 수 없습니다.
     + `OriginContentRangeLengthError` - 오리진 응답의 `Content-Length` 헤더가 `Content-Range` 헤더의 길이와 일치하지 않습니다.
     + `OriginDnsError` - 서버에서 오리진의 도메인 이름을 확인할 수 없습니다.
     + `OriginError` - 오리진에서 잘못된 응답을 반환했습니다.
     + `OriginHeaderTooBigError` - 오리진에서 반환한 헤더가 너무 커서 엣지 서버가 처리할 수 없습니다.
     + `OriginInvalidResponseError` - 오리진에서 잘못된 응답을 반환했습니다.
     + `OriginReadError` - 오리진에서 서버를 읽을 수 없습니다.
     + `OriginWriteError` - 오리진에 서버를 쓸 수 없습니다.
     + `OriginZeroSizeObjectError` - 오리진에서 전송된 크기가 0인 객체로 인해 오류가 발생했습니다.
     + `SlowReaderOriginError` - 최종 사용자가 오리진 오류를 일으킨 메시지를 느리게 읽었습니다.

1. **`sc-content-type`**

   응답의 HTTP `Content-Type` 헤더 값입니다.

1. **`sc-content-len`**

   응답의 HTTP `Content-Length` 헤더 값입니다.

1. **`sc-range-start`**

   응답에 HTTP `Content-Range` 헤더가 포함되어 있으면 이 필드에 범위 시작 값이 포함됩니다.

1. **`sc-range-end`**

   응답에 HTTP `Content-Range` 헤더가 포함되어 있으면 이 필드에 범위 끝 값이 포함됩니다.

1. **`distribution-tenant-id`**

   배포 테넌트의 ID입니다.

1. **`connection-id`**

   TLS 연결의 고유 식별자입니다.

   이 필드에 대한 정보를 가져오려면 먼저 배포에 대해 mTLS를 활성화해야 합니다. 자세한 내용은 [CloudFront에 대한 상호 TLS 인증(뷰어 mTLS)CloudFront에 대한 오리진 상호 TLS](mtls-authentication.md) 섹션을 참조하세요.

   

다음은 배포 시 로그 파일 예제입니다.

```
#Version: 1.0
#Fields: date time x-edge-location sc-bytes c-ip cs-method cs(Host) cs-uri-stem sc-status cs(Referer) cs(User-Agent) cs-uri-query cs(Cookie) x-edge-result-type x-edge-request-id x-host-header cs-protocol cs-bytes time-taken x-forwarded-for ssl-protocol ssl-cipher x-edge-response-result-type cs-protocol-version fle-status fle-encrypted-fields c-port time-to-first-byte x-edge-detailed-result-type sc-content-type sc-content-len sc-range-start sc-range-end
2019-12-04	21:02:31	LAX1	392	192.0.2.100	GET	d111111abcdef8.cloudfront.net	/index.html	200	-	Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/78.0.3904.108%20Safari/537.36	-	-	Hit	SOX4xwn4XV6Q4rgb7XiVGOHms_BGlTAC4KyHmureZmBNrjGdRLiNIQ==	d111111abcdef8.cloudfront.net	https	23	0.001	-	TLSv1.2	ECDHE-RSA-AES128-GCM-SHA256	Hit	HTTP/2.0	-	-	11040	0.001	Hit	text/html	78	-	-
2019-12-04	21:02:31	LAX1	392	192.0.2.100	GET	d111111abcdef8.cloudfront.net	/index.html	200	-	Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/78.0.3904.108%20Safari/537.36	-	-	Hit	k6WGMNkEzR5BEM_SaF47gjtX9zBDO2m349OY2an0QPEaUum1ZOLrow==	d111111abcdef8.cloudfront.net	https	23	0.000	-	TLSv1.2	ECDHE-RSA-AES128-GCM-SHA256	Hit	HTTP/2.0	-	-	11040	0.000	Hit	text/html	78	-	-
2019-12-04	21:02:31	LAX1	392	192.0.2.100	GET	d111111abcdef8.cloudfront.net	/index.html	200	-	Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/78.0.3904.108%20Safari/537.36	-	-	Hit	f37nTMVvnKvV2ZSvEsivup_c2kZ7VXzYdjC-GUQZ5qNs-89BlWazbw==	d111111abcdef8.cloudfront.net	https	23	0.001	-	TLSv1.2	ECDHE-RSA-AES128-GCM-SHA256	Hit	HTTP/2.0	-	-	11040	0.001	Hit	text/html	78	-	-	
2019-12-13	22:36:27	SEA19-C1	900	192.0.2.200	GET	d111111abcdef8.cloudfront.net	/favicon.ico	502	http://www.example.com/	Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/78.0.3904.108%20Safari/537.36	-	-	Error	1pkpNfBQ39sYMnjjUQjmH2w1wdJnbHYTbag21o_3OfcQgPzdL2RSSQ==	www.example.com	http	675	0.102	-	-	-	Error	HTTP/1.1	-	-	25260	0.102	OriginDnsError	text/html	507	-	-
2019-12-13	22:36:26	SEA19-C1	900	192.0.2.200	GET	d111111abcdef8.cloudfront.net	/	502	-	Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/78.0.3904.108%20Safari/537.36	-	-	Error	3AqrZGCnF_g0-5KOvfA7c9XLcf4YGvMFSeFdIetR1N_2y8jSis8Zxg==	www.example.com	http	735	0.107	-	-	-	Error	HTTP/1.1	-	-	3802	0.107	OriginDnsError	text/html	507	-	-
2019-12-13	22:37:02	SEA19-C2	900	192.0.2.200	GET	d111111abcdef8.cloudfront.net	/	502	-	curl/7.55.1	-	-	Error	kBkDzGnceVtWHqSCqBUqtA_cEs2T3tFUBbnBNkB9El_uVRhHgcZfcw==	www.example.com	http	387	0.103	-	-	-	Error	HTTP/1.1	-	-	12644	0.103	OriginDnsError	text/html	507	-	-
```

## 로그 분석
<a name="access-logs-analyzing"></a>

시간당 액세스 로그를 여러 개 받을 수 있기 때문에, 지정된 기간에 받는 모든 로그 파일을 한 파일로 결합하는 것이 좋습니다. 그러고 나면 이 기간의 데이터를 보다 정확하고 완전하게 분석할 수 있습니다.

액세스 로그를 분석하는 한 가지 방법은 [Amazon Athena](https://aws.amazon.com/athena/)를 사용하는 것입니다. Athena는 CloudFront를 비롯하여 AWS 서비스에 대한 데이터를 분석할 수 있는 대화형 쿼리 서비스입니다. 자세한 내용은 *Amazon Athena 사용 설명서*의 [Amazon CloudFront 로그 쿼리](https://docs.aws.amazon.com/athena/latest/ug/cloudfront-logs.html)를 참조하세요.

또한 다음 AWS 블로그 게시물에서는 액세스 로그를 분석하는 몇 가지 방법을 설명합니다.
+ [ Amazon CloudFront Request Logging](https://aws.amazon.com/blogs/aws/amazon-cloudfront-request-logging/)(HTTP를 통해 전송되는 콘텐츠의 경우)
+ [ Enhanced CloudFront Logs, Now With Query Strings](https://aws.amazon.com/blogs/aws/enhanced-cloudfront-logs-now-with-query-strings/)