LoginSignup
1
0

【AWS】EventBritgeで検知対象としたいイベントの確認方法

Last updated at Posted at 2023-12-29

はじめに

EventBritge を使用して、S3 に対するイベントトリガーにしたい。
だけど対象となるイベントの形式がわからないからルールを作れない。
上記のような経験はありませんか?

本記事は EventBritge のトリガー対象となるイベントの確認方法を記載した記事となります。

結論

  • CloudTrail に出力されないイベントを検知したいのであれば、
    EventBritge で検知範囲を広く設定し SNS で連携されるイベントの全文を確認する
  • CloudTrail に出力されるイベントを検知したいのであれば、
    CloudTrail でイベント内容を確認しEventBritge の「detail」に挿入

前提

EventBritgeは各種ログをそのまま検知するのではなく、
以下構造に沿うイベントパターンを検知することが可能となる。

{
  "version": "0",
  "id": "UUID",
  "detail-type": "event name",
  "source": "event source",
  "account": "ARN",
  "time": "timestamp",
  "region": "region",
  "resources": [
    "ARN"
  ],
  "detail": {
  }
}

detail-type:source フィールドと併せて利用し、detail フィールド値を識別する
なお、CloudTrail によって送信されたイベントは、「AWS API Call via CloudTrail」が値として detail-type に記載される。

source:イベントを発生させたサービスを識別する項目。AWS サービスからのイベントはすべて、「aws」で始まる。
記載内容はAWS サービスのアクション、リソース、条件キーから確認可能。
例えば、EC2 の値は「aws.ec2」となる

resources:イベントにかかわるリソースを識別する ARN が格納されます
ただし、イベントにこの ARN が含まれるかどうかはイベントを生成するサービスによって異なる。
※EC2 インスタンスの状態変更では、Amazon EC2 インスタンス ARN が格納されるが、
  AWS CloudTrail での API コールでは、リソース ARN が格納されない

detail:イベントに関する情報を含む JSON オブジェクト。
このフィールドの内容はイベント発行元によって異なる。
CloudTrail の情報をトリガーとしたいなら、Trail のイベント内容をここに記載すること。

参考先:イベント構造リファレンス

直面した問題

基本的に EventBritge がサポート対象とする AWS リソースが出力するイベントは、
公式ページに記載があります。
例:S3 における EventBridge イベントメッセージの構造

ただ、内容によっては EventBritge の「detail」項目に設定する内容の特定ができないため、
トリガーとしたいアクションに対して EventBritge の設定/検知が困難になる問題がありました。

解消方法

以下流れに沿って発行されるイベントを確認することができる。

CloudTrail に出力されないイベントの場合

S3 のライフサイクル/RDS 自動バックアップなど、AWS サービス機能を用いたイベントであればこちらの確認方法

① 検知対象としたアクションが EventBritge に出力する形式確認

今回は例として、S3「ObjectCreated(オブジェクト作成)」アクションを対象とする。
※S3ライフサイクルでも同じように確認は可能
※ObjectCreated アクションは一部S3の設定変更を実施すれば EventBritge で検出可能だが、今回は CloudTrail に出力されない状況で確認を実施する

検知対象のアクションの形式を調べる方法だが、
最初は近い内容が無いか公式ページから確認する。
基本的には各サービスガイドに EventBritge 関連のページが存在するため、
そこから確認。
S3 の EventBridge イベントメッセージの構造

もし、公式ページにサンプルが存在しない場合は、
AWS コンソールの EventBritge のページからヒントを探す。
見当がつかない場合は、選択肢の中化から「すべてのイベント」を選択する。
2023-12-29_11h17_30.png

②EventBritge を作成し「detail」項目に広く設定

EventBritge イベントパターン作成にて、ルール範囲を大きく設定

{
  "source": ["aws.s3"],
  "resources": [
    "arn:aws:s3:::{S3バケット名}"
  ]
}

※resources句で対象を絞らないと大量検知が発生するため、
 対象は必ず絞ること。

③EventBritge のアクションを SNS として設定

ターゲットタイプとしてSNSを選択し、EventBritgeのルール作成を完了する。
image.png

※事前に自身のメールアドレスへ送付するAmazon SNSは作成しておくこと。

④ 受信したメールに記載のイベントを確認

検知対象となるアクション(ObjectCreated)を実施し、
SNSの宛先に送付されたメールを確認。
2023-12-29_11h46_42.png

⑤EventBritge を修正し、特定アクションのみ検出する内容に設定

④で確認したメール本文の情報を元にイベントパターンを修正する。
なお、特定のインスタンスのアクションのみ検知したい場合は、
静的かつインスタンスごとに一意となる値を検出対象とする。

結果として、オブジェクト作成アクションを特定する「detail-type」を受信したメールから特定でき、意図したアクションを検知することが可能なイベントパターンを作成することができた。

{
  "source": ["aws.s3"],
  "resources": ["arn:aws:s3:::{バケット名}"],
  "detail-type":["Object Created"],
  "detail": {
    "eventSource": ["ec2.amazonaws.com"],
    "eventName": ["StartInstances"]
  }
}

CloudTrail に出力されるイベントの場合

GUI 操作や AWSCLI から AWSAPI を実行するようなイベントであればこちらの方法
で確認

確認方法

① 検知対象としたアクションを発行

例として、EC2 に対する「StartInstances(EC2 起動)」アクションを対象とする。

②CloudTrail よりアクション内容を確認

CloudTrailから「StartInstances」アクションを選択し、
イベントレコードから検知対象としたい項目を控える
※特定のインスタンスのアクションのみ検知したい場合は、
静的かつインスタンスごとに一意となる値を検出対象とする。

③EventBritge を作成し「detail」項目に設定

CloudTrail から控えたをピックアップして detail に記載
※CloudTrailのイベントを検知する場合は「detail-type:AWS API Call via CloudTrail」となる。

{
  "source": ["aws.ec2"],
  "detail-type": ["AWS API Call via CloudTrail"],
  "detail": {
    "eventSource": ["ec2.amazonaws.com"],
    "eventName": ["StartInstances"],
    "sourceIPAddress": ["xxx.xxx.xxx.xxx"]
  }
}

終わりに

今回はEventBritgeで検出したいイベントが、
わからないときの調査方法を記載しました。
対象イベントの特定方法に悩んでいた方の助けになれば幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0