AWS CloudTrail を使用した Amazon S3 API コールのログ記録 - Amazon Simple Storage Service

このガイドは更新されていません。最新の情報と手順については、新しい Amazon S3 ユーザーガイドを参照してください。

AWS CloudTrail を使用した Amazon S3 API コールのログ記録

Amazon S3 は、Amazon S3 のユーザー、ロール、または AWS のサービスによって実行されたアクションを記録するサービスである AWS CloudTrail と統合されています。CloudTrail は、Amazon S3 コンソールからの呼び出しと Amazon S3 API へのコード呼び出しを含む、Amazon S3 の API コールのサブセットをイベントとしてキャプチャします。証跡を作成する場合は、Amazon S3 のイベントなど、Amazon S3 バケットへの CloudTrail イベントの継続的な配信を有効にすることができます。証跡を設定しない場合でも、CloudTrail コンソールの [Event history (イベント履歴)] で最新のイベントを表示できます。CloudTrail で収集された情報を使用して、Amazon S3 に対するリクエスト、リクエスト元の IP アドレス、リクエスト者、リクエスト日時などの詳細を確認できます。

CloudTrail を設定して有効にする方法などの詳細については、AWS CloudTrail ユーザーガイドを参照してください。

CloudTrail 内の Amazon S3 情報

CloudTrail は、アカウント作成時に AWS アカウントで有効になります。Amazon S3 でサポートされているイベントアクティビティが発生すると、そのアクティビティは [イベント履歴] の他の AWS のサービスのイベントとともに CloudTrail イベントに記録されます。最近のイベントは、AWS アカウントで表示、検索、ダウンロードできます。詳細については、「CloudTrail イベント履歴でのイベントの表示」を参照してください。

Amazon S3 のイベントなど、AWS アカウントのイベントの継続的な記録については、証跡を作成します。証跡により、CloudTrail はログファイルを Amazon S3 バケットに配信できます。デフォルトでは、コンソールで証跡を作成するときに、証跡がすべてのリージョンに適用されます。証跡では、AWS パーティションのすべてのリージョンからのイベントがログに記録され、指定した Amazon S3 バケットにログファイルが配信されます。さらに、その他の AWS サービスを設定して、CloudTrail ログで収集されたデータをより詳細に分析し、それに基づく対応を行うことができます。詳細については、以下を参照してください。

各イベントまたはログエントリには、リクエストの生成者に関する情報が含まれます。この ID 情報は以下のことを確認するのに役立ちます。

  • リクエストが、ルートと IAM ユーザー認証情報のどちらを使用して送信されたか。

  • リクエストが、ロールとフェデレーティッドユーザーのどちらの一時的なセキュリティ認証情報を使用して送信されたか.

  • リクエストが AWS の別のサービスによって生成されたかどうか。

詳細については、「CloudTrail userIdentity エレメント」を参照してください。

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

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

CloudTrail はアカウントレベルのアクションを記録します。Amazon S3 レコードは、他の AWS のサービスレコードと一緒にログファイルに記録されます。CloudTrail は、期間とファイルサイズに基づいて、新しいファイルをいつ作成して書き込むかを決定します。

このセクションでは、CloudTrail によるログ記録でサポートされている Amazon S3 アカウントレベルのアクションの一覧を示します。

CloudTrail のログ記録によって追跡される Amazon S3 アカウントレベルの API アクションは、以下のイベント名で表示されます。

CloudTrail ログ記録によって追跡される Amazon S3 バケットレベルのアクション

デフォルトでは、CloudTrail はバケットレベルのアクションをログに記録します。Amazon S3 レコードは、他の AWS のサービスレコードと一緒にログファイルに記録されます。CloudTrail は、期間とファイルサイズに基づいて、新しいファイルをいつ作成して書き込むかを決定します。

このセクションでは、CloudTrail によるログ記録でサポートされている Amazon S3 バケットレベルのアクションの一覧を示します。

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

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

オブジェクトレベルの Amazon S3 アクションの CloudTrail ログを取得することもできます。これを行うには、証跡の Amazon S3 オブジェクトを指定します。オブジェクトレベルのアクションがアカウントで発生すると、CloudTrail によって証跡の設定が評価されます。イベントが証跡で指定したオブジェクトに一致すると、そのイベントが記録されます。詳細については、Amazon Simple Storage Service コンソールユーザーガイドの「AWS CloudTrail データイベントで S3 バケットのオブジェクトレベルのログ記録を有効にする方法」と AWS CloudTrail ユーザーガイドの「証跡へのデータイベントのログ記録」を参照してください。

以下に、CloudTrail イベントとしてログに記録されるオブジェクトレベルの API アクションを示します。

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

  • GET Bucket (List Objects) Version 2 – 証跡に指定されたプレフィックスを選択します。

  • GET Bucket Object versions – 証跡に指定されたプレフィックスを選択します。

  • HEAD Bucket – バケットおよび空のプレフィックスを指定します。

  • Delete Multiple Objects – バケットおよび空のプレフィックスを指定します。

    注記

    CloudTrail では、複数のオブジェクトの削除オペレーションを使用して削除されたキーのキー名は記録されません

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

クロスアカウントのシナリオでオブジェクトレベルの 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 S3 SOAP のサポートは 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

CloudTrail ログを Amazon S3 サーバーアクセスログと CloudWatch Logs と併用する

AWS CloudTrail ログは、Amazon S3 のユーザー、ロール、または AWS のサービスによって実行されたアクションの記録を提供するのに対し、Amazon S3 サーバーアクセスログは、S3 バケットに対して行われたリクエストの詳細な記録を提供します。ログ別の機能とプロパティ、パフォーマンス、コストの詳細については、「Amazon S3 でのログ記録」を参照してください。

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

CloudTrail ログは、Amazon S3 の CloudWatch と一緒に使用することもできます。CloudTrail を CloudWatch Logs と統合すると、CloudTrail が取得した S3 バケットレベル API アクティビティが、指定した CloudWatch ロググループの CloudWatch ログストリームに送られます。特定の API アクティビティをモニタリングする CloudWatch アラームを作成し、その API アクティビティが発生した時に電子メールの通知を受け取ることができます。特定の API アクティビティをモニタリングするための CloudWatch アラームの詳細については、 AWS CloudTrail ユーザーガイドを参照してください。Amazon S3 と CloudWatch の併用の詳細については、「Amazon CloudWatch によるメトリクスのモニタリング」を参照してください。

例: Amazon S3 ログファイルのエントリ

証跡は、指定した Amazon S3 バケットにイベントをログファイルとして配信できる設定です。CloudTrail ログファイルには、1 つ以上のログエントリがあります。イベントは、任意の送信元からの単一のリクエストを表します。これには、リクエストされたアクション、アクションの日時、リクエストパラメータなどに関する情報が含まれます。CloudTrail ログファイルは、パブリック API コールの順序付けられたスタックトレースではないため、特定の順序では表示されません。

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

{ "Records": [ { "eventVersion": "1.03", "userIdentity": { "type": "IAMUser", "principalId": "111122223333", "arn": "arn:aws:iam::111122223333:user/myUserName", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "myUserName" }, "eventTime": "2019-02-01T03:18:19Z", "eventSource": "s3.amazonaws.com", "eventName": "ListBuckets", "awsRegion": "us-west-2", "sourceIPAddress": "127.0.0.1", "userAgent": "[]", "requestParameters": { "host": [ "s3.us-west-2.amazonaws.com" ] }, "responseElements": null, "additionalEventData": { "SignatureVersion": "SigV2", "AuthenticationMethod": "QueryString" }, "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": "2019-02-01T03:22:33Z", "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" } } "host": [ "s3.us-west-2.amazonaws.com" ], "acl": [ "" ] }, "responseElements": null, "additionalEventData": { "SignatureVersion": "SigV4", "CipherSuite": "ECDHE-RSA-AES128-SHA", "AuthenticationMethod": "AuthHeader" }, "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": "2019-02-01T03:26:37Z", "eventSource": "s3.amazonaws.com", "eventName": "GetBucketVersioning", "awsRegion": "us-west-2", "sourceIPAddress": "", "userAgent": "[]", "requestParameters": { "host": [ "s3.us-west-2.amazonaws.com" ], "bucketName": "DOC-EXAMPLE-BUCKET1", "versioning": [ "" ] }, "responseElements": null, "additionalEventData": { "SignatureVersion": "SigV4", "CipherSuite": "ECDHE-RSA-AES128-SHA", "AuthenticationMethod": "AuthHeader", }, "requestID": "07D681279BD94AED", "eventID": "f2b287f3-0df1-4961-a2f4-c4bdfed47657", "eventType": "AwsApiCall", "recipientAccountId": "111122223333" } ] }