서버 액세스 로깅을 사용한 요청 로깅 - Amazon Simple Storage Service

서버 액세스 로깅을 사용한 요청 로깅

서버 액세스 로깅은 버킷에 대해 이루어진 요청에 따른 상세 레코드를 제공합니다. 서버 액세스 로그는 많은 애플리케이션에 있어 유용합니다. 예를 들어 액세스 로그 정보는 보안 및 액세스 감사에 유용할 수 있습니다. 이 정보를 통해 고객 기반을 이해하고 Amazon S3 청구 비용을 파악할 수도 있습니다.

참고

서버 액세스 로그는 2019년 3월 20일 이후에 시작된 리전의 잘못된 리전 리디렉션 오류에 대한 정보를 기록하지 않습니다. 버킷이 존재하는 리전 외부에서 객체 또는 버킷 요청이 생성되면 잘못된 리전 리디렉션 오류가 발생합니다.

로그 전송을 사용 설정하려면 어떻게 해야 합니까?

로그 전송을 사용 설정하려면 다음 기본 단계를 수행합니다. 세부 정보는 Amazon S3 서버 액세스 로깅 사용 설정을 참조하세요.

  1. 대상 버킷의 이름을 입력합니다. 이 버킷은 Amazon S3에서 액세스 로그를 객체로 저장하는 곳입니다. 소스 및 대상 버킷 모두 동일한 AWS 리전에 있어야 하며 동일한 계정에서 소유하고 있어야 합니다. 대상 버킷에는 S3 객체 잠금 기본 보존 기간이 구성되어 있지 않아야 합니다. 또한 대상 버킷에는 요청자 지불이 활성화되어 있지 않아야 합니다.

    소스 버킷 자체를 포함하여 소스 버킷과 동일한 리전에 있는 자신의 고유 버킷에 로그를 전달할 수 있습니다. 그러나 로그 관리를 간소화하기 위해서는 액세스 로그를 다른 버킷에 저장하는 것이 좋습니다.

    소스 버킷과 대상 버킷이 동일한 버킷이면 버킷에 작성되는 로그에 대해 추가 로그가 생성되므로 로그의 무한 루프가 만들어집니다. 이러한 방식은 스토리지 결제 요금이 약간 증가할 수 있으므로 이 작업을 수행하지 않는 것이 좋습니다. 또한 로그에 대한 추가 로그로 인해 원하는 로그를 찾기가 힘들어질 수 있습니다.

    소스 버킷에 액세스 로그를 저장하려는 경우 모든 로그 객체 키에 대상 접두사를 지정하는 것이 좋습니다. 접두사를 지정하면 모든 로그 객체 이름이 공통의 문자열로 시작되므로 로그 객체를 쉽게 식별할 수 있습니다.

  2. (선택 사항) 모든 Amazon S3 로그 객체 키에 대상 접두사를 지정합니다. 대상 접두사를 사용하면 더 쉽게 로그 객체를 찾을 수 있습니다. 예를 들어 접두사 값을 logs/로 지정할 경우 Amazon S3가 만드는 각 로그 객체의 키는 logs/ 접두사로 시작합니다.

    logs/2013-11-01-21-32-16-E568B2907131C0C0

    접두사 값을 logs로 지정하는 경우 로그 객체는 다음과 같이 나타납니다.

    logs2013-11-01-21-32-16-E568B2907131C0C0

    접두사는 여러 버킷이 동일한 대상 버킷에 로깅할 때 소스 버킷을 서로 구별하는 데 유용합니다.

    로그를 삭제할 경우에도 이 접두사가 유용하게 사용됩니다. 예를 들어 Amazon S3가 특정 접두사를 가진 객체를 삭제하도록 수명 주기 구성 규칙을 설정할 수 있습니다. 자세한 내용은 Amazon S3 로그 파일 삭제 단원을 참조하십시오.

  3. (선택 사항) 다른 사용자가 생성된 로그에 액세스할 수 있도록 권한을 설정합니다. 기본적으로 버킷 소유자에게만 항상 로그 객체에 대한 모든 액세스 권한이 부여됩니다. 대상 버킷이 S3 객체 소유권에 버킷 소유자 적용 설정을 사용하여 액세스 제어 목록(ACL)을 비활성화하는 경우 ACL을 사용하는 대상 권한 부여에서 권한을 부여할 수 없습니다. 그러나 대상 버킷에 대한 버킷 정책을 업데이트하여 다른 사용자에게 액세스 권한을 부여할 수 있습니다. 자세한 내용은 Amazon S3의 ID 및 액세스 관리로그 전달을 위한 권한 단원을 참조하세요.

  4. (선택 사항) 로그 파일에 로그 객체 키 형식을 설정합니다. 로그 객체 키 형식(대상 객체 키 형식이라고도 함)에는 두 가지 옵션이 있습니다.

    • 날짜 기반이 아닌 분할 - 원래 로그 객체 키 형식입니다. 이 형식을 선택하면 로그 파일 키 형식이 다음과 같이 나타납니다.

      [DestinationPrefix][YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]

      예를 들어 접두사를 logs/로 지정하는 경우 로그 객체의 이름은 다음과 같이 지정됩니다.

      logs/2013-11-01-21-32-16-E568B2907131C0C0
    • 날짜 기반 분할 - 날짜 기반 분할을 선택하는 경우 로그 파일의 이벤트 시간이나 전송 시간을 로그 형식에 사용되는 날짜 소스로 선택할 수 있습니다. 이 형식을 사용하면 로그를 더 쉽게 쿼리할 수 있습니다.

      날짜 기반 분할을 선택하면 로그 파일 키 형식이 다음과 같이 나타납니다.

      [DestinationPrefix][SourceAccountId]/[SourceRegion]/[SourceBucket]/[YYYY]/[MM]/[DD]/[YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]

      예를 들어 대상 접두사를 logs/로 지정하는 경우 로그 객체의 이름은 다음과 같이 지정됩니다.

      logs/123456789012/us-west-2/DOC-EXAMPLE-SOURCE-BUCKET/2023/03/01/2023-03-01-21-32-16-E568B2907131C0C0

      전송 시간 전송의 경우 로그 파일 이름의 시간은 로그 파일의 전송 시간에 해당합니다.

      이벤트 시간 전송의 경우 연도, 월, 일은 이벤트가 발생한 날에 해당하며 시, 분, 초는 키에서 00으로 설정됩니다. 이러한 로그 파일에 전송되는 로그는 특정 날짜에만 제공됩니다.

    AWS Command Line Interface(AWS CLI), AWS SDK 또는 Amazon S3 REST API를 통해 로그를 구성하는 경우 TargetObjectKeyFormat을 사용하여 로그 객체 키 형식을 지정하세요. 날짜 기반이 아닌 분할을 지정하려면 SimplePrefix를 사용하세요. 날짜 기반 분할을 지정하려면 PartitionedPrefix를 사용하세요. PartitionedPrefix를 사용하는 경우 PartitionDateSource를 사용하여 EventTime 또는 DeliveryTime을 지정하세요.

    SimplePrefix의 경우 로그 파일 키 형식은 다음과 같이 나타납니다.

    [TargetPrefix][YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]

    이벤트 시간이나 전송 시간이 포함된 PartitionedPrefix의 경우 로그 파일 키 형식은 다음과 같이 나타납니다.

    [TargetPrefix][SourceAccountId]/[SourceRegion]/[SourceBucket]/[YYYY]/[MM]/[DD]/[YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]

로그 객체 키 형식

Amazon S3는 대상 버킷에 업로드하는 로그 객체에 대해 다음과 같은 객체 키 형식을 사용합니다.

  • 날짜 기반이 아닌 분할 - 원래 로그 객체 키 형식입니다. 이 형식을 선택하면 로그 파일 키 형식이 다음과 같이 나타납니다.

    [DestinationPrefix][YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]
  • 날짜 기반 분할 - 날짜 기반 분할을 선택하는 경우 로그 파일의 이벤트 시간이나 전송 시간을 로그 형식에 사용되는 날짜 소스로 선택할 수 있습니다. 이 형식을 사용하면 로그를 더 쉽게 쿼리할 수 있습니다.

    날짜 기반 분할을 선택하면 로그 파일 키 형식이 다음과 같이 나타납니다.

    [DestinationPrefix][SourceAccountId]/[SourceRegion]/[SourceBucket]/[YYYY]/[MM]/[DD]/[YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]

로그 객체 키에서 YYYY, MM, DD, hh, mmss는 각각 연도, 월, 일, 시, 분, 초의 숫자를 나타냅니다. 이러한 날짜 및 시간은 협정 세계시(UTC)로 표시됩니다.

로그 파일에는 해당 파일이 전송된 시간 이전에 기록된 레코드가 포함될 수 있습니다. 특정 기간의 모든 로그 레코드가 전송되었는지 여부는 확인할 수 없습니다.

키의 UniqueString 구성 요소는 파일의 덮어쓰기를 방지할 목적으로 사용되는 것으로, 특별한 의미가 없으므로 로그 처리 소프트웨어가 무시해도 됩니다.

로그 전송 방법

Amazon S3는 주기적으로 액세스 로그 레코드를 수집하여 로그 파일에 레코드를 통합한 다음 대상 버킷의 로그 객체로 로그 파일을 업로드합니다. 여러 소스 버킷에서 로깅을 활성화하고 동일한 대상 버킷을 지정한 경우 대상 버킷에 이러한 모든 소스 버킷의 액세스 로그가 저장됩니다. 그러나 각 로그 객체는 특정 원본 버킷의 액세스 로그 레코드만 보고합니다.

Amazon S3는 특별 로그 전달 계정을 사용하여 서버 액세스 로그를 씁니다. 이 쓰기는 일반적인 액세스 제어 제약 조건을 따릅니다. 액세스 로그 전송을 위해 로깅 서비스 보안 주체(logging.s3.amazonaws.com)에 액세스 권한을 부여하도록 대상 버킷의 버킷 정책을 업데이트하는 것이 좋습니다. 버킷 액세스 제어 목록(ACL)을 통해 S3 로그 전송 그룹에 액세스 로그 전송을 위한 액세스 권한을 부여할 수도 있습니다. 그러나 버킷 ACL을 사용하여 S3 로그 전송 그룹에 액세스 권한을 부여하는 것은 권장되지 않습니다.

대상 버킷 정책을 통해 서버 액세스 로깅을 활성화하고 액세스 로그 전송을 위한 액세스 권한을 부여할 때 정책을 업데이트하여 로깅 서비스 보안 주체에게 s3:PutObject 액세스를 허용해야 합니다. Amazon S3 콘솔을 사용하여 서버 액세스 로깅을 활성화하는 경우 콘솔은 대상 버킷 정책을 자동으로 업데이트하여 이러한 권한을 로깅 서비스 보안 주체에 부여합니다. 서버 액세스 로그 전달을 위한 권한 부여에 대한 자세한 내용은 로그 전달을 위한 권한 섹션을 참조하십시오.

참고

VPC 엔드포인트 정책에서 요청을 거부하는 경우 요청자 또는 버킷 소유자에게 Virtual Private Cloud(VPC) 엔드포인트 요청에 대한 서버 액세스 로그가 전송되지 않습니다.

S3 객체 소유권에 대한 버킷 소유자 시행 설정

대상 버킷이 객체 소유권에 버킷 소유자 적용 설정을 사용하는 경우 ACL이 비활성화되고 더 이상 권한에 영향을 주지 않습니다. 로깅 서비스 보안 주체에 액세스 권한을 부여하려면 대상 버킷의 버킷 정책을 업데이트해야 합니다. 객체 소유권에 대한 자세한 내용은 서버 액세스 로깅을 위해 S3 로그 전송 그룹에 대한 액세스 권한 부여 섹션을 참조하십시오.

서버 로그 전송이 항상 보장되지는 않음

서버 액세스 로그 레코드는 최대한 전송을 시도하지만 항상 모든 레코드가 전송된다고 보장할 수는 없습니다. 버킷에 대해 적절히 로깅이 구성된 대부분의 요청은 로그 레코드가 전송됩니다. 대부분 기록된 지 몇 시간 내로 로그 레코드가 전송되지만 더 자주 전송될 수 있습니다.

모든 서버 로깅이 제때 전송될 것이라고 보장할 수는 없습니다. 특정 요청에 대한 로그 레코드는 요청이 실제로 처리된 후에 오랫동안 전송되거나 전혀 전송되지 않을 수도 있습니다. 로그 레코드가 중복되는 경우가 발생할 수도 있습니다. 서버 로그는 버킷에 대한 트래픽의 특성을 파악할 용도로 제공되며, 로그 레코드가 손실되거나 중복되는 경우는 매우 드물지만 서버 로깅은 모든 요청을 완벽하게 기록할 목적으로 제공되는 것이 아니라는 점에 유의해야 합니다.

완벽한 전송을 보장할 수 없는 서버 로깅의 특성 때문에 사용 보고서에는 전송된 서버 로그에 포함되지 않은 액세스 요청이 하나 이상 포함될 수 있습니다. 이 사용 보고서는 AWS Billing and Cost Management 콘솔의 비용 및 사용량 보고서에서 찾을 수 있습니다.

버킷 로깅 상태 변경 시 일정 기간에 걸쳐 단계적으로 반영됨

버킷의 로깅 상태를 변경한 후 실제 로그 파일의 전송에 반영되려면 어느 정도 시간이 지나야 합니다. 예를 들어, 버킷에 로깅을 활성화할 경우 이후 1시간 동안 이루어진 요청 중 일부는 로깅되지만 일부는 로깅되지 않을 수도 있습니다. 로깅의 대상 버킷을 버킷 A에서 버킷 B로 변경한다고 가정하겠습니다. 변경 후 1시간 동안 일부 로그는 버킷 A로 계속 전송될 수 있지만, 다른 로그는 새로운 대상 버킷 B로 전송될 수 있습니다. 그러나 추가 작업을 수행하지 않아도 어느 정도 기간이 지나면 새 설정에 따라 로그가 전송됩니다.

로깅 및 로그 파일에 대한 자세한 내용은 다음 섹션을 참조하십시오.