チュートリアル: CloudWatch Events を使用して Amazon S3 オブジェクトレベル操作のログを記録する - Amazon CloudWatch Events

チュートリアル: CloudWatch Events を使用して Amazon S3 オブジェクトレベル操作のログを記録する

注記

イベントを管理するには、Amazon EventBridge が好ましい方法です。CloudWatch Events と EventBridge は同じ基盤となるサービスと API ですが、EventBridge はより多くの機能を提供します。CloudWatch または EventBridge のいずれかで行った変更は、各コンソールに表示されます。詳細については、Amazon EventBridge を参照してください。

S3 バケットにオブジェクトレベルの API 操作のログを記録することができます。Amazon CloudWatch Events がこれらのイベントと一致する前に、AWS CloudTrail を使用してこれらのイベントを受信するように設定された証跡を設定する必要があります。

ステップ 1: AWS CloudTrail 証跡を設定する

S3 バケットのデータイベントを AWS CloudTrail と CloudWatch Events に記録するには、証跡を作成します。証跡は、アカウントでの API コールと関連イベントをキャプチャし、指定した S3 バケットにログファイルを提供します。既存の証跡を更新するか、新しい証跡を作成できます。

証跡を作成するには
  1. https://console.aws.amazon.com/cloudtrail/ で CloudTrail コンソールを開きます。

  2. ナビゲーションペインで、[証跡]、[新しい証跡を追加する] を選択します。

  3. [Trail name] に、証跡の名前を入力します。

  4. [Data events] に、バケット名とプレフィックスを入力します (オプション)。証跡ごとに、最大 250 個の Amazon S3 オブジェクトを追加できます。

    • バケットのすべての Amazon S3 オブジェクトのデータイベントを記録するには、S3 バケットと空のプレフィックスを指定します。そのバケットのオブジェクトでイベントが発生すると、証跡がイベントを処理して記録します。

    • 特定の Amazon S3 オブジェクトのデータイベントを記録するには、[Add S3 bucket (S3 バケットの追加)] を選択し、S3 バケットおよびオプションとしてオブジェクトのプレフィックスを指定します。そのバケットのオブジェクトでイベントが発生し、オブジェクトが指定したプレフィックスで始まっていると、証跡がイベントを処理して記録します。

  5. 各リソースについて、ログ記録の対象を [読み取り] イベントにするか、[書き込み] イベントにするか、または両方のタイプのイベントにするかを指定します。

  6. [Storage location] で、ログファイルストレージに指定する S3 バケットを作成するか既存のバケットを選択します。

  7. [Create] を選択します。

詳細については、AWS CloudTrail ユーザーガイドの「データイベント」を参照してください。

ステップ 2: AWS Lambda 関数を作成する

S3 バケットのデータイベントのログを記録する Lambda 関数を作成します。ルールを作成するときに、この関数を指定します。

Lambda 関数を作成するには
  1. AWS Lambda コンソール (https://console.aws.amazon.com/lambda/) を開きます。

  2. Lambda を初めて使用する場合は、ウェルカムページを参照してください。[Create a function] を選択します。それ以外の場合は、[関数の作成] を選択します。

  3. [Author from scratch] を選択します。

  4. [一から作成] で、次の操作を行います。

    1. Lambda 関数の名前を入力します。たとえば、関数名を「LogS3DataEvents」とします。

    2. [ロール] で、[カスタムロールを作成する] を選択します。

      新しいウィンドウが開きます。必要に応じて [ロール名] を変更し、[許可] を選択します。

    3. Lambda コンソールに戻って、[Create function (関数の作成)] をクリックします。

  5. Lambda 関数のコードを次のように編集し、[保存] を選択します。

    'use strict'; exports.handler = (event, context, callback) => { console.log('LogS3DataEvents'); console.log('Received event:', JSON.stringify(event, null, 2)); callback(null, 'Finished'); };

ステップ 3: ルールを作成する

Amazon S3 データイベントに応答して Lambda 関数を実行するルールを作成します。

ルールを作成するには
  1. CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/) を開きます。

  2. ナビゲーションペインで、[Rules]、[Create rule] の順に選択します。

  3. [イベントソース] で、以下の操作を実行します。

    1. [Event Pattern] を選択します。

    2. [Build event pattern to match events by service] を選択します。

    3. [Simple Storage Service (S3)] を選択し、[オブジェクトレベルのオペレーション] を選択します。

    4. [特定のオペレーション]、[PutObject] の順に選択します。

    5. デフォルトでは、このルールはリージョン内のすべてのバケットのデータイベントと一致します。特定のバケットのデータイベントに一致させるには、[Specify bucket(s) by name] で指定し、1 つ以上のバケットを指定します。

  4. [Targets (ターゲット)] で、[Add target (ターゲットの追加)]、[Lambda function (Lambda 関数)] の順に選択します。

  5. [関数] で、作成した Lambda 関数を選択します。

  6. [設定の詳細] を選択します。

  7. [Rule definition] で、ルールの名前と説明を入力します。

  8. [Create rule] を選択します。

ステップ 4: ルールをテストする

ルールをテストするには、オブジェクトを S3 バケットに配置します。Lambda 関数が呼び出されたことを確認できます。

Lambda 関数のログを表示するには
  1. CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/) を開きます。

  2. ナビゲーションペインで [ログ] を選択します。

  3. Lambda 関数 (/aws/lambda/function-name) のロググループの名前を選択します。

  4. 起動したインスタンスの関数によって提供されるデータを表示するログのストリーム名を選択します。

また、証跡に指定した S3 バケット内の CloudTrail ログの内容を確認することもできます。詳細については、AWS CloudTrail ユーザーガイドの「CloudTrail ログファイルの取得と表示」を参照してください。