パブリックからのアクセスを許可しているセキュリティグループを見つけるツール

少し前の話になるのですが、LLMによる開発支援機能を試したいなぁと思って、Cursorを使ってみました。
(同じエディタ内で完結するCursorの開発体験はめっちゃよかったです!)
今回はそのなかで作ったAWSのちょっと便利ツールについて紹介します。

GitHub - ktamamu/NeKo_AWS_SG

作った理由

皆で共有する検証環境に、意図せずグローバルに許可を与える可能性のあるセキュリティグループが残ったままになっているのを見かけたことがきっかけです。チュートリアル通りに設定したままのものがそのまま残っているケース等だと思います。

AWS Firewall Managerを使えばこういったケースを特定できるとは思いますが、月額$100ですし、実行したらSlackに通知してくれるくらいのライトさで確認したり監視できないかなぁと思ったのがきっかけです。これを定期的に実行するためにLambda化するベースとして試しに作ってみました。

機能

  • AWSアカウント内のすべてのセキュリティグループをスキャン
  • グローバルに対して公開されているインバウンドルールを持つセキュリティグループを検出
    • Pythonの標準ライブラリipaddressでプライベートIP以外を特定。
  • 検出結果をSlackに通知

使用方法

インストール方法のとおりにセットアップして、下記コマンドで実行します。

1
python src/main.py

該当するセキュリティグループが見つかった場合、下記のような通知が飛びます。

Slackの通知画面(該当セキュリティグループあり)

意図的に外部公開しているセキュリティグループは除外したいケースもあると思うので、その場合はYAMLファイルに該当のセキュリティグループの情報を./config/exclusions.yamlに追加します

1
2
3
4
5
6
7
8
- group_id: sg-12345678
rules:
- ip_protocol: tcp
port_range:
from: 443
to: 443
ip_ranges:
- 0.0.0.0/0

そうすると、該当するセキュリティグループの通知はスルーされるようになります。

Slackの通知画面(該当セキュリティグループなし)