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

AWS CloudTrail を使用して Amazon S3 API 呼び出しのログを記録する

Amazon S3 は CloudTrail と統合されています。これは、AWS アカウントから Amazon S3 に対して行われた特定の API 呼び出しを記録し、指定した Amazon S3 バケットにログファイルを渡すサービスです。CloudTrail は、Amazon S3 コンソールまたは Amazon S3 API から行われた API 呼び出しをキャプチャします。

CloudTrail によって収集された情報を使用して、Amazon S3 に対してどのようなリクエストが行われたか(リクエストの実行元 IP アドレス、実行者、実行日時など)を判断できます。この情報は、AWS リソースに対して加えられた変更を追跡し、操作に関する問題を解決するために役立ちます。CloudTrail によって、内部のポリシーや規制基準に準拠しやすくなります。CloudTrail の詳細 (設定する方法や有効にする方法など) については、AWS CloudTrail User Guide を参照してください。

CloudTrail 内の Amazon S3 情報

AWS アカウントで CloudTrail のログ記録を有効にすると、Amazon S3 アクションに対する API 呼び出しが CloudTrail ログファイルに記録されます。

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 Bucket lifecycle

DeleteBucketLifecycle

DELETE Bucket policy

DeleteBucketPolicy

DELETE Bucket replication

DeleteBucketReplication

DELETE Bucket tagging

DeleteBucketTagging

DELETE Bucket website

DeleteBucketWebsite

GET Bucket acl

GetBucketAcl

GET Bucket cors

GetBucketCors

GET Bucket lifecycle

GetBucketLifecycle

GET Bucket policy

GetBucketPolicy

GET Bucket location

GetBucketLocation

GET Bucket logging

GetBucketLogging

GET Bucket notification

GetBucketNotification

GET Bucket replication

GetBucketReplication

GET Bucket tagging

GetBucketTagging

GET Bucket requestPayment

GetBucketRequestPay

GET Bucket versioning

GetBucketVersioning

GET Bucket website

GetBucketWebsite

GET Service (すべてのバケットを表示します)

ListBuckets

PUT Bucket

CreateBucket

PUT Bucket acl

PutBucketAcl

PUT Bucket cors

PutBucketCors

PUT Bucket lifecycle

PutBucketLifecycle

PUT Bucket policy

PutBucketPolicy

PUT Bucket logging

PutBucketLogging

PUT Bucket notification

PutBucketNotification

PUT Bucket replication

PutBucketReplication

PUT Bucket requestPayment

PutBucketRequestPay

PUT Bucket tagging

PutBucketTagging

PUT Bucket versioning

PutBucketVersioning

PUT Bucket website

PutBucketWebsite

これらの API オペレーションに加えて、OPTIONS オブジェクトのオブジェクトレベルアクションを使用することもできます。アクションはバケットの CORS 設定を確認するため、これは CloudTrail でバケットレベルのアクションのように処理されます。

CloudTrail のログ記録によって追跡される Amazon S3 オブジェクトレベルのアクション

オブジェクトレベルの Amazon S3 アクションの CloudTrail ログを取得することもできます。これを行うには、証跡の Amazon S3 オブジェクトを指定します。オブジェクトレベルのアクションがアカウントで発生すると、CloudTrail によって証跡の設定が評価されます。イベントが証跡で指定したオブジェクトに一致すると、そのイベントが記録されます。詳細については、AWS CloudTrail User Guideの「データイベント」を参照してください。CloudTrail でログに記録できるオブジェクトレベルのアクションを、次の表に示します。

REST API 名 CloudTrail ログで使用される API イベント名

DeleteObject

DeleteObject

GetObject

GetObject

GetObjectACL

GetObjectAcl

GetObjectTorrent

GetObjectTorrent

HeadObject

HeadObject

PostObject

PostObject

PostObjectRestore

RestoreObject

PutObject

PutObject

PutObjectACL

PutObjectAcl

PutObjectCopy

CopyObject

InitiateMultipartUpload

CreateMultipartUpload

UploadPart

UploadPart

UploadPart - Copy

UploadPartCopy

CompleteMultipartUpload

CompleteMultipartUpload

AbortMultipartUpload

AbortMultipartUpload

ListParts

ListParts

これらのオペレーションに加えて、次のバケットレベルのオペレーションを使用して、特定の条件下で CloudTrail ログをオブジェクトレベルの Amazon S3 アクションとして取得できます。

クロスアカウントのシナリオでのオブジェクトレベルのアクション

クロスアカウントのシナリオでオブジェクトレベルの API コールに関連する特殊なユースケースと CloudTrail ログが報告される方法を次に示します。CloudTrail は、常に依頼者 (API コールを行った人) にログを配信します。クロスアカウントアクセスを設定する際には、このセクションの例を検討します。

注記

例では、CloudTrail ログが適切に設定されていることを前提とします。

例 1: CloudTrail がバケット所有者にアクセスログを配信する

CloudTrail は、バケット所有者が同じオブジェクト API に対するアクセス許可を持つ場合にのみ、バケット所有者にアクセスログを配信します。次のクロスアカウントのシナリオを検討してください。

  • Account-A がバケットを所有しています。

  • Account-B (依頼者) が、そのバケット内のオブジェクトへのアクセスを試みます。

CloudTrail は、常にオブジェクトレベルの API アクセスログを依頼者に配信します。さらに、CloudTrail は、バケット所有者がそのオブジェクトに対する同じ API アクションのアクセス許可を持っている場合にのみ、そのバケット所有者に同じログを配信します。

注記

バケット所有者がオブジェクトの所有者でもある場合、そのバケット所有者はオブジェクトのアクセスログを取得します。そうでない場合、バケット所有者が同じオブジェクトアクセス API ログを取得するには、オブジェクト ACL を通じて同じオブジェクト API に対するアクセス許可を取得する必要があります。

例 2: CloudTrail は設定オブジェクト ACL で使用されている E メールアドレスを拡散しない

次のクロスアカウントのシナリオを検討してください。

  • Account-A がバケットを所有しています。

  • Account-B (依頼者) は、E メールアドレスを使用してオブジェクト ACL 権限を設定するリクエストを送信します。ACL の詳細については、「アクセスコントロールリスト(ACL)の概要」を参照してください。

リクエストは E メール情報とともにログを取得します。ただし、例 1 のようにバケット所有者がログの受信資格を持つ場合、バケット所有者はイベントを報告する CloudTrail ログを取得します。一方、バケット所有者は ACL 設定情報 (具体的には被付与者の E メールと権限) を取得しません。ログがバケット所有者に通知する情報は、Account-B によって行われた ACL API コールだけです。

Amazon S3 SOAP API コールでの CloudTrail 追跡

CloudTrail は Amazon S3 の SOAP API 呼び出しを追跡します。Amazon S3SOAP のサポートは HTTP 経由では廃止されましたが、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

各ログエントリには、誰がリクエストを生成したかに関する情報が含まれます。ログのユーザー ID 情報は、リクエストが、ルートまたは IAM ユーザーの認証情報を使用して送信されたか、ロールまたはフェデレーションユーザーの一時的なセキュリティ認証情報を使用して送信されたか、あるいは AWS の別のサービスによって送信されたかを確認するのに役立ちます。詳細については、CloudTrail Event ReferenceuserIdentity フィールドを参照してください。

必要な場合はログファイルを自身の バケットに保管できますが、ログファイルを自動的にアーカイブまたは削除するように Amazon S3 ライフサイクルルールを定義することもできます。デフォルトでは Amazon S3 のサーバー側の暗号化 (SSE) を使用して、ログファイルが暗号化されます。

(たとえば、配信されたログファイルに迅速に応答する必要がある場合に) 新しいログファイルが配信されたときに CloudTrail が Amazon SNS 通知を発行するようにすることを選択できます。詳細については、AWS CloudTrail User Guideの「CloudTrail の Amazon Simple Notification Service 通知の設定」を参照してください。

また、複数の AWS リージョンと複数の AWS アカウントからの Amazon S3 ログファイルを 1 つの Amazon S3 バケットに集約することもできます。詳細については、『AWS CloudTrail User Guide』の「Receiving CloudTrail Log Files from Multiple Regions」を参照してください。

Amazon S3 サーバーアクセスログおよび CloudWatch Logs で CloudTrail ログを使用する

AWS CloudTrail のログは Amazon S3 のサーバーアクセスログとともに使用できます。CloudTrail ログは Amazon S3 バケットレベルとオブジェクトレベルのオペレーションに対する詳細な API 追跡を提供します。一方、Amazon S3 のサーバーアクセスログでは Amazon S3 内のデータに対するオブジェクトレベルのオペレーションが可視化されます。サーバーアクセスログの詳細については、「サーバーアクセスのロギング」を参照してください。

また、CloudTrail ログは Amazon S3 の CloudWatch と一緒に使用することもできます。CloudTrail を CloudWatch ログと統合することで、指定した CloudWatch ロググループの CloudWatch ログストリームに CloudTrail がキャプチャした S3 バケットレベルの API アクティビティが配信されます。特定の API アクティビティをモニタリングする CloudWatch アラームを作成し、その API アクティビティが発生した時に電子メールの通知を受け取ることができます。特定の API アクティビティをモニタリングする CloudWatch アラームの詳細については、『AWS CloudTrail User Guide』を参照してください。CloudWatch で Amazon S3 を使用する方法については、「Amazon CloudWatch を使用したメトリクスのモニタリング」を参照してください。

Amazon S3 ログファイルエントリの概要

CloudTrail ログファイルには、複数の JSON 形式イベントで構成される 1 つ以上のログエントリを記録できます。ログエントリは任意の送信元からの単一のリクエストを表し、リクエストされたアクション、パラメータ、アクションの日時などに関する情報を含みます。ログエントリは、特定の順序になるように生成されるわけではありません。つまり、パブリック API 呼び出しの順序付けられたスタックトレースではありません。

次の例は、DELETE Bucket policyPUT Bucket acl、および GET Bucket versioning アクションを示す CloudTrail ログエントリです。

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