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

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

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

참고

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

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

로그 전송을 사용 설정하려면 다음 기본 단계를 수행합니다. 자세한 내용은 Amazon S3 서버 액세스 로깅 사용 설정 섹션을 참조하세요.

  1. 대상 버킷의 이름을 제공합니다. 이 버킷은 Amazon S3에서 액세스 로그를 객체로 저장하는 곳입니다. 소스 및 대상 버킷 모두 동일한 AWS 리전에 있어야 하며 동일한 계정에서 소유하고 있어야 합니다.

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

    소스 버킷과 대상 버킷이 동일한 버킷이면 버킷에 작성되는 로그에 대해 추가 로그가 생성됩니다. 이러한 방식은 스토리지 결제 요금이 약간 증가할 수 있으므로 이 작업을 수행하지 않는 것이 좋습니다. 또한 로그에 대한 추가 로그로 인해 원하는 로그를 찾기가 힘들어질 수 있습니다. 소스 버킷에 액세스 로그를 저장해야 한다면 객체 이름이 공통 문자열로 시작하고 로그 객체를 더 쉽게 식별할 수 있도록 모든 로그 객체 키에 접두사를 지정하는 것이 좋습니다.

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

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

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

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

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

로그 객체 키 형식

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

TargetPrefixYYYY-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 콘솔을 사용하여 버킷에 대해 서버 액세스 로깅을 사용 설정하는 경우 콘솔은 대상 버킷의 버킷 정책을 자동으로 업데이트하여 이러한 권한을 로깅 서비스 보안 주체에게 부여합니다. 서버 액세스 로그 전달을 위한 권한 부여에 대한 자세한 내용은 로그 전달을 위한 권한 섹션을 참조하세요.

참고

Amazon S3는 VPC 엔드포인트 정책에서 거부하는 경우 VPC 엔드포인트 요청에 대해 요청자 또는 버킷 소유자에게 서버 액세스 로그를 전송하는 것을 지원하지 않습니다.

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

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

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

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

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

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

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

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

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