fu3ak1's tech days

何事もシンプルに。主にAWS関連の記事を書いています

EventBridgeのアーカイブ&リプレイ機能を使用してイベントを再現してみる

EventBridgeの検証にとても役立ちそうな機能がリリースされていました。

aws.amazon.com

EventBridgeとは

f:id:fu3ak1:20201108162559p:plain
Amazon 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で検知した内容をターゲットに渡すことができます。

f:id:fu3ak1:20201108153656p:plain

ターゲットにはChatbotを設定したSNSトピックを設定します。

f:id:fu3ak1:20201108153844p:plain

その他は基本デフォルトでOKです。この2つを設定して作成します。

ルールができたので、次にアーカイブを作成していきます。左側のメニューからアーカイブを選択すればOKです。

f:id:fu3ak1:20201108154308p:plain

任意の名前を入力し、ソースには今回作成したルールが所属するデフォルトのイベントバス「default」を選択します。

f:id:fu3ak1:20201108154419p:plain

イベントのフィルタでは、すべてのイベントを対象としても良いのですが、今回はGuradDutyの検証のため、ルール作成時と同様のフィルタパターンを設定します。

f:id:fu3ak1:20201108154604p:plain

アーカイブができました。

f:id:fu3ak1:20201108154743p:plain

アーカイブの準備ができたので初回のGuradDutyのサンプルイベントを作成してみます。

GuardDuty>設定>結果のサンプルから生成できます。ポチっと。

f:id:fu3ak1:20201108155040p:plain

しばらくするとSlackに以下のようにたくさんメッセージが飛んできます。

f:id:fu3ak1:20201108155741p:plain

これらのイベントをEventBridge経由で再現してみます。EventBridgeのアーカイブから新しい再生を開始を選択します。

f:id:fu3ak1:20201108160040p:plain

作成しておいたアーカイブとルールを選択し、発生した時刻が含まれるよう開始、終了時刻を選択します。

f:id:fu3ak1:20201108160257p:plain

再生を開始をクリックするとイベントが再生され、しばらくすると以下の通りイベントが再生済みとなります。

f:id:fu3ak1:20201108160542p:plain

再びSlack側を見てみると、以下のように再度新しい通知が行われていました。

f:id:fu3ak1:20201108160652p:plain

ということで、GuradDutyのサンプルイベントの再作成なしで、通知のみの検証を行うことができました。

感想・まとめ

ターゲットの設定でインプットトランスフォーマーを使用した通知内容の調整や、Lambdaの実行を検証したい場合はイベントを意図的に複数回発生させていたことがあったので、そういった検証時に役立ちそうな機能です。

ただ、現状は時間指定での再現のようなので、発生したイベントが一覧で出てきて、特定のイベントを選んで再生。とできるとさらに良いなと思いました。特にGuardDutyのサンプルイベントは数が多すぎるところもあるので・・。今後に期待です。