Amazon S3 CloudTrail 이벤트

Amazon S3 CloudTrail 이벤트

중요: Amazon S3는 이제 모든 버킷의 기본 암호화 수준으로 Amazon S3 관리형 키(SSE-S3)를 사용한 서버 측 암호화를 적용해요. 2023년 1월 5일부터 Amazon S3로의 모든 새 객체 업로드는 추가 비용 없이 성능에 영향 없이 자동으로 암호화돼요. S3 버킷 기본 암호화 구성과 새 객체 업로드에 대한 자동 암호화 상태는 CloudTrail 로그, S3 Inventory, S3 Storage Lens, Amazon S3 콘솔, 그리고 AWS CLI·AWS SDK의 추가 Amazon S3 API 응답 헤더에서 확인할 수 있어요. 자세한 내용은 기본 암호화 FAQ를 참고하세요.

이 섹션은 S3가 CloudTrail에 기록하는 이벤트에 대한 정보를 제공해요.

출처: 문서

본문

CloudTrail의 Amazon S3 데이터 이벤트

데이터 이벤트는 리소스에서 또는 리소스에 대해 수행된 리소스 작업(예: Amazon S3 객체 읽기·쓰기)에 대한 정보를 제공해요. 이는 데이터 플레인 작업이라고도 해요. 데이터 이벤트는 종종 대량 활동이에요. 기본적으로 CloudTrail은 데이터 이벤트를 기록하지 않아요. CloudTrail Event history는 데이터 이벤트를 기록하지 않아요.

데이터 이벤트에는 추가 요금이 적용돼요. CloudTrail 요금에 대한 자세한 내용은 AWS CloudTrail Pricing을 참고하세요.

CloudTrail 콘솔, AWS CLI 또는 CloudTrail API 작업으로 Amazon S3 리소스 유형에 대한 데이터 이벤트를 기록할 수 있어요. 데이터 이벤트를 기록하는 방법에 대한 자세한 내용은 AWS CloudTrail User Guide의 AWS Management Console로 데이터 이벤트 기록과 AWS Command Line Interface로 데이터 이벤트 기록을 참고하세요.

다음 표는 데이터 이벤트를 기록할 수 있는 Amazon S3 리소스 유형을 나열해요. Data event type (console) 열은 CloudTrail 콘솔의 Data event type 목록에서 선택할 값을 보여줘요. resources.type value 열은 AWS CLI나 CloudTrail API로 고급 이벤트 선택기를 구성할 때 지정하는 resources.type 값을 보여줘요. Data APIs logged to CloudTrail 열은 해당 리소스 유형에 대해 CloudTrail에 기록되는 API 호출을 보여줘요.

데이터 이벤트 유형(콘솔) resources.type 값 CloudTrail에 기록되는 데이터 API
S3 AWS::S3::Object AbortMultipartUpload CompleteMultipartUpload CopyObject CreateMultipartUpload DeleteObject DeleteObjectTagging DeleteObjects GetObject GetObjectAcl GetObjectAttributes GetObjectLegalHold GetObjectRetention GetObjectTagging GetObjectTorrent HeadObject HeadBucket ListObjectVersions ListObjects ListParts PutObject PutObjectAcl PutObjectLegalHold PutObjectRetention PutObjectTagging PutObjectAnnotation GetObjectAnnotation ListObjectAnnotations DeleteObjectAnnotation RestoreObject SelectObjectContent UpdateObjectEncryption UploadPart UploadPartCopy
S3 Express One Zone AWS::S3Express::Object AbortMultipartUpload CompleteMultipartUpload CreateSession CopyObject CreateMultipartUpload DeleteObject DeleteObjects GetObject GetObjectAttributes HeadBucket HeadObject ListObjectsV2 ListParts PutObject UploadPart UploadPartCopy
S3 Access Point AWS::S3::Access Point AbortMultipartUpload CompleteMultipartUpload CopyObject(동일 리전 복사만) CreateMultipartUpload DeleteObject DeleteObjectTagging GetObject GetObjectAcl GetObjectAttributes GetObjectLegalHold GetObjectRetention GetObjectTagging HeadBucket HeadObject ListObjects ListObjectsV2 ListObjectVersions ListParts Presign PutObject PutObjectLegalHold PutObjectRetention PutObjectAcl PutObjectTagging RestoreObject UploadPart UploadPartCopy(동일 리전 복사만)
S3 Object Lambda AWS::S3ObjectLambda::AccessPoint AbortMultipartUpload CompleteMultipartUpload CopyObject(동일 리전 복사만) CreateMultipartUpload DeleteObject DeleteObjectTagging GetObject GetObjectAcl GetObjectLegalHold GetObjectRetention GetObjectTagging HeadObject ListObjects ListObjectVersions ListParts PutObject PutObjectLegalHold PutObjectRetention PutObjectAcl PutObjectTagging RestoreObject UploadPart WriteGetObjectResponse
S3 Outposts AWS::S3Outposts::Object AbortMultipartUpload CompleteMultipartUpload CopyObject(동일 리전 복사만) CreateMultipartUpload DeleteObject DeleteObjectTagging GetObject GetObjectTagging HeadObject ListObjects ListObjectsV2 ListParts PutObject PutObjectTagging UploadPart UploadPartCopy

eventName, readOnly, resources.ARN 필드로 필터링하도록 고급 이벤트 선택기를 구성해 자신에게 중요한 이벤트만 기록할 수 있어요. 이러한 필드에 대한 자세한 내용은 AWS CloudTrail API Reference의 AdvancedFieldSelector를 참고하세요.

CloudTrail의 Amazon S3 관리 이벤트

Amazon S3는 모든 컨트롤 플레인 작업을 관리 이벤트로 기록해요. S3 API 작업에 대한 자세한 내용은 Amazon S3 API Reference를 참고하세요.

CloudTrail이 Amazon S3에 대한 요청을 캡처하는 방법

기본적으로 CloudTrail은 지난 90일 동안 이루어진 S3 버킷 수준 API 호출을 기록하지만 객체에 대한 요청은 기록하지 않아요. 버킷 수준 호출에는 CreateBucket, DeleteBucket, PutBucketLifecycle, PutBucketPolicy 같은 이벤트가 포함돼요. CloudTrail 콘솔에서 버킷 수준 이벤트를 볼 수 있어요. 하지만 데이터 이벤트(Amazon S3 객체 수준 호출)는 보지 못해요. 그런 이벤트는 CloudTrail 로그를 파싱하거나 조회해야 해요.

AWS CloudTrail로 데이터 활동을 기록하는 경우 Amazon S3 DeleteObjects 데이터 이벤트의 이벤트 레코드에는 DeleteObjects 이벤트와 해당 작업의 일부로 삭제된 각 객체에 대한 DeleteObject 이벤트가 모두 포함돼요. 이벤트 레코드에서 삭제된 객체에 대한 추가 가시성을 제외할 수 있어요. 자세한 내용은 AWS CloudTrail User Guide의 데이터 이벤트 필터링을 위한 AWS CLI 예시를 참고하세요.

InitiateReplication 이벤트는 additionalEventData 필드에 objectAnnotationCount를 포함해요. 이 값은 복제가 시작될 때 소스 객체의 주석 수를 나타내요.

PutObjectRetention을 호출하면 CloudTrail 데이터 이벤트가 eventName PutObjectLockRetention으로 기록되며 additionalEventData에 objectRetentionInfo가 포함돼요. 이 필드에는 결과 보존 모드, 보존 종료 날짜, 이벤트 보류 상태, 이벤트 보류 기간이 포함돼요.

CloudTrail 로깅이 추적하는 Amazon S3 계정 수준 작업

CloudTrail은 계정 수준 작업을 기록해요. Amazon S3 레코드는 로그 파일에서 다른 AWS 서비스 레코드와 함께 기록돼요. CloudTrail은 기간과 파일 크기에 따라 새 파일을 만들고 쓸 시점을 결정해요.

이 섹션의 표는 CloudTrail이 로깅을 지원하는 Amazon S3 계정 수준 작업을 나열해요.

CloudTrail 로깅이 추적하는 Amazon S3 계정 수준 API 작업은 다음 이벤트 이름으로 나타나요. CloudTrail 이벤트 이름은 API 작업 이름과 다를 수 있어요. 예를 들어 DeletePublicAccessBlock은 DeleteAccountPublicAccessBlock이에요.

CloudTrail 로깅이 추적하는 Amazon S3 버킷 수준 작업

기본적으로 CloudTrail은 일반 용도 버킷의 버킷 수준 작업을 기록해요. Amazon S3 레코드는 로그 파일에서 다른 AWS 서비스 레코드와 함께 기록돼요. CloudTrail은 기간과 파일 크기에 따라 새 파일을 만들고 쓸 시점을 결정해요.

이 섹션은 CloudTrail이 로깅을 지원하는 Amazon S3 버킷 수준 작업을 나열해요.

CloudTrail 로깅이 추적하는 Amazon S3 버킷 수준 API 작업은 다음 이벤트 이름으로 나타나요. 경우에 따라 CloudTrail 이벤트 이름은 API 작업 이름과 다를 수 있어요. 예를 들어 PutBucketLifecycleConfiguration은 PutBucketLifecycle이에요.

이 API 작업 외에도 OPTIONS object 객체 수준 작업을 사용할 수 있어요. 이 작업은 버킷의 CORS 구성을 검사하므로 CloudTrail 로깅에서 버킷 수준 작업처럼 처리돼요.

참고: HeadBucket API는 CloudTrail에서 Amazon S3 데이터 이벤트로 지원돼요.

CloudTrail 로깅이 추적하는 Amazon S3 Express One Zone 버킷 수준(리전 API 엔드포인트) 작업

기본적으로 CloudTrail은 디렉터리 버킷의 버킷 수준 작업을 관리 이벤트로 기록해요. S3 Express One Zone의 CloudTrail 관리 이벤트에 대한 eventsource는 s3express.amazonaws.com이에요.

다음 리전 엔드포인트 API 작업이 CloudTrail에 기록돼요.

자세한 내용은 S3 Express One Zone의 AWS CloudTrail 로깅을 참고하세요.

계정 간 시나리오의 Amazon S3 객체 수준 작업

다음은 계정 간 시나리오에서 객체 수준 API 호출과 CloudTrail 로그 보고 방식과 관련된 특수 사용 사례예요. CloudTrail은 요청자(API 호출을 한 계정)에게 로그를 전달하며, 일부 접근 거부 사례에서는 로그 항목이 편집되거나 생략돼요. 계정 간 접근을 설정할 때 이 섹션의 예시를 고려하세요.

참고: 예시는 CloudTrail 로그가 적절히 구성되었다고 가정해요.

예제 1: CloudTrail이 버킷 소유자에게 로그 전달

CloudTrail은 버킷 소유자가 같은 객체 API 작업에 대한 권한이 없더라도 버킷 소유자에게 로그를 전달해요. 다음 계정 간 시나리오를 고려해 보세요.

  • 계정 A가 버킷을 소유해요.
  • 계정 B(요청자)가 그 버킷의 객체에 접근하려 해요.
  • 계정 C가 객체를 소유해요. 계정 C는 계정 A와 같을 수도 있고 다를 수도 있어요.

참고: CloudTrail은 항상 객체 수준 API 로그를 요청자(계정 B)에게 전달해요. 추가로 CloudTrail은 버킷 소유자(계정 A)가 객체를 소유하지 않거나(계정 C) 그 객체의 같은 API 작업에 대한 권한이 없더라도 버킷 소유자에게도 같은 로그를 전달해요.

예제 2: CloudTrail은 객체 ACL을 설정할 때 사용되는 이메일 주소를 유포하지 않아요

다음 계정 간 시나리오를 고려해 보세요.

  • 계정 A가 버킷을 소유해요.
  • 계정 B(요청자)가 이메일 주소를 사용해 객체 ACL 권한 부여를 설정하는 요청을 보내요. ACL에 대한 자세한 내용은 "액세스 제어 목록(ACL) 개요"를 참고하세요.

요청자는 이메일 정보와 함께 로그를 받아요. 하지만 버킷 소유자는—예제 1처럼 로그를 받을 자격이 있다면—해당 이벤트를 보고하는 CloudTrail 로그를 받아요. 하지만 버킷 소유자는 ACL 구성 정보, 특히 권한 부여 대상 이메일 주소와 부여(grant)를 받지 못해요. 버킷 소유자에게 로그가 알려주는 유일한 정보는 계정 B가 ACL API 호출을 했다는 것이에요.

더 알아보기 (Learn more)