표준 로깅(v2) 구성 - Amazon CloudFront

표준 로깅(v2) 구성

배포를 만들거나 업데이트할 때 표준 로깅을 사용할 수 있습니다. 표준 로깅(v2)에는 다음 기능이 포함됩니다.

Amazon S3를 사용하는 경우 다음의 선택 사항 기능이 제공됩니다.

  • 옵트인 AWS 리전에 로그를 전송합니다.

  • 파티셔닝을 사용하여 로그를 구성합니다.

  • Hive 호환 파일 이름을 사용합니다.

자세한 내용은 Amazon S3로 로그 전송 섹션을 참조하세요.

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

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

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

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

참고
  • 표준 로깅(v2)을 사용 설정해도 표준 로깅(레거시)에 영향을 미치거나 해당 로그가 변경되지 않습니다. 표준 로깅(v2)을 사용하는 것 외에도 배포 시 표준 로깅(레거시)을 계속 사용할 수 있습니다. 자세한 내용은 표준 로깅(레거시) 구성 섹션을 참조하세요.

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

권한

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

각 로그 대상에 필요한 권한을 보려면 Amazon CloudWatch Logs 사용 설명서의 다음 주제 중에서 선택합니다.

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

참고

CloudFront는 액세스 로그를 다른 AWS 계정(크로스 계정)로 전송하는 것을 지원합니다. 크로스 계정 전송을 사용하려면 두 계정(계정 및 수신 계정)에 필수 권한이 부여되어 있어야 합니다. 자세한 내용은 Amazon CloudWatch Logs 사용 설명서에 나와 있는 크로스 계정 전송을 위한 표준 로깅 사용 섹션 또는 Cross-account delivery example을 참조하시기 바랍니다.

표준 로깅 사용

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

표준 로깅 사용(CloudFront 콘솔)

CloudFront 배포 시 표준 로깅을 사용하려면 다음과 같이 하세요(콘솔의 경우).
  1. CloudFront 콘솔을 사용하여 기존 배포를 업데이트합니다.

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

  3. 추가를 선택한 다음 로그를 수신할 서비스를 선택합니다.

    • CloudWatch Logs

    • Firehose

    • Amazon S3

  4. 대상에서 서비스의 리소스를 선택합니다. 리소스를 아직 만들지 않은 경우 생성을 선택하거나 다음 설명서를 통해 확인할 수 있습니다.

    • CloudWatch Logs에서 로그 그룹 이름을 입력합니다.

    • Firehose에 Firehose 전송 스트림을 입력합니다.

    • Amazon S3에서 버킷 이름을 입력합니다.

      작은 정보

      접두사를 지정하려면 버킷 이름 뒤에 접두사를 입력합니다(예: amzn-s3-demo-bucket.s3.amazonaws.com/MyLogPrefix). 접두사를 지정하지 않으면 CloudFront에서 자동으로 접두사를 추가합니다. 자세한 내용은 Amazon S3로 로그 전송 섹션을 참조하세요.

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

    1. 필드 선택에서 대상으로 전송할 로그 필드 이름을 선택합니다. 액세스 로그 필드실시간 로그 필드의 하위 집합을 선택할 수 있습니다.

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

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

    4. 출력 형식에서 원하는 형식을 지정합니다.

      참고

      Parquet를 선택하면 액세스 로그를 Apache Parquet로 변환하는 데 CloudWatch 요금이 발생합니다. 자세한 내용은 Vended Logs section for CloudWatch pricing을 참조하시기 바랍니다.

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

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

  7. 다른 대상을 추가하려면 3~6단계를 반복합니다.

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

  9. (선택 사항) 쿠키 로깅을 사용 설정하려면 관리, 설정을 선택하고 쿠키 로깅을 켠 다음 변경 사항 저장을 선택합니다.

    작은 정보

    쿠키 로깅은 배포의 모든 표준 로깅에 적용되는 전역 설정입니다. 별도의 전송 대상에서 이 설정을 재정의할 수 없습니다.

표준 로깅 전송 및 로그 필드에 대한 자세한 내용은 표준 로깅 참조 섹션을 참조하시기 바랍니다.

표준 로깅 사용(CloudWatch API)

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

Notes
  • 표준 로깅을 사용하기 위해 CloudWatch API를 호출할 때 다른 대상으로 리전 간 전송을 사용하려는 경우에도 미국 동부(버지니아 북부) 리전(us-east-1)을 지정해야 합니다. 예를 들어 유럽(아일랜드) 리전(eu-west-1)의 S3 버킷에 액세스 로그를 보내려면 us-east-1 리전에서 CloudWatch API를 사용합니다.

  • 표준 로깅에 쿠키를 포함하는 추가 옵션이 있습니다. CloudFront API에서 이는 IncludeCookies 파라미터입니다. CloudWatch API를 사용하여 액세스 로깅을 구성하고 쿠키를 포함하도록 지정하는 경우 CloudFront 콘솔 또는 CloudFront API를 사용하여 쿠키를 포함하도록 배포를 업데이트해야 합니다. 그렇지 않으면 CloudFront는 로그 대상으로 쿠키를 전송할 수 없습니다. 자세한 내용은 쿠키 로깅 섹션을 참조하세요.

배포에 대한 표준 로깅을 사용하려면 다음과 같이 합니다(CloudWatch API의 경우).
  1. 배포를 만든 후 Amazon 리소스 이름(ARN)을 가져옵니다.

    CloudFront 콘솔의 배포 페이지에서 ARN을 찾거나 GetDistribution API 작업을 사용할 수 있습니다. 배포 ARN은 arn:aws:cloudfront::123456789012:distribution/d111111abcdef8 형식을 따릅니다.

  2. 다음으로 CloudWatch PutDeliverySource API 작업을 사용하여 배포에 대한 전송 소스를 만듭니다.

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

    2. 배포의 resourceArn을 전달합니다.

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

    4. 예: 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" } }
  3. PutDeliveryDestination API 작업을 사용하여 로그를 저장할 위치를 구성합니다.

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

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

    3. 예: 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 API 작업을 사용하여 대상 계정 AWS Identity and Access Management(IAM) 정책을 할당해야 합니다. IAM 정책은 한 계정에서 다른 계정으로의 전송을 허용합니다.

  4. CreateDelivery API 작업을 사용하여 이전 단계에서 만든 대상에 전송 소스를 연결합니다. 이 API 작업은 전송 소스를 최종 대상과 연결합니다.

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

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

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

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

    5. S3를 사용하는 경우 enableHiveCompatiblePathsuffixPath를 사용할지 여부를 지정합니다.

    예: 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": "" }
  5. CloudFront 콘솔의 로그 페이지에서 배포 옆의 표준 로그 상태가 활성화됨인지 확인합니다.

    표준 로깅 전송 및 로그 필드에 대한 자세한 내용은 표준 로깅 참조 섹션을 참조하시기 바랍니다.

참고

AWS CloudFormation을 사용하여 CloudFront에 대한 표준 로깅(v2)을 사용하려면 다음 CloudWatch Logs 속성을 사용할 수 있습니다.

ResourceArn은 CloudFront 배포이며, LogType은 지원되는 로그 유형의 ACCESS_LOGS여야 합니다.

크로스 계정 전송을 위한 표준 로깅 사용

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

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

대상 계정 구성

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

대상 계정을 구성하려면 다음과 같이 합니다.
  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을 참조하시기 바랍니다.

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

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

    { "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" } ] }
  3. deliverypolicy.json과 같은 파일을 저장합니다.

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

    aws logs put-delivery-destination-policy --delivery-destination-name cloudfront-delivery-destination --delivery-destination-policy file://deliverypolicy.json
  5. 아래 스테이트먼트를 대상 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:*"} } }
  6. 버킷에 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:*"} } }

소스 계정 구성

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

소스 계정을 구성하려면 다음과 같이 합니다.
  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" } }
  2. 소스 계정의 로그 전송 소스와 대상 계정의 로그 전송 대상을 매핑하는 전송을 만듭니다.

    다음 AWS CLI 명령에서 1단계: 대상 계정 구성의 출력에서 전송 대상 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" } }
  3. 크로스 계정 전송이 성공했는지 확인합니다.

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

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

출력 파일 형식

선택한 전송 대상에 따라 로그 파일에 대해 다음 형식 중 하나를 지정할 수 있습니다.

  • JSON

  • Plain

  • w3c

  • 원시

  • Parquet(Amazon S3만 해당)

참고

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

자세한 내용은 Amazon CloudWatch Logs API 참조에 나와 있는 PutDeliveryDestination을 참조하시기 바랍니다.

표준 로깅 설정 편집

CloudFront 콘솔 또는 CloudWatch API를 사용하여 로깅을 사용 또는 사용 해제하고 다른 로그 설정을 업데이트할 수 있습니다. 로깅 설정에 대한 변경 내용은 12시간 내에 적용됩니다.

자세한 정보는 다음의 주제를 참조하세요.

  • CloudFront 콘솔을 사용하여 배포를 업데이트하려면 배포 업데이트 섹션을 참조하시기 바랍니다.

  • CloudFront API를 사용하여 배포를 업데이트하려면 Amazon CloudFront API 참조에 나와 있는 UpdateDistribution을 참조하시기 바랍니다.

  • CloudWatch Logs API 작업에 대한 자세한 내용은 Amazon CloudWatch Logs API 참조를 참조하시기 바랍니다.

액세스 로그 필드

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

또한 다음의 실시간 로그 필드를 선택할 수 있습니다.

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

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

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

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

  5. c-country - 뷰어의 지리적 위치를 나타내는 국가 코드이며, 뷰어의 IP 주소로 결정됨 국가 코드 목록은 ISO 3166-1 alpha-2 단원을 참조하세요.

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

CloudWatch Logs에 로그 전송

CloudWatch Logs로 로그를 전송하려면 CloudWatch Logs 로그 그룹을 만들거나 기존 버전을 사용합니다. CloudWatch Logs 로그 그룹의 구성에 대한 자세한 내용은 Working with Log Groups and Log Streams을 참조하시기 바랍니다.

로그 그룹을 만든 후에는 표준 로깅을 허용하는 데 필요한 권한이 있어야 합니다. 필수 권한에 대한 자세한 내용은 Amazon CloudWatch Logs 사용 설명서Logs sent to CloudWatch Logs를 참조하시기 바랍니다.

Notes
  • CloudWatch Logs 로그 그룹의 이름을 지정할 경우 [\w-] 정규식 패턴만 사용합니다. 자세한 내용은 Amazon CloudWatch Logs API 참조에 나와 있는 PutDeliveryDestination API 작업을 참조하시기 바랍니다.

  • 로그 그룹 리소스 정책이 크기 제한을 초과하지 않는지 확인합니다. CloudWatch Logs 주제의 로그 그룹 리소스 정책 크기 제한 고려 사항 섹션을 참조하시기 바랍니다.

CloudWatch Logs로 전송된 액세스 로그 예제

{ "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로 로그 전송

Firehose로 로그를 보내려면 기존 Firehose 전송 스트림을 만들거나 사용합니다.

전송 스트림 생성에 관한 자세한 내용은 Amazon Data Firehose 전송 스트림 생성을 참조하세요.

전송 스트림을 만든 후 표준 로깅을 허용하는 데 필요한 권한이 있어야 합니다. 자세한 내용은 Amazon CloudWatch Logs 사용 설명서Logs sent to Firehose를 참조하시기 바랍니다.

참고

Firehose 스트림의 이름을 지정할 경우 [\w-] 정규식 패턴만 사용합니다. 자세한 내용은 Amazon CloudWatch Logs API 참조에 나와 있는 PutDeliveryDestination API 작업을 참조하시기 바랍니다.

Firehose로 전송된 액세스 로그 예제

{"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로 로그 전송

Amazon S3로 액세스 로그를 전송하려면 S3 버킷을 만들거나 기존 버킷을 사용합니다. CloudFront에서 로깅을 사용할 때 버킷 이름을 지정합니다. 버킷 생성에 대해 자세히 알아보려면 Amazon Simple Storage Service 사용 설명서버킷 생성을 참조하시기 바랍니다.

버킷을 만든 후 표준 로깅을 허용하는 데 필요한 권한이 있어야 합니다. 자세한 내용은 Amazon CloudWatch Logs 사용 설명서Amazon S3로 전송된 로그를 참조하세요.

  • 로깅을 사용 설정하면 AWS가 자동으로 필요한 버킷 정책을 추가합니다.

  • 옵트인 AWS 리전에서 S3 버킷을 사용할 수도 있습니다.

참고

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

S3 버킷 지정

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

S3 버킷 이름은 [\w-] 정규식 패턴만 사용할 수 있습니다. 자세한 내용은 Amazon CloudWatch Logs API 참조에 나와 있는 PutDeliveryDestination API 작업을 참조하시기 바랍니다.

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

자세한 내용은 로그에 액세스하는 경로 예제 섹션을 참조하세요.

분할

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 호환 파일 이름 형식

전송된 액세스 로그가 포함된 S3 객체가 Apache Hive와의 통합을 허용하는 접두사 구조를 사용하도록 이 옵션을 사용할 수 있습니다. 자세한 내용은 CreateDelivery API 작업을 참조하시기 바랍니다.

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

파티셔닝 및 Hive 호환 옵션에 대한 자세한 내용은 Amazon CloudWatch Logs API 참조S3DeliveryConfiguration 요소를 참조하시기 바랍니다.

로그에 액세스하는 경로 예제

S3 버킷을 대상으로 지정할 경우 다음 옵션을 사용하여 액세스 로그의 경로를 만들 수 있습니다.

  • Amazon S3 버킷(접두사가 있거나 없는 경우)

  • CloudFront 제공 변수를 사용하거나 직접 입력하여 파티셔닝

  • Hive 호환 옵션 사용

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

접두사가 있는 Amazon S3 버킷

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/{yyyy} myFolderA/{yyyy} amzn-s3-demo-bucket/MyLogPrefix/myFolderA/year=2025

접두사가 없는 Amazon S3 버킷

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

파티션 역할 AWS 계정 ID

Amazon S3 버킷 이름 접미사 경로에서 지정하는 파티션 접미사 경로 업데이트 Hive 호환 사용 설정 여부 액세스 로그 전송 대상
amzn-s3-demo-bucket 없음 AWSLogs/{account-id}/CloudFront/ amzn-s3-demo-bucket/AWSLogs/aws-account-id=<your-account-ID>/CloudFront/
amzn-s3-demo-bucket myFolderA/{accountid} AWSLogs/{account-id}/CloudFront/myFolderA/{accountid} amzn-s3-demo-bucket/AWSLogs/aws-account-id=<your-account-ID>/CloudFront/myFolderA/accountid=<your-account-ID>
Notes
  • {account-id} 변수는 CloudFront용으로 예약되어 있습니다. 접두사 없이 Amazon S3 버킷을 지정하면 CloudFront가 자동으로 접미사 경로에 이 변수를 추가합니다. 로그가 Hive와 호환되는 경우 이 변수는 aws-account-id로 표시됩니다.

  • CloudFront가 접미사 경로에 계정 ID를 추가하도록 {accountid} 변수를 사용할 수 있습니다. 로그가 Hive와 호환되는 경우 이 변수는 accountid로 표시됩니다.

  • 접미사 경로에 대한 자세한 내용은 S3DeliveryConfiguration을 참조하시기 바랍니다.

Amazon S3로 전송된 액세스 로그의 예제

#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

표준 로깅 사용 해제

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

표준 로깅을 사용 해제하려면 다음과 같이 합니다.
  1. CloudFront 콘솔에 로그인합니다.

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

  3. 로깅을 선택한 다음 표준 로그 대상에서 대상을 선택합니다.

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

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

참고

CloudFront 콘솔에서 표준 로깅을 삭제하면 이 작업은 전송 및 전송 대상만 삭제합니다. AWS 계정에서 전송 소스를 삭제하지 않습니다. 전송 소스를 삭제하려면 aws logs delete-delivery-source --name DeliverySourceName 명령에서 전송 소스 이름을 지정합니다. 자세한 내용은 Amazon CloudWatch Logs API 참조에 나와 있는 DeleteDeliverySource를 참조하시기 바랍니다.

문제 해결

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

전송 소스가 이미 존재함

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

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

다른 전송 소스를 만들려면 먼저 기존 전송 소스를 삭제합니다. 자세한 내용은 Amazon CloudWatch Logs API 참조에 나와 있는 DeleteDeliverySource를 참조하시기 바랍니다.

접미사 경로를 변경했는데 Amazon S3 버킷이 내 로그를 수신할 수 없음

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

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

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

  3. 다음 단계 중 하나를 수행할 수 있습니다.

    • Amazon S3 버킷 권한을 amzn-s3-demo-bucket/AWSLogs/<your-account-ID>/CloudFront/*에서 amzn-s3-demo-bucket/myFolderA/*로 업데이트합니다.

    • 기본 접미사를 다시 사용하도록 로깅 구성을 업데이트합니다(AWSLogs/{account-id}/CloudFront).

자세한 내용은 권한 섹션을 참조하세요.

로그 파일 삭제

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

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

CloudWatch Logs
Firehose

요금

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

AWS 서비스의 요금에 대한 자세한 내용은 다음 주제를 참조하시기 바랍니다.