メニュー
Amazon Simple Storage Service
開発者ガイド (API Version 2006-03-01)

プログラムを使用したログ記録の有効化

プログラムでログ記録を有効化/無効化するには、Amazon S3 API または AWS SDK を使用できます。これを実行するには、バケット上でログ記録を有効化し、さらにログ配信グループに対し、ターゲットバケットにログを書き込むための許可を与えます。

ログ作成の有効化

ログ記録を有効にするには、PUT Bucket logging リクエストを送信してソースバケットにログ記録設定を追加します。リクエストでは、ターゲットバケットを指定し、またオプションで、すべてのログオブジェクトキーに使用するプレフィックスを指定します。以下の例では、ターゲットバケットとして logbucket を、プレフィックスとして logs/ を指定しています。

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

ログオブジェクトはログ配信アカウントが作成および所有し、バケット所有者はログオブジェクトへの完全なアクセス許可を付与されます。また、オプションとして、他のユーザーにもアクセス許可を付与してログを利用させることができます。詳細については、「PUT Bucket logging」を参照してください。

Amazon S3 では、GET Bucket logging API を使用してバケットのログ記録設定を取得することもできます。ログ記録設定を削除するには、PUT Bucket logging リクエストに空の BucketLoggingStatus を指定して送信します。

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

バケットでのログ記録を有効にするには、Amazon S3 API または AWS SDK ラッパーライブラリを使用できます。

ログ配信グループへの WRITE および READ_ACP アクセス許可の付与

Amazon S3 は、定義済みの Amazon S3 ログ配信グループのメンバーとして、ターゲットバケットにログファイルを書き込みます。このような書き込みは、通常のアクセスコントロールの制約に従います。ターゲットバケットのアクセスコントロールリスト (ACL) に付与を追加して、このグループに s3:GetObjectAcls3:PutObject のアクセス許可を付与する必要があります。ログ配信グループは、以下の URL で表されます。

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

WRITEREAD_ACP のアクセス許可を付与するには、以下の付与を追加します。ACL の詳細については、「ACL によるアクセス管理 」を参照してください。

<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 の管理」と「AWS SDK for .NET を使用した ACL の管理 」を参照してください。

例: AWS SDK for .NET

以下は、バケット上でログ記録を有効化する C# の例です。ソースバケットとターゲットバケットの 2 つのバケットを作成する必要があります。この例では、まずターゲットバケットにログを書き込むために必要なアクセス許可をログ配信グループに付与し、次にソースバケットでのログ記録を有効にしています。詳細については、「プログラムを使用したログ記録の有効化」を参照してください。作業サンプルを作成およびテストする方法については、「Amazon S3 .NET コード例の実行」を参照してください。

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); } } }