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