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

프로그래밍 방식으로 로깅 활성화

Amazon S3 API 또는 AWS SDK를 사용하여 프로그래밍 방식으로 로깅을 활성화 또는 비활성화할 수 있습니다. 그러려면 버킷에 로깅을 활성화하고, 대상 버킷의 Log Delivery 그룹에 로그를 쓸 수 있는 권한을 부여해야 합니다.

로깅 활성화

로깅을 활성화하기 위해 원본 버킷에 로깅 구성을 추가하는 PUT Bucket logging 요청을 제출합니다. 요청에 대상 버킷, 그리고 선택 사항으로 모든 로그 객체 키에 사용할 접두사를 지정합니다. 다음 예제에서는 대상 버킷으로 logbucket을, 접두사로 logs/를 지정합니다.

Copy
<BucketLoggingStatus xmlns="http://doc.s3.amazonaws.com/2006-03-01"> <LoggingEnabled> <TargetBucket>logbucket</TargetBucket> <TargetPrefix>logs/</TargetPrefix> </LoggingEnabled> </BucketLoggingStatus>

로그 객체는 Log Delivery 계정에서 쓰고 소유하며, 버킷 소유자에게는 로그 객체에 대한 모든 권한이 부여됩니다. 또한 필요할 경우 다른 사용자에게 로그에 액세스할 수 있는 권한을 부여할 수 있습니다. 자세한 내용은 PUT Bucket logging 단원을 참조하십시오.

Amazon S3는 또한 버킷의 로깅 구성을 검색할 수 있는 GET Bucket logging API를 제공합니다. 로깅 구성을 삭제하려면 빈 <BucketLoggingStatus> 값으로 PUT Bucket logging 요청을 보냅니다.

Copy
<BucketLoggingStatus xmlns="http://doc.s3.amazonaws.com/2006-03-01"> </BucketLoggingStatus>

Amazon S3 API 또는 AWS SDK 래퍼 라이브러리를 사용하여 버킷의 로깅을 활성화할 수 있습니다.

Log Delivery 그룹에 WRITE 및 READ_ACP 권한 부여

Amazon S3는 대상 버킷에 로그 파일을 쓰기 위해 Log Delivery라는 사전 정의된 Amazon S3 그룹을 제공합니다. 이 쓰기는 일반적인 액세스 제어 제약 조건을 따릅니다. 대상 버킷의 ACL(액세스 제어 목록)에 권한을 추가하여 이 그룹에 s3:GetObjectAcl 및 s3:PutObject 권한을 부여해야 합니다. Log Delivery 그룹을 나타내는 URL은

Copy
http://acs.amazonaws.com/groups/s3/LogDelivery

입니다.

WRITE 및 READ_ACP 권한을 부여하기 위해 다음 권한 부여를 추가합니다. ACL에 대한 자세한 내용은 ACL을 사용한 액세스 관리 단원을 참조하십시오.

Copy
<Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"> <URI>http://acs.amazonaws.com/groups/s3/LogDelivery</URI> </Grantee> <Permission>WRITE</Permission> </Grant> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"> <URI>http://acs.amazonaws.com/groups/s3/LogDelivery</URI> </Grantee> <Permission>READ_ACP</Permission> </Grant>

AWS SDK를 사용하여 프로그래밍 방식으로 ACL에 권한 부여를 추가하는 예제는 AWS SDK for Java을 사용한 ACL 관리.NET용 AWS SDK을 사용한 ACL 관리 단원을 참조하십시오.

예: .NET용 AWS SDK

다음은 버킷의 로깅을 활성화하는 C# 예제입니다. 원본 버킷과 대상 버킷으로 2개의 버킷을 만들어야 합니다. 이 예제에서는 먼저 대상 버킷에 로그를 쓰는 데 필요한 권한을 Log Delivery 그룹에 부여한 다음 원본 버킷에서 로깅을 활성화합니다. 자세한 내용은 프로그래밍 방식으로 로깅 활성화를 참조하십시오. 실제 예제를 작성하여 테스트하는 방법에 대한 자세한 내용은 Amazon S3 .NET 코드 예시 실행를 참조하십시오.

Copy
using System; using Amazon.S3; using Amazon.S3.Model; namespace s3.amazon.com.docsamples { class ServerAccesLogging { static string sourceBucket = "*** Provide bucket name ***"; // On which to enable logging. static string targetBucket = "*** Provide bucket name ***"; // Where access logs can be stored. static string logObjectKeyPrefix = "Logs"; static IAmazonS3 client; public static void Main(string[] args) { using (client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1)) { Console.WriteLine("Enabling logging on source bucket..."); try { // Step 1 - Grant Log Delivery group permission to write log to the target bucket. GrantLogDeliveryPermissionToWriteLogsInTargetBucket(); // Step 2 - Enable logging on the source bucket. EnableDisableLogging(); } catch (AmazonS3Exception amazonS3Exception) { if (amazonS3Exception.ErrorCode != null && (amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId") || amazonS3Exception.ErrorCode.Equals("InvalidSecurity"))) { Console.WriteLine("Check the provided AWS Credentials."); Console.WriteLine( "To sign up for service, go to http://aws.amazon.com/s3"); } else { Console.WriteLine( "Error occurred. Message:'{0}' when enabling logging", amazonS3Exception.Message); } } } Console.WriteLine("Press any key to continue..."); Console.ReadKey(); } static void GrantLogDeliveryPermissionToWriteLogsInTargetBucket() { S3AccessControlList bucketACL = new S3AccessControlList(); GetACLResponse aclResponse = client.GetACL(new GetACLRequest { BucketName = targetBucket }); bucketACL = aclResponse.AccessControlList; bucketACL.AddGrant(new S3Grantee { URI = "http://acs.amazonaws.com/groups/s3/LogDelivery" }, S3Permission.WRITE); bucketACL.AddGrant(new S3Grantee { URI = "http://acs.amazonaws.com/groups/s3/LogDelivery" }, S3Permission.READ_ACP); PutACLRequest setACLRequest = new PutACLRequest { AccessControlList = bucketACL, BucketName = targetBucket }; client.PutACL(setACLRequest); } static void EnableDisableLogging() { S3BucketLoggingConfig loggingConfig = new S3BucketLoggingConfig { TargetBucketName = targetBucket, TargetPrefix = logObjectKeyPrefix }; // Send request. PutBucketLoggingRequest putBucketLoggingRequest = new PutBucketLoggingRequest { BucketName = sourceBucket, LoggingConfig = loggingConfig }; PutBucketLoggingResponse response = client.PutBucketLogging(putBucketLoggingRequest); } } }