LoginSignup
0
0

More than 1 year has passed since last update.

使ってないセキュリティグループを削除したいときに役立つTips

Posted at

はじめに

AWSで開発をしていると、いつの間にか大量のセキュリティグループが出来てしまっていることってありませんか?
新規でリソースを作る際に「一旦検証だからいいや」とかの理由で既存のセキュリティグループを選択せず、同じような設定のものが増殖していくアレです。

開発が落ち着いたタイミングでいざリソース整理をする際にどれを使っていて、どれを使っていないのかがコンソールからはパッと見てわからないのでawsコマンドとシェルスクリプトを使った抽出方法を紹介します。

環境

  • macOS Monterey
  • MacBook Pro
  • チップ Apple M1 Pro
  • メモリ 32GB

前提

  • aws コマンドインストールされていること

抽出方法についての考え方

冒頭にも書きましたがセキュリティグループはどのリソースにアタッチしているのかがコンソールからはわかりません。
しかし、使用しているセキュリティグループは基本的に1つ以上のENI(ネットワークインターフェース)と関連付きます。
つまり、セキュリティグループの一覧とENIの一覧を照らし合わせることで、削除しても良いセキュリティグループを洗い出すということです。

やってみよう

スクリプトの中身は以下の通りです。
セキュリティグループに関連付いているENIがあればTRUE、そうでなければFALSEを書きます。

#!/bin/bash
echo "sg_id,sg_name,result"
for sg in `aws ec2 describe-security-groups --query 'SecurityGroups[].[join(\`,\`,[GroupId,GroupName])]' --output text --region ap-northeast-1 --profile default`; do
  sg_id=$(echo ${sg} | cut -d ',' -f1)

  # セキュリティグループIDを使ってENIがあるかを確認します
  eni=$(aws ec2 describe-network-interfaces --filters Name=group-id,Values=${sg_id} --query 'NetworkInterfaces[]' --output text --region ap-northeast-1 --profile default)

  if [ -n "${eni}" ]; then
    echo "${sg},true"
  else
    echo "${sg},false"
  fi
done

実行時にsh [ファイル名].sh > [ファイル名].csvなどすればCSVとして出力されます。

注意点

このスクリプトからセキュリティグループの使用有無を判断できるのは起動中のリソースに関連付いているものとなります。
よって、AutoScalingGroupの起動設定に含まれるものや、ECSのタスク定義で瞬発的に稼働するものについては検知できません。

まとめ

AWSを使っていると、いつの間にか使わなくなったリソースが増えてしまい整理に追われることはあると思います。
請求書やコストエクスプローラーを見れば使っていないリソースを確認し削除することはできますが、細々としたものはなかなか判断ができなかったりします。セキュリティグループの整理に困っている人がいれば是非試してみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0