Security Hub の Findings をEvent Bridge でフィルタリングして通知
はじめに
Security Hub の Findings を複数の通知先に振り分けるために、EventBridge Rule のイベントパターンでフィルタリングする方法を調べました。
問題
私が今回やろうとしていたことは、Security Hub に連携している Amazon Inspector の脆弱性の通知の中で、Package Manager が OS のものだけ通知する、ということでした。
解決方法
そもそもそこまで細かいフィルタリングができるのか不安だったのですが、可能でした。
ASFF 構文に記載のある情報であれば、なんでも フィルタリング可能です。[1]
方法としては、EventBridge Rule のイベントパターンを利用します。
下記は一例ですが、このようなイベントパターンの定義内で、 <finding content>
の部分に、Filtering したい属性を JSON 形式で挿入することでフィルタリング可能になります。
{
"version":"0",
"id":"CWE-event-id",
"detail-type":"Security Hub Findings - Imported",
"source":"aws.securityhub",
"account":"111122223333",
"time":"2019-04-11T21:52:17Z",
"region":"us-west-2",
"resources":[
"arn:aws:securityhub:us-west-2::product/aws/macie/arn:aws:macie:us-west-2:111122223333:integtest/trigger/6294d71b927c41cbab915159a8f326a3/alert/f2893b211841"
],
"detail":{
"findings": [{
<finding content>
}]
}
}
上記は一例なので、必要に応じて値を修正してください。
Security Hub の EventBridge イベント形式 - AWS Security Hub
ちなみに、
findings
が ASFF 構文の冒頭のFindings
と対応しています。
また、属性の記載方法ですが、ASFF 構文と同じ構造で記載が必要になります。
注意点としては、ASSF 構文のままだとエラーになるので、JSON 形式への変換が必要になります。
例えば、ASFF 構文のままだと [{ contents }]
のようにリストの中にオブジェクトを入れているような構造になっているので、[]
を取ってあげることが必要です。
私の設定はこんな感じになりました。
{
...
"detail":{
"findings": {
"Vulnerabilities" : {
"VulnerablePackages": {
"PackageManager": ["OS"]
}
}
}
}
...
ASFF 構文とは
AWS Security Finding Format の略で、Security Hub 上で、さまざまな AWS サービスやサードパーティ製の製品からの結果を集約、整理するために使われている構文。
この構文により、データ変換作業などが不要となる。
ちなみに
EventBridge のイベントパターンでは、さまざまな比較演算子が利用できるようになっています。
ワイルドカードや anything-but
などは便利なので、状況によって使い分けると捗ります!
おわりに
ASFF 構文やら EventBridge やら、JSON 読むのはめんどくさいですが、一度構造を理解すれば簡単です。
こちらもおすすめ
参考
Discussion