Security Hub に統合した IoT Device Defender の検出結果をメール通知をしてみた
こんにちは!コンサルティング部のくろすけです!
AWS IoT Device Defender の検出結果を AWS Security Hub に集約し、Security Hub に取り込まれた検出結果をメールで通知してみました。
今回は、Security Hub に取り込まれた IoT Device Defender の検出結果を、EventBridge、StepFunctions、SNS を組み合わせてメール通知してみます。
前提
- 今回の構成では、弊社クラスメソッドメンバーズのセキュア設定で作成される一部リソースを使用しています。
ただし、メンバーズへの加入が必須ではありません。該当リソースの構成の簡素化や自前での構築などでメンバーズ外の方でも技術的には実現可能です。 - Security Hub CSPM に IoT Device Defender の検出結果を集約する方法については、以下の記事にてご紹介しています。
https://dev.classmethod.jp/articles/aws-iot-device-defender-security-hub/
本記事では、上記の記事で紹介している Security Hub CSPM への集約設定が完了している前提で、主に Security Hub に取り込まれた検出結果をメール通知する部分を扱います。
概要
今回は、Security Hub に取り込まれた AWS IoT Device Defender Audit の検出結果を EventBridge で拾い、AWS StepFunctions で整形してから Amazon SNS からメール通知する構成を試します。
構成は以下の通りです。

Security Hub は新規または更新された検出結果を EventBridge イベントとして送信できます。そのため、EventBridge ルールのターゲットに SNS トピックを指定すれば、メール通知のような簡易的な通知経路を作れます。
やってみた
1. SNS トピックを作成する
今回は弊社メンバーズ前提の環境ですので、メンバーズのセキュア設定で作成される下記の SNS トピックを使用します。

2. StepFunctions ステートマシンを作成する
こちらもメンバーズのセキュア設定により作成される下記の StepFunctions ステートマシン(cm-security-alert-mail-machine)を使用します。
このステートマシンは SNS メール通知を行う場合に、メールタイトルと文面をユーザーフレンドリーな形式で送信できるように SNS へアウトプットくれるものです。
EventBridge から直接 SNS にJSONを渡しても良いのですが、メールを整形するために StepFunctions を使用します。
メンバーズには他にもメール整形用の StepFunctions ステートマシンがありますが、こちらは一部のセキュリティサービスに特化した設定が含まれているため、上記の StepFunctions ステートマシンを使用するのが管理上良いのではと思います。
2. EventBridge ルールを作成する
Security Hub の検出結果イベントを拾うため、EventBridge ルールを作成します。
イベントパターンでは、IoT Device Defender Audit の検出結果だけを対象とするため ProductArn で絞り込みます。
今回は重要度でも絞り込みを行っています。
イベントパターン
{
"source": ["aws.securityhub"],
"detail-type": ["Security Hub Findings - Imported"],
"detail": {
"findings": {
"ProductArn": ["arn:aws:securityhub:ap-northeast-1::product/aws/iot-device-defender-audit"],
"RecordState": ["ACTIVE"],
"Severity": {
"Label": ["CRITICAL", "HIGH"]
}
}
}
}
入力バス
{
"account": "$.detail.findings[0].AwsAccountId",
"description": "$.detail.findings[0].Description",
"region": "$.detail.findings[0].Region",
"resourceId": "$.detail.findings[0].Resources[0].Id",
"resourceType": "$.detail.findings[0].Resources[0].Type",
"severity": "$.detail.findings[0].Severity.Label",
"title": "$.detail.findings[0].Title"
}
入力テンプレート
{
"detail": {
"Subject": "[緊急度: <severity>] セキュリティアラート | AWS IoT Device Defender Audit | Account: <account>",
"Message": "AWS IoT Device Defender Auditでセキュリティ上好ましくない設定を検知しました。\n意図したものであるか確認してください。\n検知内容: <title>\nリソース種類: <resourceType>\nリソースID: <resourceId>\n詳細: <description>\nリージョン: <region>"
}
}
IoT Device Defender Detect の検出結果を対象にする場合は、ProductArn が arn:aws:securityhub:<region>::product/aws/iot-device-defender-detect になります。
また、IoT Device Defender Detect の検出結果は重要度が MEDIUM に統一されているため、重要度での絞り込みは不要です。
このため、IoT Device Defender Detect では必要なメトリクスのみアラームを発報するように設計するのが良いと思います。
ターゲットには、手順2でご紹介した StepFunctions ステートマシンを指定します。

3. IoT Device Defender Audit を実行する
通知の動作確認のため、IoT Device Defender Audit を実行します。


非準拠のリソースが検出されると、IoT Device Defender の Audit 結果に表示されます。

4. Security Hub で検出結果を確認する
前提記事の手順で Security Hub 連携が済んでいれば、しばらく待つと Security Hub の検出結果に IoT Device Defender の検出結果が取り込まれます。

5. メール通知を確認する
Security Hub に検出結果が取り込まれると、EventBridge ルールに一致し、SNS からメールが届きました。
今回はある程度メールタイトル、文面を整形できておりユーザーフレンドリーにできていると思います。
(StepFunctions を挟まない場合、JSON がメール通知されるため、個人的にはちょっと見づらいです。)

まとめ
今回は、Security Hub に取り込まれた IoT Device Defender の検出結果をメール通知してみました。
Security Hub、EventBridge、StepFunctions、SNS を組み合わせることで、IoT Device Defender の検出結果をユーザーフレンドリーなメール文面で通知することができます。
今回のポイントは以下です。
- Security Hub の検出結果は EventBridge イベントとして扱える
- EventBridge のターゲットに SNS を指定することでメール通知できる
- IoT Device Defender だけを通知したい場合は
ProductArnで絞り込むと分かりやすい - SNS メール通知は EventBridge と StepFunctions である程度ユーザーフレンドリーなメール文面に整形ができる
補足
IoT Device Defender の検出結果は実は SNS で通知する方法がシンプルだったりします。(設定画面は下記参照)
しかし、メールの整形ができず JSON 形式のまま届いてしまいます。
個人的には人間が通知をチェックするケースでは、ある程度整形したほうが良いと考えています。
もちろんシステムに通知を連携する場合には直接 SNS に通知を連携する方が良いです。
Audit

Detect

あとがき
IoT Device Defender の検出結果を Security Hub に集約した後は Security Hub 起点のイベントとして扱えるので、通知経路も統一できて良さそうだなと考えています。
特に弊社メンバーズのお客様向けには構築の手間削減ができるため、良さそうなのではと思います。
以上、くろすけでした!






