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

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

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

このチュートリアルでは、CloudTrail 証跡を作成して AWS Lambda 関数を作成し、S3データイベントに応答してその関数を呼び出すルールを EventBridgeコンソール で作成します。

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

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

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

証跡を作成するには

  1. CloudTrail コンソール (https://console.aws.amazon.com/cloudtrail/) を開きます。

  2. [Trails (証跡)]、[Create trail (証跡の作成)] の順に選択します。

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

  4. [Storage Location] (保存場所) の、[Create a new S3 bucket] (新しい S3 バケットを作成する) を実行します。

  5. AWS KMS のエイリアスで、KMS キーのエイリアスを入力します。

  6. [Next] を選択します。

  7. [Event type] (イベントタイプ) で [Data events] (データイベント) を選択します。

  8. [Data events] (データイベント) で、次のいずれかの操作を実行します。

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

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

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

  10. [Next] を選択します。

  11. [Create trail (証跡の作成)] を選択します。

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

S3 バケットのデータイベントのログを記録する Lambda 関数を作成します。

Lambda 関数を作成するには

  1. AWS Lambda コンソール (https://console.aws.amazon.com/lambda/) を開きます。

  2. [関数の作成] を選択します。

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

  4. Lambda 関数の名前と説明を入力します。例えば、関数名を LogS3DataEvents とします。

  5. 残りのオプションはデフォルトのまま、[Create function] (関数の作成) を選択します。

  6. 関数ページの [Code] (コード) タブで、index.js をダブルクリックします。

  7. 既存のコードを以下のコードに置き換えます。

    'use strict'; exports.handler = (event, context, callback) => { console.log('LogS3DataEvents'); console.log('Received event:', JSON.stringify(event, null, 2)); callback(null, 'Finished'); };
  8. [Deploy‬] (デプロイ) をクリックします。

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

ステップ 2 で作成した Lambda 関数を実行するルールを作成します。このルールは、Amazon S3 データイベントに応答して実行されます。

ルールを作成するには:

  1. Amazon EventBridge コンソール (https://console.aws.amazon.com/events/) を開きます。

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

  3. [ルールの作成] を選択します。

  4. ルールの名前と説明を入力します。例えば、ルール TestRule に名前を付けます

  5. [Event bus] (イベントバス) では、このルールに関連付けるイベントバスを選択します。このルールをアカウントからのイベントと一致させるには、[default] (デフォルト) を選択します。アカウントの AWS サービスがイベントを発行すると、常にアカウントのデフォルトのイベントバスに移動します。

  6. [Rule type] (ルールタイプ) では、[Rule with an event pattern] (イベントパターンを持つルール) を選択します。

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

  8. [Event source] (イベントソース) では、AWS[services] (サービス) を選択します。

  9. [Event pattern] (イベントパターン) の場合は、次のいずれかを実行します。

    1. [Event source] (イベントソース) として、ドロップダウンリストから [Simple Storage Service (S3)] を選択します。

    2. [Event type] (イベントタイプ) では、ドロップダウンリストから [Object-Level API Call via CloudTrail] (CloudTrail 経由のオブジェクトレベル API 呼び出し) を選択します。

    3. [Specific operation(s)] (特定のオペレーション) を選択したら、[PutObject] を選択します。

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

  10. [Next] を選択します。

  11. [Target types] (ターゲットタイプ) では、AWS[services] (サービス) を選択します。

  12. ターゲットの選択では、ドロップダウンリストから [Lambda function] (Lambda 関数) を選択します。

  13. [Function] (関数) として、ステップ 1 で作成した LogS3DataEvents Lambda 関数を選択します。

  14. [Next] を選択します。

  15. [Next] を選択します。

  16. ルールの詳細を確認し、[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 ログファイルの取得と表示」を参照してください。

ステップ 5: 成功を確認する

CloudWatch ログに Lambda イベントがある場合、このチュートリアルは正常に完了しています。イベントが CloudWatch ログにない場合は、ルールが正常に作成されたことを確認してトラブルシューティングを開始し、ルールが正しく見える場合は、Lambda 関数のコードが正しいことを確認します。

ステップ 6: リソースをクリーンアップする

このチュートリアル用に作成したリソースは、保存を希望しない限り、すぐに削除できます。使用しなくなった AWS リソースを削除することで、AWS アカウントに請求される料金が発生しないようにできます。

EventBridge ルールを削除するには

  1. Eventbridge コンソールの [Rules] (ルール) ページを開きます。

  2. 作成したルールを選択します。

  3. [削除] を選択します。

  4. [削除] を選択します。

Lambda 関数を削除するには

  1. Lambda コンソールの [Functions] (関数) ページを開きます。

  2. 作成した関数を選択します。

  3. [ Actions] で、[Delete ] を選択します。

  4. [削除] を選択します。

CloudTrail 証跡を削除するには

  1. CloudTrail コンソールの [Trails] (追跡) ページを開きます。

  2. 作成した証跡を選択します。

  3. [削除] を選択します。

  4. [削除] を選択します。