• 投稿者:
  • 投稿コメント:0件のコメント
  • 投稿カテゴリー:AWS
  • 投稿の最終変更日:2024年10月1日

AWS Lambdaで使われていないセキュリティグループ(SG)を自動削除する方法:完全ガイド

AWS環境では、リソースの整理と管理が重要です。特に、使われていないセキュリティグループ(SG)は、セキュリティリスクや管理の複雑さを増す要因になります。本ガイドでは、AWS Lambdaを使用して未使用のセキュリティグループを自動的に削除する方法を説明します。


前提条件

  • AWSアカウント
  • AWS CLIがインストールされたローカル環境
  • IAMポリシーでLambda関数がEC2およびVPC関連のAPIを呼び出す権限を持っていること

以下のポリシーをIAMロールにアタッチします。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeSecurityGroups",
        "ec2:DescribeNetworkInterfaces",
        "ec2:DeleteSecurityGroup"
      ],
      "Resource": "*"
    }
  ]
}

使われていないセキュリティグループの特定方法

未使用のセキュリティグループを特定するためには、以下の手順を実行します。

  1. 全てのセキュリティグループを取得:
   aws ec2 describe-security-groups --query "SecurityGroups[].GroupId" --output text > all_sg.txt
  1. 使用中のセキュリティグループを取得:
    主要なAWSリソース(EC2、RDS、ELB、Lambdaなど)から使用されているSGを収集します。
   aws ec2 describe-network-interfaces --query "NetworkInterfaces[].Groups[].GroupId" --output text | tr '\t' '\n' | sort -u > used_sg.txt
  1. 未使用のセキュリティグループを特定:
    未使用のセキュリティグループを取得します。
   comm -13 <(sort used_sg.txt) <(sort all_sg.txt) > unused_sg.txt
スポンサーリンク

AWS Lambdaの設定

  1. Lambda関数の作成:
    AWSマネジメントコンソールにログインし、Lambdaサービスを選択します。「関数の作成」をクリックします。
  2. 関数の設定:
  • 関数名: DeleteUnusedSecurityGroups
  • ランタイム: Python 3.x
  • 実行ロール: 上記で作成したIAMロールを選択

未使用セキュリティグループの削除コード

以下のPythonコードをLambda関数に追加します。このコードは、未使用のセキュリティグループを削除する機能を持っています。

import boto3

def lambda_handler(event, context):
    ec2 = boto3.client('ec2')

    # 全セキュリティグループの取得
    all_sgs = ec2.describe_security_groups()
    all_sg_ids = {sg['GroupId'] for sg in all_sgs['SecurityGroups']}

    # 使用中のセキュリティグループを取得
    used_sg_ids = set()

    # EC2のネットワークインターフェースからSGを取得
    network_interfaces = ec2.describe_network_interfaces()
    for ni in network_interfaces['NetworkInterfaces']:
        for group in ni['Groups']:
            used_sg_ids.add(group['GroupId'])

    # 未使用SGを特定
    unused_sg_ids = all_sg_ids - used_sg_ids

    # 未使用SGを削除
    for sg_id in unused_sg_ids:
        try:
            ec2.delete_security_group(GroupId=sg_id)
            print(f"Deleted unused security group: {sg_id}")
        except Exception as e:
            print(f"Error deleting security group {sg_id}: {str(e)}")

    return {
        'statusCode': 200,
        'body': f"Deleted security groups: {list(unused_sg_ids)}"
    }
スポンサーリンク

Lambda関数の実行

  1. テストの設定:
    Lambdaコンソール内で「テスト」を選択し、適当なテストイベントを作成します。
  2. 実行:
    Lambda関数を実行します。関数が正常に動作すれば、未使用のセキュリティグループが削除されます。

まとめ

本ガイドでは、AWS Lambdaを使用して未使用のセキュリティグループを自動的に削除する方法について詳しく説明しました。リソースを定期的に整理することで、AWS環境のセキュリティと管理が向上します。このプロセスを定期的に実行することをお勧めします。


コメントを残す