AWS セキュリティ グループを効果的に管理することは、安全でコスト効率の高いクラウド環境を維持するために重要です。セキュリティ グループは AWS のネットワーク セキュリティの重要な部分ですが、時間の経過とともに、未使用のセキュリティ グループが蓄積される可能性があります。これらの未使用のグループは環境を乱雑にするだけでなく、セキュリティ上のリスクを引き起こしたり、不必要にコストを増加させたりする可能性があります。
この記事では、Python と Boto3 を使用して、AWS 環境内で未使用のセキュリティ グループを特定し、検証し、それらが他のリソースによって参照されていないことを確認する方法を説明します。また、これらのグループを削除できるかどうかを安全に判断する方法についても説明します。
このチュートリアルを進めるには、次のものが必要です:
AWS アカウント: 未使用のセキュリティ グループを検索する AWS 環境にアクセスできることを確認してください。
Boto3 がインストールされました: 以下を実行して Boto3 Python SDK をインストールできます:
pip install boto3
AWS 認証情報が設定されました: AWS CLI を使用するか、IAM ロールまたは環境変数を使用してコード内で直接 AWS 認証情報が設定されていることを確認します。
特定の AWS リージョンで未使用のセキュリティ グループを識別し、それらを検証し、他のグループによって参照されているかどうかを確認するコードを見てみましょう。
pip install boto3
import boto3 from botocore.exceptions import ClientError def get_unused_security_groups(region='us-east-1'): """ Find security groups that are not being used by any resources. """ ec2_client = boto3.client('ec2', region_name=region) try: # Get all security groups security_groups = ec2_client.describe_security_groups()['SecurityGroups'] # Get all network interfaces enis = ec2_client.describe_network_interfaces()['NetworkInterfaces'] # Create set of security groups in use used_sg_ids = set() # Check security groups attached to ENIs for eni in enis: for group in eni['Groups']: used_sg_ids.add(group['GroupId']) # Find unused security groups unused_groups = [] for sg in security_groups: if sg['GroupId'] not in used_sg_ids: # Skip default security groups as they cannot be deleted if sg['GroupName'] != 'default': unused_groups.append({ 'GroupId': sg['GroupId'], 'GroupName': sg['GroupName'], 'Description': sg['Description'], 'VpcId': sg.get('VpcId', 'EC2-Classic') }) # Print results if unused_groups: print(f"\nFound {len(unused_groups)} unused security groups in {region}:") print("-" * 80) for group in unused_groups: print(f"Security Group ID: {group['GroupId']}") print(f"Name: {group['GroupName']}") print(f"Description: {group['Description']}") print(f"VPC ID: {group['VpcId']}") print("-" * 80) else: print(f"\nNo unused security groups found in {region}") return unused_groups except ClientError as e: print(f"Error retrieving security groups: {str(e)}") return None
def check_sg_references(ec2_client, group_id): """ Check if a security group is referenced in other security groups' rules """ try: # Check if the security group is referenced in other groups response = ec2_client.describe_security_groups( Filters=[ { 'Name': 'ip-permission.group-id', 'Values': [group_id] } ] ) referencing_groups = response['SecurityGroups'] # Check for egress rules response = ec2_client.describe_security_groups( Filters=[ { 'Name': 'egress.ip-permission.group-id', 'Values': [group_id] } ] ) referencing_groups.extend(response['SecurityGroups']) return referencing_groups except ClientError as e: print(f"Error checking security group references: {str(e)}") return None
スクリプトを実行するには、validate_unused_groups 関数を実行するだけです。たとえば、リージョンを us-east-1 に設定すると、スクリプトは次のようになります:
def validate_unused_groups(region='us-east-1'): """ Validate and provide detailed information about unused security groups """ ec2_client = boto3.client('ec2', region_name=region) unused_groups = get_unused_security_groups(region) if not unused_groups: return print("\nValidating security group references...") print("-" * 80) for group in unused_groups: group_id = group['GroupId'] referencing_groups = check_sg_references(ec2_client, group_id) if referencing_groups: print(f"\nSecurity Group {group_id} ({group['GroupName']}) is referenced by:") for ref_group in referencing_groups: print(f"- {ref_group['GroupId']} ({ref_group['GroupName']})") else: print(f"\nSecurity Group {group_id} ({group['GroupName']}) is not referenced by any other groups") print("This security group can be safely deleted if not needed")
このスクリプトを使用すると、AWS で未使用のセキュリティ グループを見つけるプロセスを自動化し、不要なリソースを保持しないようにできます。これにより、不要なリソースが削除されるため、混乱が軽減され、セキュリティ体制が向上し、コストが削減される可能性があります。
このスクリプトは次のように拡張できます。
AWS 環境を安全に保ち、整理整頓してください!
以上がPython と Boto3 を使用した AWS の未使用のセキュリティ グループの検索と検証の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。