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": "*"
}
]
}
使われていないセキュリティグループの特定方法
未使用のセキュリティグループを特定するためには、以下の手順を実行します。
- 全てのセキュリティグループを取得:
aws ec2 describe-security-groups --query "SecurityGroups[].GroupId" --output text > all_sg.txt
- 使用中のセキュリティグループを取得:
主要な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
- 未使用のセキュリティグループを特定:
未使用のセキュリティグループを取得します。
comm -13 <(sort used_sg.txt) <(sort all_sg.txt) > unused_sg.txt
スポンサーリンク
AWS Lambdaの設定
- Lambda関数の作成:
AWSマネジメントコンソールにログインし、Lambdaサービスを選択します。「関数の作成」をクリックします。 - 関数の設定:
- 関数名:
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関数の実行
- テストの設定:
Lambdaコンソール内で「テスト」を選択し、適当なテストイベントを作成します。 - 実行:
Lambda関数を実行します。関数が正常に動作すれば、未使用のセキュリティグループが削除されます。
まとめ
本ガイドでは、AWS Lambdaを使用して未使用のセキュリティグループを自動的に削除する方法について詳しく説明しました。リソースを定期的に整理することで、AWS環境のセキュリティと管理が向上します。このプロセスを定期的に実行することをお勧めします。