표준 로그(액세스 로그) 구성 및 사용 - Amazon CloudFront

표준 로그(액세스 로그) 구성 및 사용

로그 파일을 생성하도록 CloudFront를 구성할 수 있습니다. 이러한 로그 파일에는 CloudFront에서 수신하는 모든 사용자 요청에 대한 세부 정보가 포함됩니다. 이러한 로그는 표준 로그라고 하며 액세스 로그라고도 합니다. 표준 로그를 활성화하면 CloudFront에서 파일을 저장할 Amazon S3 버킷도 지정할 수 있습니다.

배포를 만들거나 업데이트할 때 표준 로그를 활성화할 수 있습니다. 자세한 내용은 배포 설정 참조 단원을 참조하세요.

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

표준 로깅 작동 방식

다음 다이어그램은 CloudFront에서 객체 요청에 대한 정보를 어떻게 기록하는지 보여 줍니다.

액세스 로그 기본 흐름

이전 다이어그램에 설명된 객체 요청에 대한 CloudFront 로그 정보가 아래에 나와 있습니다.

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

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

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

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

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

로그 파일의 각 항목은 단일 요청에 대한 세부 정보를 제공합니다. 로그 파일 형식에 대한 자세한 내용은 표준 로그 파일 형식 단원을 참조하십시오.

참고

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

표준 로그용 Amazon S3 버킷 선택

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

중요

버킷 소유자로 설정된 S3 객체 소유권이 적용된 Amazon S3 버킷을 선택하지 마세요. 이 설정은 버킷과 그 안의 객체에 대한 ACL을 비활성화하여 CloudFront에서 버킷으로 로그 파일을 전송하지 못하도록 합니다.

중요

CloudFront는 이러한 리전의 버킷에 표준 로그를 전달하지 않으므로 다음 리전에서 Amazon S3 버킷을 선택하지 마세요.

  • 아프리카(케이프타운)

  • 아시아 태평양(홍콩)

  • 아시아 태평양(하이데라바드)

  • 아시아 태평양(자카르타)

  • 아시아 태평양(멜버른)

  • 캐나다 서부(캘거리)

  • 유럽(밀라노)

  • 유럽(스페인)

  • 유럽(취리히)

  • 이스라엘(텔아비브)

  • 중동(바레인)

  • 중동(UAE)

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

표준 로깅 구성 및 로그 파일 액세스에 필요한 권한

중요

2023년 4월부터 CloudFront 표준 로그에 사용되는 새 S3 버킷에 대해 S3 액세스 제어 목록(ACL)을 활성화해야 합니다. ACL은 버킷 생성 단계 중에 또는 버킷을 만든 후에 활성화할 수 있습니다.

변경 사항에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서새 S3 버킷에 대한 기본 설정 FAQAWS 뉴스 블로그2023년 4월에 예정된 Amazon S3 보안 변경 사항을 참조하세요.

로그 파일용으로 지정하는 버킷에 대해 AWS 계정에 다음 권한이 있어야 합니다.

  • 버킷의 S3 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의 배포에 대한 로깅을 비활성화한 다음 이를 다시 활성화합니다. 자세한 내용은 배포 설정 참조 단원을 참조하세요.

  • Amazon S3 콘솔의 S3 버킷으로 이동하고 권한을 추가하여 awslogsdelivery에 대한 ACL 권한을 수동으로 추가합니다. awslogsdelivery에 대한 ACL을 추가하려면 계정에 대해 다음과 같이 정식 ID를 입력해야 합니다.

    c4c1ede66af53448b93c283ce9448c4ba468c9432aa01d700d3878632f77d2d0

    S3 버킷에 ACL을 추가하는 방법에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서ACL 버킷 권한을 설정하는 방법을 참조하세요.

각 로그 파일의 ACL

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

로깅 비활성화

로깅을 비활성화하더라도 CloudFront가 버킷이나 로그 파일에 대한 ACL이 자동으로 삭제되지 않습니다. 삭제하려면 사용자가 직접 삭제해야 합니다.

SSE-KMS 버킷에 필요한 키 정책

표준 로그의 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 버킷 키와 함께 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": "*" }

파일 이름 형식

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으로 압축되었음을 나타냅니다.

표준 로그 파일 전송 타이밍

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

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

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

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

참고

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

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

요청 URL 또는 헤더가 최대 크기를 초과했을 때 요청이 기록되는 방법

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

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

표준 로그 분석

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

액세스 로그를 분석하는 한 가지 방법은 Amazon Athena를 사용하는 것입니다. Athena는 CloudFront를 비롯하여 AWS 서비스에 대한 데이터를 분석할 수 있는 대화형 쿼리 서비스입니다. 자세한 내용은 Amazon Athena 사용 설명서Amazon CloudFront 로그 쿼리를 참조하세요.

또한 다음 AWS 블로그 게시물에서는 액세스 로그를 분석하는 몇 가지 방법을 설명합니다.

중요

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

표준 로깅 설정 편집

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

자세한 정보는 다음 주제를 참조하십시오.

  • CloudFront 콘솔을 사용하여 배포를 업데이트하려면 배포 업데이트 섹션을 참조하세요.

  • CloudFront API를 사용하여 배포를 업데이트하려면 Amazon CloudFront API 참조UpdateDistribution을 참조하세요.

Amazon S3 버킷에서 표준 로그 파일 삭제

CloudFront는 Amazon S3 버킷에서 로그 파일을 자동으로 삭제하지 않습니다. Amazon S3 버킷에서 로그 파일 삭제에 대한 자세한 내용은 다음 주제를 참조하세요.

  • Amazon S3 콘솔 사용: Amazon Simple Storage Service 콘솔 사용 설명서객체 삭제

  • REST API 사용: Amazon Simple Storage Service API 참조DeleteObject

표준 로그 파일 형식

로그 파일의 각 항목은 단일 최종 사용자 요청에 대한 세부 정보를 제공합니다. 이러한 로그 파일은 다음과 같은 특성을 갖습니다.

  • W3C 확장 로그 파일 형식을 사용합니다.

  • 탭으로 구분된 값을 포함합니다.

  • 레코드를 포함합니다. 이 때 레코드가 시간 순서대로 나열되어 있지 않을 수도 있습니다.

  • 두 헤더 행(파일 형식 버전이 표시된 행과 각 레코드에 포함된 W3C 필드가 나열된 행)을 포함합니다.

  • 필드 값에서 공백 및 다른 특정 문자에 상응하는 URL 인코딩 값을 포함합니다.

    상응하는 URL 인코딩 값은 다음과 같은 문자에 사용됩니다.

    • ASCII 문자 코드 0~32

    • ASCII 문자 코드 127 이상

    • 다음 표의 모든 문자

    URL 인코딩 표준은 RFC 1738에 정의되어 있습니다.

URL 인코딩 값

문자

%3C

<

%3E

>

%22

"

%23

#

%25

%

%7B

{

%7D

}

%7C

|

%5C

\

%5E

^

%7E

~

%5B

[

%5D

]

%60

`

%27

'

%20

공백

표준 로그 파일 필드

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

  1. date

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

  2. time

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

  3. x-edge-location

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

  4. sc-bytes

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

  5. c-ip

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

  6. cs-method

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

  7. cs(Host)

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

  8. cs-uri-stem

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

  9. sc-status

    다음 값 중 하나를 포함합니다.

    • 서버 응답의 HTTP 상태 코드(예: 200)입니다.

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

  10. cs(Referer)

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

  11. cs(User-Agent)

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

  12. cs-uri-query

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

    URL에 쿼리 문자열이 포함되지 않은 경우 이 필드의 값은 하이픈(-)입니다. 자세한 내용은 쿼리 문자열 파라미터 기반의 콘텐츠 캐싱 단원을 참조하십시오.

  13. cs(Cookie)

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

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

  14. x-edge-result-type

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

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

    콘텐츠가 캐시 가능하지 않고 오리진으로 직접 프록시되므로 WebSocket 연결에서 이 필드의 값이 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로 리디렉션했습니다.

  15. x-edge-request-id

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

  16. x-host-header

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

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

  17. cs-protocol

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

  18. cs-bytes

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

  19. time-taken

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

  20. x-forwarded-for

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

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

  21. ssl-protocol

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

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

  22. ssl-cipher

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

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

  23. 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로 리디렉션했습니다.

  24. cs-protocol-version

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

  25. fle-status

    배포에 대해 필드 레벨 암호화가 구성될 때, 요청 본문이 처리되었는지를 나타내는 코드가 이 필드에 포함됩니다. 서버가 성공적으로 요청 본문을 처리하고, 지정된 필드 값을 암호화하고, 요청을 오리진으로 전달할 때 이 필드 값은 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을 최종 사용자에게 반환합니다. 필드 레벨 암호화의 현재 할당량에 대한 목록은 필드 레벨 암호화에 대한 할당량 단원을 참조하세요.

    • FieldLengthLimitClientError - 암호화되도록 구성된 필드가 허용되는 최대 길이를 초과했습니다.

    • FieldNumberLimitClientError - 배포가 암호화하도록 구성된 요청에 허용된 필드 수보다 많은 필드가 있습니다.

    • RequestLengthLimitClientError - 필드 레벨 암호화 구성 시 요청 본문의 길이가 허용되는 최대 길이를 초과했습니다.

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

  26. fle-encrypted-fields

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

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

  27. c-port

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

  28. time-to-first-byte

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

  29. x-edge-detailed-result-type

    이 필드에는 x-edge-result-type 필드와 동일한 값이 포함됩니다. 단, 다음과 같은 경우는 예외입니다.

    • 객체가 Origin Shield 계층에서 최종 사용자에게 제공된 경우 이 필드에 OriginShieldHit가 포함합니다.

    • 객체가 CloudFront 캐시에 없고 오리진 요청 Lambda @Edge 함수에 의해 응답이 생성된 경우 이 필드에는 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 - 최종 사용자가 오리진 오류를 일으킨 메시지를 느리게 읽었습니다.

  30. sc-content-type

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

  31. sc-content-len

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

  32. sc-range-start

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

  33. sc-range-end

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

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

#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 - -

표준 로그 요금

표준 로깅은 CloudFront의 선택적 기능입니다. 표준 로깅을 활성화하더라도 별도 요금이 부과되지 않습니다. 하지만 Amazon S3에 파일을 저장하고 액세스하는 데는 일반적인 Amazon S3 요금이 부과되며, 사용자는 언제라도 이러한 파일을 삭제할 수 있습니다.

Amazon S3 요금에 대한 자세한 내용은 Amazon S3 요금을 참조하세요.

CloudFront 요금에 대한 자세한 내용은 CloudFront 요금을 참조하세요.