Amazon Simple Storage Service
개발자 안내서 (API 버전 2006-03-01)

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

Amazon S3는 Amazon S3에서 사용자, 역할 또는 AWS 서비스가 수행한 작업에 대한 레코드를 제공하는 서비스인 AWS CloudTrail과 통합됩니다. CloudTrail은 Amazon S3 콘솔 및 Amazon S3 API 호출 코드의 호출을 비롯한 Amazon S3 API 호출의 하위 집합을 이벤트로 캡처합니다. 추적을 생성하면 Amazon S3 이벤트를 비롯하여 CloudTrail 이벤트를 Amazon S3 버킷으로 지속적으로 전송할 수 있습니다. 추적을 구성하지 않은 경우 이벤트 기록에서 CloudTrail 콘솔의 최신 이벤트를 볼 수도 있습니다. CloudTrail에서 수집하는 정보를 사용하여 Amazon S3에 어떤 요청이 이루어졌는지, 어떤 IP 주소에서 요청했는지, 누가 언제 요청했는지 및 추가 세부 정보를 확인할 수 있습니다.

그 구성 및 활성화 방법을 포함하여 CloudTrail에 대한 자세한 내용은 AWS CloudTrail User Guide를 참조하십시오.

CloudTrail의 Amazon S3 정보

CloudTrail은 계정 생성 시 AWS 계정에서 활성화됩니다. 지원되는 이벤트 활동이 Amazon S3에서 발생하면, 해당 활동은 이벤트 기록의 다른 AWS 서비스 이벤트와 함께 CloudTrail 이벤트에 기록됩니다. 이를 통해 AWS 계정에서 최신 이벤트를 확인, 검색 및 다운로드할 수 있습니다. 자세한 내용은 CloudTrail 이벤트 기록을 사용하여 이벤트 보기를 참조하십시오.

Amazon S3 이벤트를 비롯하여 AWS 계정의 이벤트 기록을 보유하려면 추적을 생성하십시오. 추적은 CloudTrail이 Amazon S3 버킷으로 로그 파일을 전송할 수 있게 해 줍니다. 콘솔에서 추적을 생성하면 기본적으로 모든 리전에 추적이 적용됩니다. 추적은 AWS 파티션에 있는 모든 리전의 이벤트를 로깅하고 지정된 Amazon S3 버킷으로 로그 파일을 전송합니다. 또는 기타 AWS 서비스를 사용하여 CloudTrail 로그에서 수집된 이벤트 데이터를 추가 분석 및 처리하도록 구성할 수 있습니다. 자세한 정보는 다음을 참조하십시오.

모든 이벤트 및 로그 항목에는 요청을 생성한 사용자에 대한 정보가 들어 있습니다. 자격 증명 정보를 이용하면 다음을 쉽게 판단할 수 있습니다.

  • 요청을 루트로 했는지, IAM 사용자 자격 증명으로 했는지.

  • 역할 또는 연합된 사용자에 대한 임시 보안 자격 증명을 사용하여 요청이 생성되었는지 여부.

  • 요청을 다른 AWS 서비스로 했는지.

자세한 정보는 CloudTrail userIdentity 요소를 참조하십시오.

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

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 버킷 암호화

DeleteBucketEncryption

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 버킷 암호화

GetBucketEncryption

GET Bucket lifecycle

GetBucketLifecycle

GET Bucket location

GetBucketLocation

GET Bucket logging

GetBucketLogging

GET Bucket notification

GetBucketNotification

GET Bucket policy

GetBucketPolicy

GET Bucket replication

GetBucketReplication

GET Bucket requestPayment

GetBucketRequestPay

GET Bucket tagging

GetBucketTagging

GET Bucket versioning

GetBucketVersioning

GET 버킷 웹 사이트

GetBucketWebsite

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

ListBuckets

PUT Bucket

CreateBucket

PUT Bucket acl

PutBucketAcl

PUT Bucket cors

PutBucketCors

PUT 버킷 암호화

PutBucketEncryption

PUT Bucket lifecycle

PutBucketLifecycle

PUT Bucket logging

PutBucketLogging

PUT Bucket notification

PutBucketNotification

PUT Bucket policy

PutBucketPolicy

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 데이터 이벤트로 S3 버킷에 대해 객체 수준 로깅을 활성화하려면 어떻게 합니까?를 참조하십시오.이 도움말은 AWS CloudTrail User GuideAmazon Simple Storage Service 콘솔 사용 설명서Data Events에 나와 있습니다. 다음 표는 CloudTrail가 기록할 수 있는 객체 수준 작업의 목록입니다.

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

멀티파트 업로드 중단

AbortMultipartUpload

멀티파트 업로드 완료

CompleteMultipartUpload

DELETE Object

DeleteObject

GET Object

GetObject

GET Object ACL

GetObjectAcl

GET Object 태그 지정

GetObjectTagging

GET Object torrent

GetObjectTorrent

HEAD Object

HeadObject

멀티파트 업로드 시작

CreateMultipartUpload

파트 목록 조회

ListParts

POST Object

PostObject

POST Object restore

RestoreObject

PUT Object

PutObject

PUT Object acl

PutObjectAcl

PUT Object 태그 지정

PutObjectTagging

PUT Object - Copy

CopyObject

SELECT Object Content

SelectObjectContent

파트 업로드

UploadPart

파트 업로드 - 복사

UploadPartCopy

이러한 작업 이외에, 일부 조건 하에서는 다음과 같은 버킷 수준 작업을 사용하여 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

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

AWS CloudTrail 로그를 Amazon S3의 서버 액세스 로그와 함께 사용할 수 있습니다. CloudTrail 로그는 Amazon S3 버킷 수준 및 객체 수준 작업에 대한 자세한 API 추적을 제공하고, Amazon S3의 서버 액세스 로그는 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 로그 파일 항목

추적은 지정한 Amazon S3 버킷에 이벤트를 로그 파일로 제공할 수 있도록 해주는 구성입니다. CloudTrail 로그 파일에는 하나 이상의 로그 항목이 포함됩니다. 이벤트는 어떤 소스로부터의 단일 요청을 나타내며 요청된 작업, 작업 날짜와 시간, 요청 파라미터 등에 대한 정보가 들어 있습니다. CloudTrail 로그 파일은 퍼블릭 API 호출의 주문 스택 트레이스가 아니기 때문에 특정 순서로 표시되지 않습니다.

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

{ "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" } ] }