EventBridge経由でMicrosoft Teamsにイベント通知する

2021.09.07

はじめに

こんにちは。大阪オフィスの林です。

EventBridge経由でMicrosoft Teamsにイベント通知する検証を行う機会がありましたので、内容をまとめておきたいと思います。簡単なアーキテクチャですが下記の通りとなります。

なお、今回の検証では下記の情報を参考にしています。
ウェブフックを使用して Amazon SNS メッセージを Amazon Chime、Slack、または Microsoft Teams に発行する方法を教えてください。

やってみた

Teams側の準備

通知用のチームを作成します。今回は新規作成していますが、既存のチームでも問題ありません。

今回の検証では「最初から」を選択します。

今回の検証では「プライベート」を選択します。

任意のチーム名を入力し、作成を選択します。

検証なのでメンバーは追加せず、スキップを選択します。

チームを選択した状態で右上のメニューから「コネクタ」を選択します。

「Incoming-Webhook」を検索し「追加」を選択します。

「追加」を選択します。

再び「Incoming-Webhook」を検索し「構成」を選択します。

任意の名前を入力し、作成を選択します。

WebhookURLをコピーし、完了を選択します。

元の画面に戻るので「×」で閉じます。

AWS側の作業

Lambdaの作成

Lambdaのダッシュボードに移動し、「関数の作成」を選択します。

任意の関数名を入力します。今回の検証ではラインタイムにPython 3.9を選択します。

url = "https://xxxxxxx"に先ほどコピーしたWebhookURLに置き換え、以下のコードを貼り付け、Deployを選択します。

import urllib3 
import json
http = urllib3.PoolManager() 
def lambda_handler(event, context): 
    url = "https://xxxxxxx"    
    msg = {
        "text": event['Records'][0]['Sns']['Message']
    }
    encoded_msg = json.dumps(msg).encode('utf-8')
    resp = http.request('POST',url, body=encoded_msg)
    print({
        "message": event['Records'][0]['Sns']['Message'], 
        "status_code": resp.status, 
        "response": resp.data
    })

Webhookが機能するか確認します。「Test」から「Configure test event」を選択します。

「新しいテストイベントの作成」が選択されている状態で、「イベントテンプレート」に「sns-notification」を選択し、「イベント名」に任意の名前を入力後、作成を選択します。

「Test」を選択します。

status codeの戻り値に200が返ってきたことを確認します。

Teams側でexample messageというメッセージが通知されていることを確認します。

SNSの作成

SNSのダッシュボードに移動し、トピック名を入力し「次のステップ」を選択します。

今回は「スタンダード」を選択し、任意の名前、表示名を入力します。

その他はデフォルトで「トピックの作成」を選択します。

左のメニューから「サブスクリプション」-「サブスクリプションの作成」を選択します。

「トピックARN」に上記で作成したSNSトピックのARNを指定し、「プロトコル」に「AWS Lambda」を選択後、「エンドポイント」に作成したLambdaのARNを指定し、サブスクリプションの作成を選択します。

サブスクリプションが正常に作成されたことを確認します。

EventBridgeの作成

EventBridgeのダッシュボードに移動し、左メニュー「ルール」-「ルールの作成」を選択します。※既存のルールに通知を追加する場合は、対象のルールを編集し手順を進めて下さい。

任意の名前と説明を入力し、パターンを定義でトリガーを指定します。今回の検証ではGuardDutyのSeverityが7.0以上のFindingを通知対象とします。

ターゲットに「SNSトピック」、トピックに先ほど作成したトピックを選択します。※既存のルールに通知を追加する場合は、「ターゲットの追加」を選択し同様の手順を進めて下さい。

今回の検証では入力トランスフォーマーを使用して検知したFindingのタイトルと、Findingへのリンクのみ通知対象とし「作成」を選択します。

ルールが正常に作成されたことを確認します。

通知のテスト

GuardDutyからサンプルイベントを発生させます。

イベントがTeamsに通知されたことを確認します。

まとめ

比較的簡単にMicrosoft Teamsへの通知まで実装することが出来ました。通知内容のカスタマイズなどは別途必要かもしれませんが、最低限の通知をMicrosoft Teamsで受けたいという要件に対してはかなりスピーディに対応出来そうな内容では無いでしょうか。参考になりましたら幸いです。

以上、大阪オフィスの林がお送りしました!