description_regions - это функция клиента ec2, а не ресурса ec2. Попробуйте это:
#!/usr/bin/env python
import boto3
ec2 = boto3.client('ec2')
regions = ec2.describe_regions().get('Regions',[])
for region in regions:
reg=region['RegionName']
Однако вы никоим образом не используете название региона. Следующий код выполняет итерации по регионам, устанавливает новый ресурс ec2 в каждом регионе и повторяет ваши сканирования.
#!/usr/bin/env python
import boto3
ec2Client = boto3.client('ec2')
regions = ec2Client.describe_regions().get('Regions',[])
for region in regions:
reg=region['RegionName']
print ('Checking region {}'.format(reg))
ec2 = boto3.resource('ec2', region_name=reg)
sgs = list(ec2.security_groups.all())
insts = list(ec2.instances.all())
all_sgs = set([sg.group_name for sg in sgs])
all_inst_sgs = set([sg['GroupName'] for inst in insts for sg in inst.security_groups])
unused_sgs = all_sgs - all_inst_sgs
print (' Total SGs:', len(all_sgs))
print (' SGS attached to instances:', len(all_inst_sgs))
print (' Orphaned SGs:', len(unused_sgs))
print (' Unattached SG names:', unused_sgs)
Во время тестирования я обнаружил, что у меня много неиспользованных СГ, спасибо.