メニュー
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 も提供しています。ロギング設定を削除するには、PUT Bucket logging リクエストに空の <BucketLoggingStatus> を指定して送信します。

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

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

Log Delivery グループへの WRITE および READ_ACP アクセス権限の付与

Amazon S3 は、定義済みの Amazon S3 Log Delivery グループのメンバーとして、ターゲットバケットにログファイルを書き込みます。このような書き込みは、通常のアクセスコントロールの制約に従います。ターゲットバケットのアクセスコントロールリスト (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 の管理」と「AWS SDK for .NET を使用した ACL の管理 」を参照してください。

例: AWS SDK for .NET

以下は、バケット上でロギングを有効化する 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); } } }