証跡のデータイベントの記録 - AWS CloudTrail

証跡のデータイベントの記録

デフォルトでは、証跡はデータイベントを記録しません。追加の変更がイベントデータに適用されます。詳細については、AWS CloudTrail 料金を参照してください。

注記

証跡によって記録されるイベントは、Amazon CloudWatch Events で使用することができます。たとえば、S3 オブジェクトのデータイベントを記録し、管理イベントを記録しないように証跡を設定した場合、証跡は指定された S3 オブジェクトのデータイベントのみを処理して記録します。イベントこれらの S3 オブジェクトのデータのイベントを Amazon CloudWatch Events で使用することができます。詳細については、Amazon CloudWatch Events ユーザーガイドの「AWS API コールイベント」を参照してください。

データイベント

データイベントでは、リソース上またはリソース内で実行されたリソースオペレーションについて知ることができます。これらのイベントは、データプレーンオペレーションとも呼ばれます。データイベントは、多くの場合、高ボリュームのアクティビティです。

基本的なイベントセレクタでは、次のデータイベントリソースタイプを使用します。

  • バケットおよびバケット内のオブジェクトの Amazon S3 オブジェクトレベルの API アクティビティ (例: GetObjectDeleteObject、 および PutObject API オペレーション)。

  • AWS Lambda 関数の実行アクティビティ (Invoke API)

  • Amazon DynamoDB オブジェクトレベルの API アクティビティ (例: PutItemDeleteItemUpdateItem API オペレーション)。

基本的なイベントセレクターに加えて、高度なイベントセレクターで次のデータ型を使用します。

  • Amazon S3 on Outposts オブジェクトレベル API アクティビティ

  • eth_getBalance または eth_getBlockByNumber などの Ethereum ノードでの Amazon Managed Blockchain JSON-RPC コール

  • CompleteMultipartUpload および GetObject へのコールなどの Amazon S3 Object Lambda アクセスポイント API アクティビティ

  • Amazon EBS スナップショットの PutSnapshotBlockListChangedBlocks、および GetSnapshotBlock などの Amazon Elastic Block Store (EBS) ダイレクト API

  • アクセスポイントでの Amazon S3 API アクティビティ

  • ストリームでの Amazon DynamoDB API アクティビティ

  • テーブル上の AWS Glue API アクティビティ

    注記

    テーブルの AWS Glue データイベントは現在、次のリージョンでのみサポートされています。

    • 米国東部(バージニア北部)

    • 米国東部 (オハイオ)

    • 米国西部 (オレゴン)

    • 欧州 (アイルランド)

    • アジアパシフィック (東京) リージョン

証跡の作成時、デフォルトでは、データイベントは記録されません。CloudTrail データイベントを記録するには、証跡にアクティビティを収集する、サポート対象のリソースまたはリソースタイプを明示的に追加する必要があります。詳しくは、証跡の作成 を参照してください。

単一リージョンの証跡では、そのリージョンでアクセスできるリソースのデータイベントのみを記録できます。S3 バケットはグローバルですが、AWS Lambda 関数と DynamoDB テーブルは、地域別です。

データイベントのログ記録には追加料金が適用されます。CloudTrail の料金については、「AWS CloudTrail 料金表」を参照してください。

データイベントを記録する手順は、証跡でアドバンストイベントセレクタが有効になっているかどうかによって異なります。証跡で有効にしたイベントセレクタの種類と一致するこのセクションの手順を使用します。

  1. CloudTrail コンソールの証跡ページを開き、証跡名を選択します。

    注記

    既存の証跡を編集してログ記録データイベントを追加することもできますが、ベストプラクティスとして、ログ記録データイベント専用に別の証跡を作成することを検討してください。

  2. [Data events] で、[編集] を選択します。

  3. Amazon S3 バケット:

    1. [Data source] で、[S3] を選択します。

    2. すべての現在および将来の S3 バケットを記録することを選択するか、バケットまたは関数を個々に指定することができます。デフォルトでは、現在および将来のすべての S3 バケットのデータイベントが記録されます。

      注記

      デフォルトの [すべての現在および将来の S3 バケット] オプションを維持すると、現在の AWS アカウント内のすべてのバケットや、証跡作成後に作成する任意のバケットで、データイベントのログ記録を行うことができるようになります。このアクティビティが、別の AWS アカウントに属するバケットで実行されている場合でも、AWS アカウントのユーザーまたはロールによって実行されるデータイベントのアクティビティのログ記録も行うことができます。

      証跡が 1 つのリージョンのみで作成される場合 (AWS CLI を使用して作成)、[アカウントのすべての S3 バケットの選択] オプションを選択すると、同じリージョン内のすべてのバケット、およびそのリージョンで後に作成するバケットに対して、データイベントのログ記録が有効になります。AWS アカウント内の他のリージョンの Amazon S3 バケットのデータイベントは記録されません。

    3. デフォルトの [All current and future S3 buckets] で、[読み取り] イベント、[書き込み] イベント、またはその両方をログ記録することを選択します。

    4. 個々のバケットを選択するには、[All current and future S3 buckets] の [読み取り] および [書き込み] のチェックボックスをオフにします。[Individual bucket selection] で、データイベントをログ記録するバケットを参照します。特定のバケットを検索するには、目的のバケットのバケットプレフィックスを入力します。このウィンドウで、複数のバケットを選択できます。[Add bucket] を選択してより多くのバケットのデータイベントをログ記録します。[読み取り] イベント (例: GetObject) か、[書き込み] イベント (例: PutObject)、または両方を選択します。

      この設定は、個別のバケットに設定した個々の設定よりも優先されます。たとえば、すべての S3 バケットにログ記録 [読み取り] イベントを指定し、データイベントログ記録に特定のバケットの追加を選択した場合、追加したバケットには既に [読み取り] が設定されています。選択を解除することはできません。[書き込み] のオプションしか設定することができません。

      ログ記録からバケットを削除するには、[X] を選択します。

  4. データイベントをログに記録する別のデータタイプを追加するには、[Add data event type] を選択します。

  5. Lambda 関数の場合

    1. [Data source] で、[Lambda] を選択します。

    2. [Lambda 関数] で、[All regions] を選択してすべての Lambda 関数をログ記録するか、[Input function as ARN] を使用して、特定の関数のデータイベントをログ記録します。

      AWS アカウントのすべての Lambda 関数に対するデータイベントを記録するには、[現在および将来の関数をすべて記録する] を選択します。この設定は、関数に個々に設定した各設定よりも優先されます。すべての関数が表示されていなくても、関数はすべてログ記録されます。

      注記

      すべてのリージョンで証跡を作成している場合は、この選択によって、AWS アカウントの現時点のすべての関数や、証跡作成後に任意のリージョンに作成する可能性のある Lambda 関数のデータイベントのログ記録が有効になります。単一リージョンで証跡を作成している場合は (AWS CLI を使用して作成)、この選択によって、AWS アカウントの対象リージョンの現時点のすべての関数や、証跡作成後に対象リージョンに作成する可能性のある Lambda 関数のデータイベントのログ記録が有効になります。他のリージョンで作成された Lambda 関数のデータイベントのログ記録は有効になりません。

      このアクティビティが、その他の AWS アカウントに属する関数で実行されている場合でも、すべての関数のデータイベントのログ記録を行うと、AWS アカウントのユーザーまたはロールによって実行されるデータイベントのアクティビティのログ記録も有効になります。

    3. [Input function as ARN] を選択した場合、Lambda 関数の ARN を入力します。

      注記

      15,000 を超える Lambda 関数がアカウントに存在する場合は、証跡作成時に CloudTrail コンソールですべての関数を表示または選択することはできません。表示されていない場合でも、すべての関数をログ記録するオプションを選択することができます。特定の関数のデータイベントをログ記録する場合、ARN が分かれば、関数を手動で追加することができます。コンソールで証跡を作成したら、AWS CLI や put-event-selectors コマンドを使用して、特定の Lambda 関数のデータイベントのログ記録を設定することもできます。詳しくは、AWS CLI を使用して証跡を管理する を参照してください。

  6. データイベントをログに記録する別のデータタイプを追加するには、[Add data event type] を選択します。

  7. DynamoDB テーブルの場合

    1. [Data event source] で、[DynamoDB] を選択します。

    2. [DynamoDB table selection] で、[Browse] を選択してテーブルを選択するか、アクセス許可を持つ DynamoDB テーブルの ARN に貼り付けます。DynamoDB テーブルの ARN は次の形式です。

      arn:partition:dynamodb:region:account_ID:table/table_name

      別のテーブルを追加するには、[Add row] を選択し、テーブルを参照するか、アクセス許可のあるテーブルの ARN に貼り付けます。

  8. [証跡の作成] を選択します。

AWS Management Console では、高度なイベントセレクタが有効になっている場合は、選択したリソース (Amazon S3 バケットまたはアクセスポイント、Lambda 関数、AWS Outposts の S3 オブジェクト、Managed Blockchain ノード用の Ethereum、または S3 オブジェクト Lambda アクセスポイント) のすべてのデータイベントをログ記録する事前定義済みのテンプレートから選択できます。ログセレクタテンプレートを選択したら、最も表示したいデータイベントのみを含めるようにテンプレートをカスタマイズできます。高度なイベントセレクタの使用方法の詳細とヒントについては、このトピックの「アドバンストイベントセレクタを使用してイベントをログに記録する」を参照してください。

  1. CloudTrail コンソールの [ダッシュボード] または [証跡] ページで証跡名を選択して開きます。

  2. 証跡の詳細ページの [データイベント] で、[編集] を選択します。

  3. まだデータイベントのログを記録していない場合は、[データイベント] チェックボックスをオンにします。

  4. [データイベントタイプ] で、データイベントをログ記録するリソースのタイプを選択します。

  5. ログセレクタテンプレートを選択します。CloudTrail には、リソースタイプのすべてのデータイベントをログに記録する事前定義済みのテンプレートが含まれています。カスタムログセレクタテンプレートを構築するには、[Custom] を選択します。

    注記

    S3 バケットの事前定義済みテンプレートを選択すると、現在の AWS アカウント内のすべてのバケットや、証跡作成後に作成する任意のバケットで、データイベントログ記録を行うことができるようになります。このアクティビティが、別の AWS アカウントに属するバケットで実行されている場合でも、AWS アカウントのユーザーまたはロールによって実行されるデータイベントのアクティビティのログ記録も行うことができます。

    証跡が 1 つのリージョンのみに適用される場合、すべての S3 バケットをログ記録する事前定義済みテンプレートを選択すると、同じリージョン内のすべてのバケット、およびそのリージョンで後に作成するバケットに対して、データイベントのログ記録が可能になります。AWS アカウント内の他のリージョンの Amazon S3 バケットのデータイベントは記録されません。

    すべてのリージョンで証跡を作成している場合は、Lambda 関数の事前定義済みテンプレートを選択すると、AWS アカウントの現時点のすべての関数や、証跡作成後に任意のリージョンに作成する可能性のある Lambda 関数のデータイベントのログ記録が有効になります。単一リージョンで証跡を作成している場合は (AWS CLI を使用して作成)、この選択によって、AWS アカウントの対象リージョンの現時点のすべての関数や、証跡作成後に対象リージョンに作成する可能性のある Lambda 関数のデータイベントのログ記録が有効になります。他のリージョンで作成された Lambda 関数のデータイベントのログ記録は有効になりません。

    このアクティビティが、その他の AWS アカウントに属する関数で実行されている場合でも、すべての関数のデータイベントのログ記録を行うと、AWS アカウントのユーザーまたはロールによって実行されるデータイベントのアクティビティのログ記録も有効になります。

  6. 事前定義済みのログセレクターテンプレートを適用し、別のデータイベントリソースタイプを追加しない場合は、[変更の保存] を選択します。以降の本手順に従う必要はありません。カスタムログセレクタテンプレートを適用するには、次のステップに進みます。

  7. カスタムログセレクタテンプレートを作成するには、[ログセレクタテンプレート] ドロップダウンリストで、 [Custom] を選択します。

  8. (オプション) カスタムログセレクタテンプレートの名前を入力します。

  9. アドバンストイベントセレクタで、特定の S3 バケット、AWS Lambda 関数、DynamoDB テーブル、Amazon S3 on Outposts、Ethereum ノード での Amazon Managed Blockchain JSON-RPC コール、S3 Object Lambda アクセスポイント、EBS スナップショットでの Amazon EBS ダイレクトAPI、S3アクセスポイント、DynamoDB Streams、および AWS Glue テーブルのデータイベントを収集する式を作成します。

    1. 次のフィールドから選択します。配列 (複数の値) を受け入れるフィールドの場合、CloudTrail は値の間に OR を追加します。

      • readOnly - readOnly は、true または false の値の [Equals] に設定できます。読み取り専用データイベントは、Get* または Describe* イベントなどのリソースの状態を変更しないイベントです。書き込みイベントは、Put*Delete*、または Write* イベントなどのリソース、属性、またはアーティファクトを追加、変更、または削除します。read および write イベントの両方を記録するには、readOnly セレクタを追加しないでください。

      • eventName - eventName は任意の演算子を使用できます。これを使用して、CloudTrail に記録されるデータイベント (PutBucketGetItem、または GetSnapshotBlock) を含めるまたは除外します。このフィールドには、カンマ区切りで複数の値を指定できます。

      • resources.type - AWS Management Console では、このフィールドは発生しません。これは、[Data event type] ドロップダウンリストでデータイベントタイプの選択によりすでに入力されているためです。AWS CLI および SDK で、resources.type等号演算子のみを使用でき、値は以下のいずれかになります。

        • AWS::S3::Object

        • AWS::Lambda::Function

        • AWS::DynamoDB::Table

        • AWS::S3Outposts::Object

        • AWS::ManagedBlockchain::Node

        • AWS::S3ObjectLambda::AccessPoint

        • AWS::EC2::Snapshot

        • AWS::S3::AccessPoint

        • AWS::DynamoDB::Stream

        • AWS::Glue::Table

      • resources.ARN - resources.ARN には任意の演算子を使用することができますが、等号または不等号を使用する場合、値は、テンプレートで resources.type の値として指定したタイプの有効なリソースの ARN と正確に一致する必要があります。

        例えば、resources.typeAWS::S3::Object に等しい場合、ARN は次のいずれかの形式である必要があります。特定の S3 バケット内のすべてのオブジェクトのすべてのデータイベントをログ記録するには、StartsWith 演算子を使用し、一致する値としてバケット ARN のみを含めます。末尾のスラッシュは意図的です。除外しないでください。

        arn:partition:s3:::bucket_name/ arn:partition:s3:::bucket_name/object_or_file_name/

        resources.typeAWS::Lambda::Function と等しく、演算子が [Equals] (等号) または [NotEquals] (不等号) に設定されている場合、ARN は以下の形式にする必要があります。

        arn:partition:lambda:region:account_ID:function:function_name

        resources.typeAWS::DynamoDB::Table と等しく、演算子が [Equals] (等号) または [NotEquals] (不等号) に設定されている場合、ARN は以下の形式にする必要があります。

        arn:partition:dynamodb:region:account_ID:table/table_name

        resources.typeAWS::S3Outposts::Object と等しく、演算子が [Equals] (等号) または [NotEquals] (不等号) に設定されている場合、ARN は以下の形式にする必要があります。

        arn:partition:s3-outposts:region:account_ID:object_path

        resources.typeAWS::ManagedBlockchain::Node と等しく、演算子が [Equals] (等号) または [NotEquals] (不等号) に設定されている場合、ARN は以下の形式にする必要があります。

        arn:partition:managedblockchain:region:account_ID:nodes/node_ID

        resources.typeAWS::S3ObjectLambda::AccessPoint と等しく、演算子が [Equals] (等号) または [NotEquals] (不等号) に設定されている場合、ARN は以下の形式にする必要があります。

        arn:partition:s3-object-lambda:region:account_ID:accesspoint/access_point_name

        resources.typeAWS::EC2::Snapshot と等しく、演算子が [Equals] (等号) または [NotEquals] (不等号) に設定されている場合、ARN は以下の形式にする必要があります。

        arn:partition:ec2:region::snapshot/snapshot_ID

        resources.typeAWS::S3::AccessPoint と等しく、演算子が [Equals] (等号) または [NotEquals] (不等号) に設定されている場合、ARN は以下の形式のいずれかにする必要があります。S3 アクセスポイントのすべてのオブジェクトでイベントをログ記録するには、アクセスポイント ARN のみを使用し、オブジェクトパスを含めず、StartsWith または NotStartsWith 演算子を使用します

        arn:partition:s3:region:account_ID:accesspoint/access_point_name arn:partition:s3:region:account_ID:accesspoint/access_point_name/object/object_path

        resources.typeAWS::DynamoDB::Stream と等しく、演算子が [Equals] (等号) または [NotEquals] (不等号) に設定されている場合、ARN は以下の形式にする必要があります。

        arn:partition:dynamodb:region:account_ID:table/table_name/stream/date_time

        resources.typeAWS::Glue::Table と等しく、演算子が [Equals] (等号) または [NotEquals] (不等号) に設定されている場合、ARN は以下の形式にする必要があります。

        arn:partition:glue:region:account_ID:table/database_name/table_name

      データイベントリソースの ARN 形式の詳細については、AWS Identity and Access Management ユーザーガイドの「アクション、リソース、条件キー」を参照してください。

    2. 各フィールドについて、[+ Conditions] を選択して、必要な数の条件を追加します。すべての条件に対して最大 500 個の指定値を指定できます。例えば、証跡に記録されているデータイベントから 2 つの S3 バケットのデータイベントを除外するには、フィールドを resources.ARN に、オペレータを NotStartsWith に設定し、S3 バケット ARN に貼り付けるか、イベントをログに記録しない S3 バケットを参照します。

      2 番目の S3 バケットを追加するには、[+ Conditions] を選択し、上記の手順を繰り返し、ARN に貼り付けるか、別のバケットをブラウズします。

      注記

      証跡上のすべてのセレクタに対して、最大 500 の値を設定できます。これには、eventName などのセレクタの複数の値の配列が含まれます。すべてのセレクタに単一の値がある場合、セレクタに最大 500 個の条件を追加できます。

      15,000 を超える Lambda 関数がアカウントに存在する場合は、証跡作成時に CloudTrail コンソールですべての関数を表示または選択することはできません。表示されていない場合でも、事前定義済みのセレクタテンプレートを使用してすべての関数をログ記録できます。特定の関数のデータイベントをログ記録する場合、ARN が分かれば、関数を手動で追加することができます。コンソールで証跡を作成したら、AWS CLI や put-event-selectors コマンドを使用して、特定の Lambda 関数のデータイベントのログ記録を設定することもできます。詳しくは、AWS CLI を使用して証跡を管理する を参照してください。

    3. [+ Field] を選択し、必要に応じてフィールドを追加します。エラーを回避するには、フィールドに競合する値や重複する値を設定しないでください。例えば、あるセレクタで ARN を値と等しく指定せず、次に、別のセレクタで同じ値に等しくない ARN を指定します。

    4. カスタムセレクタテンプレートへの変更を保存するには、[Next] をクリックします。別のログセレクタテンプレートを選択しないでください。また、このページを離れると、カスタムセレクタが失われます。

  10. データイベントをログに記録する別のデータタイプを追加するには、[Add data event type] を選択します。ステップ 4 からこのステップを繰り返し、データイベントタイプのアドバンストイベントセレクタを設定します。

  11. [Next] を選択した後、[Step 2: Choose log events] で、選択したログセレクターテンプレートのオプションを確認します。戻って変更するには、[Edit] を選クリックします。

  12. 選択内容を確認したら、既存の証跡の場合は [Update trail] を選択し、新しい証跡を作成する場合は [Create trail] を選択します。

例: Amazon S3 オブジェクトのデータイベントのログ記録

S3 バケットのすべての S3 オブジェクトに対するデータイベントのログ記録

次の例では、bucket-1 という名前の S3 バケットにすべてのデータイベントのログ記録を設定する時の、ログ記録のしくみを示します。この例では、CloudTrail ユーザーが空のプレフィックスを指定し、さらに [読み取り] データイベントと [書き込み] データイベントの両方のログを記録するオプションを指定しました。

  1. ユーザーがオブジェクトを bucket-1 にアップロードします。

  2. PutObject API オペレーションは Amazon S3 オブジェクトレベルの API です。CloudTrail のデータイベントとして記録されます。CloudTrail ユーザーが空のプレフィックスとともに S3 バケットを指定したため、そのバケット内の任意のオブジェクトで発生したイベントがログに記録されます。証跡はイベントを処理してログに記録します。

  3. 別のユーザーがオブジェクトを bucket-2 にアップロードします。

  4. 証跡に指定されなかった S3 バケット内のオブジェクトで PutObject API オペレーションが発生しました。証跡はこのイベントをログに記録しません。

特定の S3 オブジェクトのデータイベントをログに記録する

次の例では、特定の S3 オブジェクトのイベントをログに記録するように証跡を設定するログ記録のしくみを示します。この例では、CloudTrail ユーザーは my-images というプレフィックスが付いた bucket-3 という名前の S3 バケットと、[書き込み] データイベントのみをログ記録するオプションを指定しました。

  1. ユーザーは、バケットの my-images プレフィックスで始まるオブジェクト (arn:aws:s3:::bucket-3/my-images/example.jpg など) を削除します。

  2. DeleteObject API オペレーションは Amazon S3 オブジェクトレベルの API です。CloudTrail の [Write] データイベントとして記録されます。証跡で指定した S3 バケットとプレフィックスに一致するオブジェクトでイベントが発生しました。証跡はイベントを処理してログに記録します。

  3. 別のユーザーが S3 バケットで異なるプレフィックスのオブジェクト (arn:aws:s3:::bucket-3/my-videos/example.avi など) を削除します。

  4. 証跡で指定したプレフィックスに一致しないオブジェクトでイベントが発生しました。証跡はこのイベントをログに記録しません。

  5. ユーザーはオブジェクト arn:aws:s3:::bucket-3/my-images/example.jpg に対して GetObject API オペレーションを呼び出します。

  6. 証跡で指定したバケットとプレフィックスでイベントが発生しましたが、GetObject は読み取りタイプの Amazon S3 オブジェクトレベルの API です。これは CloudTrail 内で [読み取り] データイベントとして保存されますが、証跡は [読み取り] イベントをログ記録するようには設定されていません。証跡はこのイベントをログに記録しません。

注記

特定の Amazon S3 バケットのデータイベントをログ記録する場合は、データイベントセクションで指定したログファイルの受け取り用に、データイベントをログ記録する Amazon S3 バケットを使用しないことをお勧めします。同じ Amazon S3バケットを使用すると、証跡は、ログファイルが Amazon S3 バケットに配信されるたびにデータイベントをログに記録します。ログファイルは、間隔で配信される集約イベントのため、イベントとログファイルの比率は 1:1 になりません。イベントは、次回のログファイルに記録されます。たとえば、証跡がログを配信すると、PutObject イベントが S3 バケットで発生します。S3 バケットがデータイベントセクションでも指定されていると、証跡は PutObject イベントをデータイベントとして処理して記録します。このアクションは別の PutObject イベントであり、証跡はイベントを再び処理して記録します。詳しくは、CloudTrail の仕組み を参照してください。

AWS アカウントのすべての Amazon S3 データイベントをログ記録するよう証跡を設定するが、ログファイルを受け取る Amazon S3 バケットのデータイベントはログ記録しない場合は、別の AWS アカウントに属する Amazon S3 バケットにログファイルを配信するよう設定します。詳しくは、複数のアカウントから CloudTrail ログファイルを受け取る 他のアカウントでコールされたデータイベントのバケット所有者アカウント ID を秘匿化する を参照してください。

他の AWS アカウントの S3 オブジェクトに対するデータイベントのログ記録

データイベントをログに記録するように証跡を設定するとき、他の AWS アカウントに属している S3 オブジェクトを指定することもできます。指定したオブジェクトでイベントが発生すると、CloudTrail はイベントが各アカウントの証跡と一致するかどうかを評価します。イベントが証跡の設定と一致する場合、証跡はそのアカウントのイベントを処理してログに記録します。一般的に、API の呼び出し元とリソース所有者の両方がイベントを受け取ることができます。

自分が所有する S3 オブジェクトを証跡で指定すると、自分のアカウントのオブジェクトで発生したイベントが証跡によって記録されます。オブジェクトを所有しているため、他のアカウントがオブジェクトを呼び出したときも証跡はイベントを記録します。

あるアカウントのユーザーが自分の証跡で S3 オブジェクトを指定し、別のアカウントがそのオブジェクトを所有している場合は、自分のアカウントのそのオブジェクトで発生したイベントのみが記録されます。他のアカウントで発生したイベントは記録されません。

例: 2 つの AWS アカウントの Amazon S3 オブジェクトのデータイベントのログ記録

次の例では、2 つの AWS アカウントで同じ S3 オブジェクトのイベントをログに記録するように CloudTrail を設定する方法を示します。

  1. ユーザー A は、owner-bucket という名前の S3 バケットのすべてのオブジェクトに対するデータイベントを記録します。A は S3 バケットと空のオブジェクトプレフィックスを指定して証跡を設定します。

  2. ユーザー B は、S3 バケットへのアクセスを許可されている別のアカウントを持っています。B も、同じ S3 バケット内のすべてのオブジェクトのデータイベントを記録しようとします。B は、自分の証跡を設定し、同じ S3 バケットと空のオブジェクトプレフィックスを指定します。

  3. B は、PutObject API オペレーションで S3 バケットにオブジェクトをアップロードします。

  4. このイベントは、B のアカウントで発生し、B の証跡の設定に一致します。B の証跡はイベントを処理してログに記録します。

  5. ユーザー A は S3 バケットを所有しており、イベントは A の証跡の設定と一致するので、A の証跡も同じイベントを処理して記録します。イベントのコピーが 2 つあるため(1 つは Bob の証跡に記録され、もう 1 つは自分の証跡に記録されます)、CloudTrail はデータイベントの 2 つのコピーに対して課金します。

  6. A が S3 バケットにオブジェクトをアップロードします。

  7. このイベントは A のアカウントで発生し、A の証跡の設定と一致します。A の証跡はイベントを処理してログに記録します。

  8. このイベントは B のアカウントでは発生せず、B は S3 バケットを所有していないので、B の証跡はこのイベントを記録しません。CloudTrail は、このデータイベントのコピーを 1 つのみに課金します。

例: 2 つの AWS アカウントで使用される S3 バケットを含む、すべてのバケットのデータイベントのログ記録

次の例は、[Select all S3 buckets in your account] が AWS アカウントでデータイベントを収集する証跡に対して有効になっている場合のログ処理を示しています。

  1. ユーザー A は、アカウントですべての S3 バケットに対するデータイベントを記録します。証跡を設定するには、[読み取り] イベント、[書き込み] イベント、または両方の [データイベント] の [All current and future S3 buckets] を選択します。

  2. ユーザー B は、アカウントの S3 バケットへのアクセスを許可されている別のアカウントを持っています。B は、B がアクセス権を持っているバケットのデータイベントを記録します。B は、すべての S3 バケットのデータイベントを取得するように証跡を設定します。

  3. B は、PutObject API オペレーションで S3 バケットにオブジェクトをアップロードします。

  4. このイベントは、B のアカウントで発生し、B の証跡の設定に一致します。B の証跡はイベントを処理してログに記録します。

  5. ユーザー A は S3 バケットを所有しており、イベントは A の証跡の設定と一致するので、A の証跡もそのイベントを処理して記録します。イベントのコピーが 2 つあるため(1 つは Bob の証跡に記録され、もう 1 つは自分の証跡に記録されます)、CloudTrail はデータイベントの 1 つのコピーの各アカウントに対して課金します。

  6. A が S3 バケットにオブジェクトをアップロードします。

  7. このイベントは A のアカウントで発生し、A の証跡の設定と一致します。A の証跡はイベントを処理してログに記録します。

  8. このイベントは B のアカウントでは発生せず、B は S3 バケットを所有していないので、B の証跡はこのイベントを記録しません。CloudTrail は、お客様のアカウントのこのデータイベントのコピーを 1 つのみに課金します。

  9. 3 番目のユーザー C は S3 バケットへのアクセス権を持ち、そのバケットで GetObject オペレーションを実行します。C は自分のアカウントのすべての S3 バケットでデータイベントを記録するように証跡を設定しています。API 発信者であるため、CloudTrail はデータイベントを証跡に記録します。B はバケットへのアクセス権を持っていますが、リソース所有者ではないため、今回は B の証跡にイベントは記録されません。リソース所有者として、Mary が発信した GetObject オペレーションについての証跡のイベントを受信します。CloudTrail は、データイベントのコピーごとに、お客様のアカウントと Mary のアカウントに課金します。1 つは Mary の証跡、もう 1 つはお客様の証跡です。

読み取り専用イベントと書き込み専用イベント

データイベントと管理イベントをログに記録するように証跡を設定するときは、読み取り専用イベントまたは書き込み専用イベントのどちらか一方のみ、または両方を指定できます。

  • 読み取り

    [読み取り] イベントには、リソースの読み取りのみ行い、変更を行わない API オペレーションが含まれます。例えば、Amazon EC2 の DescribeSecurityGroups および DescribeSubnets API オペレーションは読み取り専用イベントです。これらのオペレーションは、Amazon EC2 リソースに関する情報のみを返し、設定は変更しません。

  • 書き込み

    [Write] イベントには、リソースを変更する (または変更する可能性がある) API オペレーションが含まれます。例えば、Amazon EC2 の RunInstances および TerminateInstances API オペレーションはインスタンスを変更します。

例: 読み取りイベントと書き込みイベントを別の証跡に記録する

次の例では、アカウントに対するログアクティビティを異なる S3 バケットに分けるように証跡を設定する方法を示します。1 つのバケットは読み取り専用イベントを受け取り、もう 1 つのバケットは書き込み専用イベントを受け取ります。

  1. 証跡を作成し、ログファイルを受け取る read-only-bucket という名前の S3 バケットを選択します。次に、証跡を更新し、[読み取り] の管理イベントとデータイベントを記録するように指定します。

  2. 第 2 の証跡を作成し、ログファイルを受け取る write-only-bucket という名前の S3 バケットを選択します。次に、証跡を更新し、[Write] の管理イベントとデータイベントを記録するように指定します。

  3. Amazon EC2 の DescribeInstances および TerminateInstances API オペレーションがアカウントで発生します。

  4. DescribeInstances API オペレーションは読み取り専用イベントであり、1 番目の証跡の設定と一致します。証跡は、イベントをログに記録して read-only-bucket に配信します。

  5. TerminateInstances API オペレーションは書き込み専用イベントであり、2 番目の証跡の設定と一致します。証跡は、イベントをログに記録して write-only-bucket に配信します。

AWS Command Line Interface でのデータイベントのログ記録

AWS CLI を使用して、管理イベントとデータイベントのログを記録するように証跡を設定できます。証跡が管理イベントとデータイベントをログに記録しているかどうかを確認するには、get-event-selectors コマンドを実行します。

注記

アカウントが管理イベントのコピーを複数記録している場合は、料金が発生することに注意してください。データイベントのログ記録には常に料金が発生します。詳細については、AWS CloudTrail 料金を参照してください。

aws cloudtrail get-event-selectors --trail-name TrailName

コマンドは、証跡のデフォルト設定が返されます。

基本的なイベントセレクタを使用してイベントをログに記録する

以下に、基本的なイベントセレクタを示す get-event-selectors コマンドの結果の例を示します。デフォルトでは、AWS CLI を使用して証跡を作成する場合、証跡はすべての管理イベントを記録します。デフォルトでは、証跡はデータイベントを記録しません。

{ "EventSelectors": [ { "IncludeManagementEvents": true, "DataResources": [], "ReadWriteType": "All" } ], "TrailARN": "arn:aws:cloudtrail:us-east-2:123456789012:trail/TrailName" }

管理イベントとデータイベントをログに記録するように証跡を設定するには、put-event-selectors コマンドを実行します。

次の例では、2 つの S3 オブジェクトに対するすべての管理イベントとデータイベントを含めるように基本イベントセレクタを使用して証跡を設定する方法を示します。1 つの証跡に 1~5 個のイベントセレクタを指定できます。1 つの証跡に 1~250 個のデータリソースを指定できます。

注記

基本イベントセレクタを使用してデータイベントを制限する場合は、S3 データリソースの最大数は 250 個です。

aws cloudtrail put-event-selectors --trail-name TrailName --event-selectors '[{ "ReadWriteType": "All", "IncludeManagementEvents":true, "DataResources": [{ "Type": "AWS::S3::Object", "Values": ["arn:aws:s3:::mybucket/prefix", "arn:aws:s3:::mybucket2/prefix2"] }] }]'

このコマンドは、証跡に対して設定されているイベントセレクタを返します。

{ "EventSelectors": [ { "IncludeManagementEvents": true, "DataResources": [ { "Values": [ "arn:aws:s3:::mybucket/prefix", "arn:aws:s3:::mybucket2/prefix2", ], "Type": "AWS::S3::Object" } ], "ReadWriteType": "All" } ], "TrailARN": "arn:aws:cloudtrail:us-east-2:123456789012:trail/TrailName" }

アドバンストイベントセレクタを使用してイベントをログに記録する

アドバンストイベントセレクタを使用することを選択した場合、get-event-selectors コマンドは、次のような結果を返します。デフォルトでは、証跡用にはアドバンストイベントセレクタは設定されていません。

{ "AdvancedEventSelectors": [], "TrailARN": "arn:aws:cloudtrail:us-east-2:123456789012:trail/TrailName" }

次の例は、アドバンストイベントセレクタを使用して、すべての管理イベント (readOnly および writeOnly)、S3 オブジェクトの PutObject および DeleteObject イベントを、同じ 2 つの S3 バケットプレフィックスに格納します。ここに示すように、アドバンストイベントセレクタを使用して、ARN による S3 プレフィックス名だけでなく、ログに記録する特定のイベントの名前も選択できます。証跡ごとに、すべてのセレクタ値を含む、アドバンストイベントセレクタに最大 500 個の条件を追加できます。1 つの証跡に 1~250 個のデータリソースを指定できます。

aws cloudtrail put-event-selectors --trail-name TrailName \ --advanced-event-selectors '[ { "Name": "Log readOnly and writeOnly management events", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Management"] } ] }, { "Name": "Log PutObject and DeleteObject events for two S3 prefixes", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::S3::Object"] }, { "Field": "eventName", "Equals": ["PutObject","DeleteObject"] }, { "Field": "resources.ARN", "StartsWith": ["arn:aws:s3:::mybucket/prefix","arn:aws:s3:::mybucket2/prefix2"] } ] } ]'

結果は、証跡用に設定されたアドバンストイベントセレクタを示しています。

{ "AdvancedEventSelectors": [ { "Name": "Log readOnly and writeOnly management events", "FieldSelectors": [ { "Field": "eventCategory", "Equals": [ "Management" ], "StartsWith": [], "EndsWith": [], "NotEquals": [], "NotStartsWith": [], "NotEndsWith": [] } ] }, { "Name": "Log PutObject and DeleteObject events for two S3 prefixes", "FieldSelectors": [ { "Field": "eventCategory", "Equals": [ "Data" ], "StartsWith": [], "EndsWith": [], "NotEquals": [], "NotStartsWith": [], "NotEndsWith": [] }, { "Field": "resources.type", "Equals": [ "AWS::S3::Object" ], "StartsWith": [], "EndsWith": [], "NotEquals": [], "NotStartsWith": [], "NotEndsWith": [] }, { "Field": "resources.ARN", "Equals": [], "StartsWith": [ "arn:aws:s3:::mybucket/prefix","arn:aws:s3:::mybucket2/prefix2" ], "EndsWith": [], "Equals": [], "NotStartsWith": [], "NotEndsWith": [] } ] } ], "TrailARN": "arn:aws:cloudtrail:us-east-2:123456789012:trail/TrailName" }

アドバンストイベントセレクタを使用して、バケットのすべての Amazon S3 イベントをログに記録する

次の例では、特定の S3 バケットのすべての Amazon S3 オブジェクトのデータイベントをログ含めるように証跡を設定する方法を示します。resources.type の S3 イベントの値フィールドは AWS::S3::Object です。S3 オブジェクトと S3 バケットの ARN 値はわずかに異なるため、resources.ARNStartsWith 演算子を追加してすべてのイベントをキャプチャする必要があります。

aws cloudtrail put-event-selectors --trail-name TrailName --region region \ --advanced-event-selectors \ '[ { "Name": "S3EventSelector", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::S3::Object"] }, { "Field": "resources.ARN", "StartsWith": ["arn:partition:s3:::bucket_name/"] } ] } ]'

コマンドは、次の出力例を返します。

{ "AdvancedEventSelectors": [ { "Name": "S3EventSelector", "FieldSelectors": [ { "Field": "eventCategory", "Equals": [ "Data" ] }, { "Field": "resources.type", "Equals": [ "AWS::S3::Object" ] }, { "Field": "resources.ARN", "StartsWith": [ "arn:partition:s3:::bucket_name/" ] } ] } ], "TrailARN": "arn:aws:cloudtrail:region:account_ID:trail/TrailName" }

アドバンストイベントセレクタを使用して AWS Outposts イベントの Amazon S3 をログに記録する

次の例では、アウトポストの Outopost オブジェクト上のすべての Amazon S3 のすべてのデータイベントを含めるよう、証跡を設定する方法を示します。このリリースでは、resources.type フィールドの Outposts イベント上の S3 でサポートされる値は AWS::S3Outposts::Object です。

aws cloudtrail put-event-selectors --trail-name TrailName --region region \ --advanced-event-selectors \ '[ { "Name": "OutpostsEventSelector", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::S3Outposts::Object"] } ] } ]'

コマンドは、次の出力例を返します。

{ "AdvancedEventSelectors": [ { "Name": "OutpostsEventSelector", "FieldSelectors": [ { "Field": "eventCategory", "Equals": [ "Data" ] }, { "Field": "resources.type", "Equals": [ "AWS::S3Outposts::Object" ] } ] } ], "TrailARN": "arn:aws:cloudtrail:region:account_ID:trail/TrailName" }

AWS Config コンプライアンスのデータイベントをログに記録する

AWS Config コンフォーマンスパックを使用して、エンタープライズを正式な基準 (米国政府機関におけるクラウドセキュリティ認証制度 (FedRAMP) またはアメリカ国立標準技術研究所 (NIST)などが必須とするもの) へ準拠し続けさせている場合、コンプライアンスフレームワークの適合パックでは一般的に、少なくとも、Amazon S3 バケットのデータイベントをログに記録する必要があります。コンプライアンスフレームワークの適合パックには、アカウントの S3 データイベントのログ記録をチェックする、cloudtrail-s3-dataevents-enabled と呼ばれるマネージドルールが含まれます。コンプライアンスフレームワークに関連付けられていない多くの適合パックも、S3 データイベントログ記録を必要とします。次に、このルールを含む適合パックの例を示します。

AWS Config で利用可能なサンプル適合パックの完全なリストについては、のAWS Config デベロッパーガイドの「適合パックサンプルテンプレート」を参照してください。

AWS SDK を使用してイベントのログを記録する

証跡がデータイベントを記録しているかどうかを確認するには、GetEventSelectors オペレーションを実行します。データイベントを記録するように証跡を設定するには、PutEventSelectors オペレーションを実行します。詳細については、AWS CloudTrail API リファレンスを参照してください。

Amazon CloudWatch Logs へのイベントの送信

CloudTrail は、CloudWatch Logs へのデータイベントの送信をサポートします。CloudWatch Logs のロググループにイベントを送信するように証跡を設定すると、CloudTrail は証跡で指定されているイベントだけを送信します。たとえば、データイベントのみを送信するように設定した場合、証跡はデータイベントのみを CloudWatch Logs ロググループに配信します。詳しくは、Amazon CloudWatch Logs による CloudTrail ログファイルをモニタリングする を参照してください。