🦫

セキュリティグループの変更を自動検知して通知する仕組み

2024/10/30に公開

はじめに

表題の通り、セキュリティグループの変更を自動で検知し、メール通知する仕組みを構築しました。セキュリティグループの設定は比較的簡単ですが、その分、誤ってパブリックに公開してしまうリスクもあります。

AWS Configを使っても同様の仕組みを構築できますが、変更を行ったIAMユーザーの取得ができないと聞きました。そのため、CloudTrailログを活用した検知方法を採用しました。

実装

AWS CloudTrail => Amazon EventBridge => Amazon SNS の流れで、検知して通知を行います。それでは、それぞれを実装していきます。

AWS CloudTrail

証跡の作成を行います。CloudTrail画面から簡単に作成できるため、操作手順の説明は省略します。

Amazon SNS

「トピックの作成」を選択して以下のように設定後、作成します。

  • タイプ:スタンダード
  • 名前:security-group-topic

作成した「security-group-topic」にチェックして、「サブスクリプションの作成」を選択後、以下のように設定して、作成する。

  • プロトコル:Eメール
  • エンドポイント:各自のメールアドレス

Amazon EventBridge

EventBridgeの「ルールの作成」をクリックします。

  • 名前:ChangesScurityGroup
  • イベントバス:default
  • ルールタイプ:イベントパターンを持つルール

  • イベントソース:AWS イベントまたは EventBridge パートナーイベント
  • 作成のメソッド:パターンフォームを使用する
  • イベントパターン:AWSのサービス
  • AWS のサービス:EC2
  • イベントタイプ:AWS API Call via CloudTrail

  • イベントタイプの仕様:特定のオペレーション
設定した項目
CreateSecurityGroup
DeleteSecurityGroup
AuthorizeSecurityGroupIngress
AuthorizeSecurityGroupEgress
ModifySecurityGroupRules
CreateSecurityGroup
DeleteSecurityGroup

最終的にこういったJSONになりました。

{
  "source": ["aws.ec2"],
  "detail-type": ["AWS API Call via CloudTrail"],
  "detail": {
    "eventSource": ["ec2.amazonaws.com"],
    "eventName": ["AuthorizeSecurityGroupIngress", "AuthorizeSecurityGroupEgress", "RevokeSecurityGroupIngress", "RevokeSecurityGroupEgress", "ModifySecurityGroupRules", "CreateSecurityGroup", "DeleteSecurityGroup"]
  }
}

最後に、ターゲットとして先ほど作成したSNSを選択していきます。

  • ターゲットタイプ:AWS のサービス
  • ターゲットを選択:SNS トピック
  • トピック:security-group-topic

結果


動作確認のため、既存のセキュリティグループに上記のセキュリティグループルールを追加しました。

無事にメール通知が届きました!JSON形式のため、必要な部分だけを取り出してフォーマットする方が便利そうです。次の改善点とします。

Discussion