ServerAccesLoggingTest.cs
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: MIT-0
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class ServerAccesLoggingTest
{
private const string bucketName = "*** bucket name for which to enable logging ***";
private const string targetBucketName = "*** bucket name where you want access logs stored ***";
private const string logObjectKeyPrefix = "Logs";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
public static void Main()
{
client = new AmazonS3Client(bucketRegion);
EnableLoggingAsync().Wait();
}
private static async Task EnableLoggingAsync()
{
try
{
// Step 1 - Grant Log Delivery group permission to write log to the target bucket.
await GrantPermissionsToWriteLogsAsync();
// Step 2 - Enable logging on the source bucket.
await EnableDisableLoggingAsync();
}
catch (AmazonS3Exception e)
{
Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
}
catch (Exception e)
{
Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
}
}
private static async Task GrantPermissionsToWriteLogsAsync()
{
var bucketACL = new S3AccessControlList();
var aclResponse = client.GetACL(new GetACLRequest { BucketName = targetBucketName });
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);
var setACLRequest = new PutACLRequest
{
AccessControlList = bucketACL,
BucketName = targetBucketName
};
await client.PutACLAsync(setACLRequest);
}
private static async Task EnableDisableLoggingAsync()
{
var loggingConfig = new S3BucketLoggingConfig
{
TargetBucketName = targetBucketName,
TargetPrefix = logObjectKeyPrefix
};
// Send request.
var putBucketLoggingRequest = new PutBucketLoggingRequest
{
BucketName = bucketName,
LoggingConfig = loggingConfig
};
await client.PutBucketLoggingAsync(putBucketLoggingRequest);
}
}
}