EventBridgeのアーカイブ&リプレイ機能を使用してイベントを再現してみる
EventBridgeの検証にとても役立ちそうな機能がリリースされていました。
EventBridgeとは
AWS内で発生したイベントやサードパーティ(Zendesk、Datadog、Pagerdutyなど)のイベントをトリガーにLambda関数やSNSを実行できる機能です。 同様の機能としてCloudWatch Eventsがありますが、EventBridgeはCloudWatch Eventsの上位互換的な機能となります。
よくある質問より
Q: Amazon EventBridge は CloudWatch Events とどのように関連していますか? Amazon EventBridge は、CloudWatch Events をベースに構築された、CloudWatch Events を拡張するサービスです。
今回のアップデートについて
一度発生したイベントソースを、アーカイブして再現できることができるようになりました。
例えばCloudTrailやS3へのオブジェクトUPなど、特定のイベントを契機にターゲットでLambdaを実行していた場合、Lambdaの動作テストを行うために、再度イベントそのもの(CloudTrail(=特定のAPI実行)やオブジェクト再UP)を実行しなければならない場合がありました。今回のアップデートで、そういったイベントの再現を行わずに、ターゲットの検証が実行できるようになりました。
特にセキュリティインシデントをイベントトリガーとしている場合は、中々そのイベントを再現するのは難しい場合もあるかと思います。
試してみる
今回は再現のしやすさから、イベントにGuardDutyのサンプルイベント、ターゲットにSNS+Chatbot通知という設定で試していきます。(※今回はChatbotの通知設定部分は割愛します。)
EventBridgeから以下のパターンを定義してルールを作成します。これでGuradDutyで検知した内容をターゲットに渡すことができます。
ターゲットにはChatbotを設定したSNSトピックを設定します。
その他は基本デフォルトでOKです。この2つを設定して作成します。
ルールができたので、次にアーカイブを作成していきます。左側のメニューからアーカイブを選択すればOKです。
任意の名前を入力し、ソースには今回作成したルールが所属するデフォルトのイベントバス「default」を選択します。
イベントのフィルタでは、すべてのイベントを対象としても良いのですが、今回はGuradDutyの検証のため、ルール作成時と同様のフィルタパターンを設定します。
アーカイブができました。
アーカイブの準備ができたので初回のGuradDutyのサンプルイベントを作成してみます。
GuardDuty>設定>結果のサンプルから生成できます。ポチっと。
しばらくするとSlackに以下のようにたくさんメッセージが飛んできます。
これらのイベントをEventBridge経由で再現してみます。EventBridgeのアーカイブから新しい再生を開始を選択します。
作成しておいたアーカイブとルールを選択し、発生した時刻が含まれるよう開始、終了時刻を選択します。
再生を開始をクリックするとイベントが再生され、しばらくすると以下の通りイベントが再生済みとなります。
再びSlack側を見てみると、以下のように再度新しい通知が行われていました。
ということで、GuradDutyのサンプルイベントの再作成なしで、通知のみの検証を行うことができました。
感想・まとめ
ターゲットの設定でインプットトランスフォーマーを使用した通知内容の調整や、Lambdaの実行を検証したい場合はイベントを意図的に複数回発生させていたことがあったので、そういった検証時に役立ちそうな機能です。
ただ、現状は時間指定での再現のようなので、発生したイベントが一覧で出てきて、特定のイベントを選んで再生。とできるとさらに良いなと思いました。特にGuardDutyのサンプルイベントは数が多すぎるところもあるので・・。今後に期待です。