메뉴
Amazon Simple Storage Service
개발자 안내서 (API Version 2006-03-01)

AWS CloudTrail을 사용하여 Amazon S3 API 호출 로깅

Amazon S3가 CloudTrail과 통합되었습니다. 이 서비스는 AWS 계정에서 Amazon S3에 대해 수행된 특정 API 호출을 캡처하고 사용자가 지정하는 Amazon S3 버킷에 로그 파일을 전송합니다. CloudTrail는 Amazon S3 콘솔 또는 Amazon S3 API로부터의 API 호출을 캡처합니다.

CloudTrail에서 수집하는 정보를 사용하여 Amazon S3에 어떤 요청이 이루어졌는지, 어떤 소스 IP 주소에서 요청했는지, 누가 언제 요청했는지 등을 확인할 수 있습니다. 이러한 정보는 AWS 리소스에 이루어진 변경 사항을 추적하고 작업 관련 문제를 해결하는 데 도움이 됩니다. CloudTrail은 내부 정책 및 규제 표준을 쉽게 준수할 수 있도록 해줍니다. 그 구성 및 활성화 방법을 포함하여 CloudTrail에 대한 자세한 내용은 AWS CloudTrail User Guide를 참조하십시오.

CloudTrail의 Amazon S3 정보

AWS 계정에서 CloudTrail 로깅을 사용하는 경우 특정 Amazon S3 작업에 대한 API 호출이 CloudTrail 로그 파일에 추적됩니다.

CloudTrail 로깅을 통해 추적되는 Amazon S3 버킷 수준 작업

기본 설정상, CloudTrail는 버킷 수준의 작업들을 기록합니다. Amazon S3 레코드가 다른 AWS 서비스 레코드와 함께 로그 파일에 기록됩니다. CloudTrail는 기간 및 파일 크기를 기준으로 새 파일을 만들고 기록하는 시점을 결정합니다.

이 단원의 표에는 CloudTrail의 로깅이 지원되는 Amazon S3 버킷 수준 작업이 나와 있습니다.

CloudTrail 로깅을 통해 추적되는 Amazon S3 버킷 수준 작업

REST API 이름 CloudTrail 로그에 사용되는 API 이벤트 이름

DELETE Bucket

DeleteBucket

DELETE Bucket cors

DeleteBucketCors

DELETE Bucket lifecycle

DeleteBucketLifecycle

DELETE Bucket policy

DeleteBucketPolicy

DELETE Bucket replication

DeleteBucketReplication

버킷 태깅 삭제(DELETE)

DeleteBucketTagging

DELETE 버킷 웹 사이트

DeleteBucketWebsite

GET Bucket acl

GetBucketAcl

GET Bucket cors

GetBucketCors

GET Bucket lifecycle

GetBucketLifecycle

GET Bucket policy

GetBucketPolicy

GET Bucket location

GetBucketLocation

GET Bucket logging

GetBucketLogging

GET Bucket notification

GetBucketNotification

GET Bucket replication

GetBucketReplication

GET Bucket tagging

GetBucketTagging

GET Bucket requestPayment

GetBucketRequestPay

GET Bucket versioning

GetBucketVersioning

GET 버킷 웹 사이트

GetBucketWebsite

서비스 확인(GET)(모든 버킷 조회)

ListBuckets

PUT Bucket

CreateBucket

PUT Bucket acl

PutBucketAcl

PUT Bucket cors

PutBucketCors

PUT Bucket lifecycle

PutBucketLifecycle

PUT Bucket policy

PutBucketPolicy

PUT Bucket logging

PutBucketLogging

PUT Bucket notification

PutBucketNotification

PUT Bucket replication

PutBucketReplication

PUT Bucket requestPayment

PutBucketRequestPay

PUT Bucket tagging

PutBucketTagging

PUT Bucket versioning

PutBucketVersioning

PUT 버킷 웹 사이트

PutBucketWebsite

이러한 API 작업들 이외에, OPTIONS 객체 객체 수준 작업을 사용할 수도 있는데, 이 작업은 버킷의 CORS 구성을 확인하므로 CloudTrail 로깅에서 버킷 수준 작업처럼 간주됩니다.

CloudTrail 로깅을 통해 추적되는 Amazon S3 객체 수준 작업

객체 수준 Amazon S3 작업을 위해 CloudTrail 로그를 가져올 수도 있습니다. 이를 위해 추적에 대한 Amazon S3 객체를 지정하십시오. 사용자의 계정에 객체 수준 작업이 나타나면 CloudTrail가 추적 설정을 평가합니다. 이벤트가 추적에서 지정한 객체와 일치할 경우, 그 이벤트가 기록됩니다. 자세한 내용은 AWS CloudTrail User Guide데이터 이벤트를 참조하십시오. 다음 표는 CloudTrail가 기록할 수 있는 객체 수준 작업의 목록입니다.

REST API 이름 CloudTrail 로그에 사용되는 API 이벤트 이름

DeleteObject

DeleteObject

GetObject

GetObject

GetObjectACL

GetObjectAcl

GetObjectTorrent

GetObjectTorrent

HeadObject

HeadObject

PostObject

PostObject

PostObjectRestore

RestoreObject

PutObject

PutObject

PutObjectACL

PutObjectAcl

PutObjectCopy

CopyObject

InitiateMultipartUpload

CreateMultipartUpload

UploadPart

UploadPart

파트 업로드 - 복사

UploadPartCopy

CompleteMultipartUpload

CompleteMultipartUpload

AbortMultipartUpload

AbortMultipartUpload

ListParts

ListParts

이러한 작업 이외에, 일부 조건 하에서는 다음과 같은 버킷 수준 작업을 사용하여 CloudTrail 로그를 객체 수준 Amazon S3 작업으로 가져올 수 있습니다.

교차 계정 시나리오에서의 객체 수준 작업

다음은 교차 계정 시나리오에서의 객체 수준 API 호출과 관련한 특별한 용례로, CloudTrail 로그가 어떻게 보고되는지 보여줍니다. CloudTrail는 항상 로그를 요청자(API 호출을 한 사람)에게 전송합니다. 교차 계정 액세스를 설정할 때, 이 단원의 예시들을 고려하십시오.

참고

이 예에서는 CloudTrail 로그가 올바르게 구성되어 있다고 가정합니다.

예 1: CloudTrail가 버킷 소유자에게 액세스 로그를 전송함

CloudTrail는 버킷 소유자가 동일한 객체 API에 대한 권한을 가진 경우에만 버킷 소유자에게 액세스 로그를 전송합니다. 다음 교차 계정 시나리오를 고려해 보십시오.

  • 계정-A가 버킷을 소유하고 있습니다.

  • 계정-B(요청자)가 그 버킷의 객체에 액세스하려고 시도합니다.

CloudTrail는 항상 객체 수준 API 액세스 로그를 요청자에게 전송합니다. 또한 CloudTrail는 버킷 소유자가 그 객체에 대해 동일한 API 작동 권한을 가진 경우에만 버킷 소유자에게 동일한 로그를 전송합니다.

참고

버킷 소유자가 객체 소유자이기도 한 경우, 버킷 소유자는 객체 액세스 로그를 얻습니다. 그렇지 않은 경우, 동일한 객체-액세스 API 로그를 얻으려면 버킷 소유자가 객체 ACL을 통해 동일한 객체 API에 대한 권한을 얻어야 합니다.

예 2: CloudTrail가 객체 ACL 설정에 사용된 이메일 주소들을 확산시키지 않음

다음 교차 계정 시나리오를 고려해 보십시오.

  • 계정-A가 버킷을 소유하고 있습니다.

  • 계정-B(요청자)가 이메일 주소를 사용하여 객체 ACL 권한 부여를 설정하는 요청을 전송합니다. ACL에 대한 자세한 내용은 ACL(액세스 제어 목록) 개요 단원을 참조하십시오.

이 요청은 이메일 정보와 함께 로그를 가져옵니다. 그러나 버킷 소유자는 예 1에서와 같이 로그를 수신할 자격이 있는 경우 이벤트를 보고하는 CloudTrail 로그를 가져옵니다. 그러나 버킷 소유자는 ACL 구성 정보, 특히 피부여자 이메일과 권한 부여를 가져오지 않습니다. 로그가 버킷 소유자에게 제공하는 유일한 정보는 ACL API 호출이 계정-B에 의해 실행되었다는 것입니다.

Amazon S3 SOAP API 호출을 통한 CloudTrail 추적

CloudTrail은 Amazon S3 SOAP API 호출을 추적합니다. Amazon S3HTTP를 통한 SOAP 지원은 중단되었지만 HTTPS를 통해 계속해서 사용할 수 있습니다. Amazon S3 SOAP 지원에 대한 자세한 내용은 부록 A: SOAP API 사용 단원을 참조하십시오.

중요

최신 Amazon S3 기능은 SOAP를 지원하지 않습니다. REST API 또는 AWS SDK를 사용하는 것이 좋습니다.

CloudTrail 로깅을 통해 추적되는 Amazon S3 SOAP 작업

SOAP API 이름 CloudTrail 로그에 사용되는 API 이벤트 이름

ListAllMyBuckets

ListBuckets

CreateBucket

CreateBucket

DeleteBucket

DeleteBucket

GetBucketAccessControlPolicy

GetBucketAcl

SetBucketAccessControlPolicy

PutBucketAcl

GetBucketLoggingStatus

GetBucketLogging

SetBucketLoggingStatus

PutBucketLogging

모든 로그 항목은 누가 요청을 생성했는가에 대한 정보가 들어 있습니다. 로그의 사용자 신원 정보를 참조하여 루트 또는 IAM 사용자 자격 증명 혹은 어떤 역할이나 연합된 사용자를 위한 임시 보안 자격 증명을 사용하여 또는 다른 AWS 서비스에 의해 요청이 이루어졌는지 확인할 수 있습니다. 자세한 내용은 CloudTrail Event Reference의 [userIdentity] 필드를 참조하십시오.

원하는 기간만큼 버킷에 로그 파일을 저장할 수 있습니다. 그러나 Amazon S3 수명 주기 규칙을 정의하여 자동으로 로그 파일을 보관하거나 삭제할 수도 있습니다. 기본적으로 로그 파일은 Amazon S3 서버 쪽 암호화(SSE)를 사용하여 암호화합니다.

새 로그 파일이 전송될 때 CloudTrail가 Amazon SNS 알림을 게시하게 할 수 있습니다(예를 들어, 로그 파일이 전송되면 이것에 신속하게 대응하고자 할 경우). 자세한 내용은 AWS CloudTrail User GuideCloudTrail의 Amazon Simple Notification Service 알림 설정 단원을 참조하십시오.

또한 여러 AWS 리전 및 여러 AWS 계정의 Amazon S3 로그 파일을 하나의 Amazon S3 버킷으로 통합할 수도 있습니다. 자세한 내용은 AWS CloudTrail User Guide여러 리전에서 CloudTrail 로그 파일 받기 단원을 참조하십시오.

Amazon S3 서버 액세스 로그 및 CloudWatch Logs와 함께 CloudTrail 로그 사용

AWS CloudTrail 로그를 Amazon S3의 서버 액세스 로그와 함께 사용할 수 있습니다. CloudTrail 로그는 Amazon S3 버킷 수준 및 객체 수준 작업에 대한 자세한 API 추적을 제공하고, Amazon S3의 서버 액세스 로그는 Amazon S3의 데이터에 대한 객체 수준 작업을 파악할 수 있도록 가시성을 제공합니다. 서버 액세스 로그에 대한 자세한 내용은 서버 액세스 로깅을 참조하십시오.

CloudTrail 로그와 Amazon S3에 대한 CloudWatch 로그를 함께 사용할 수도 있습니다. CloudTrail과 CloudWatch 로그를 통합하면 CloudTrail에서 캡처한 S3 버킷 수준의 API 동작이, 지정한 CloudWatch 로그 그룹의 CloudWatch 로그 스트림으로 전송됩니다. 특정 API를 모니터링하는 CloudWatch 경보를 생성하여 해당 API 동작이 발생했을 때 이메일 알림을 받을 수 있습니다. 특정 API 동작을 모니터링하기 위한 CloudWatch 경보에 대한 자세한 내용은 AWS CloudTrail User Guide를 참조하십시오. CloudWatch와 Amazon S3을 함께 사용하는 방법에 대한 자세한 내용은 Amazon CloudWatch로 지표 모니터링 단원을 참조하십시오.

Amazon S3 로그 파일 항목 이해

CloudTrail 로그 파일은 하나 이상의 로그 항목이 있으며, 각 항목은 여러 개의 JSON 형식 이벤트로 구성됩니다. 로그 항목은 어떤 소스로부터의 단일 요청을 나타내며 요청된 작업, 모든 매개 변수, 작업 날짜와 시간 등에 대한 정보가 들어 있습니다. 로그 항목의 순서가 정해져 있는 것은 아닙니다. 즉 순서가 지정된 퍼블릭 API 호출의 스택 추적이 아닙니다.

다음 예는 버킷 정책 삭제(DELETE), 버킷 액세스 제어 목록 추가(PUT), 버킷 버전 확인(GET) 작업을 나타내는 CloudTrail 로그 항목을 보여 줍니다.

Copy
{ "Records": [ { "eventVersion": "1.03", "userIdentity": { "type": "IAMUser", "principalId": "111122223333", "arn": "arn:aws:iam::111122223333:user/myUserName", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "myUserName" }, "eventTime": "2015-08-26T20:46:31Z", "eventSource": "s3.amazonaws.com", "eventName": "DeleteBucketPolicy", "awsRegion": "us-west-2", "sourceIPAddress": "127.0.0.1", "userAgent": "[]", "requestParameters": { "bucketName": "myawsbucket" }, "responseElements": null, "requestID": "47B8E8D397DCE7A6", "eventID": "cdc4b7ed-e171-4cef-975a-ad829d4123e8", "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }, { "eventVersion": "1.03", "userIdentity": { "type": "IAMUser", "principalId": "111122223333", "arn": "arn:aws:iam::111122223333:user/myUserName", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "myUserName" }, "eventTime": "2015-08-26T20:46:31Z", "eventSource": "s3.amazonaws.com", "eventName": "PutBucketAcl", "awsRegion": "us-west-2", "sourceIPAddress": "", "userAgent": "[]", "requestParameters": { "bucketName": "", "AccessControlPolicy": { "AccessControlList": { "Grant": { "Grantee": { "xsi:type": "CanonicalUser", "xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance", "ID": "d25639fbe9c19cd30a4c0f43fbf00e2d3f96400a9aa8dabfbbebe1906Example" }, "Permission": "FULL_CONTROL" } }, "xmlns": "http://s3.amazonaws.com/doc/2006-03-01/", "Owner": { "ID": "d25639fbe9c19cd30a4c0f43fbf00e2d3f96400a9aa8dabfbbebe1906Example" } } }, "responseElements": null, "requestID": "BD8798EACDD16751", "eventID": "607b9532-1423-41c7-b048-ec2641693c47", "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }, { "eventVersion": "1.03", "userIdentity": { "type": "IAMUser", "principalId": "111122223333", "arn": "arn:aws:iam::111122223333:user/myUserName", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "myUserName" }, "eventTime": "2015-08-26T20:46:31Z", "eventSource": "s3.amazonaws.com", "eventName": "GetBucketVersioning", "awsRegion": "us-west-2", "sourceIPAddress": "", "userAgent": "[]", "requestParameters": { "bucketName": "myawsbucket" }, "responseElements": null, "requestID": "07D681279BD94AED", "eventID": "f2b287f3-0df1-4961-a2f4-c4bdfed47657", "eventType": "AwsApiCall", "recipientAccountId": "111122223333" } ] }