from rdklib import Evaluator, Evaluation, ConfigRule, ComplianceType class ACCT09_DELETE_UNUSED_RESOURCES(ConfigRule): def evaluate_change(self, event, client_factory, configuration_item, valid_rule_parameters): ############################### # Add your custom logic here. # ############################### return [Evaluation(ComplianceType.NOT_APPLICABLE)] def evaluate_periodic(self, event, client_factory, valid_rule_parameters): resource_id = event["accountId"] resource_type = "AWS::::Account" base_client = client_factory.build_client('ec2') vpc_with_default = list() regions = [x['RegionName'] for x in base_client.describe_regions()['Regions']] for region in regions: client = client_factory.build_client('ec2', region=region) vpcs = client.describe_vpcs() for vpc in vpcs['Vpcs']: if vpc['IsDefault']: vpc_with_default.append(region) if vpc_with_default: return [Evaluation(ComplianceType.NON_COMPLIANT, resourceId=resource_id, resourceType=resource_type, annotation=f"Default VPCs active in account")] else: return [Evaluation(ComplianceType.COMPLIANT, resourceId=resource_id, resourceType=resource_type, annotation = f"No Default VPCs active")] def evaluate_parameters(self, rule_parameters): valid_rule_parameters = rule_parameters return valid_rule_parameters ################################ # DO NOT MODIFY ANYTHING BELOW # ################################ def lambda_handler(event, context): my_rule = ACCT09_DELETE_UNUSED_RESOURCES() evaluator = Evaluator(my_rule) return evaluator.handle(event, context)