From 3b7b16acfd908f78713867bf5b6883ceee1ff414 Mon Sep 17 00:00:00 2001 From: Pepe Fagoaga Date: Mon, 27 Mar 2023 17:27:50 +0200 Subject: [PATCH] fix(resource_not_found): Handle error (#2136) --- .../codeartifact/codeartifact_service.py | 26 ++++++++---- .../providers/aws/services/ec2/ec2_service.py | 42 ++++++++++++------- 2 files changed, 45 insertions(+), 23 deletions(-) diff --git a/prowler/providers/aws/services/codeartifact/codeartifact_service.py b/prowler/providers/aws/services/codeartifact/codeartifact_service.py index b0a99464..0719e98a 100644 --- a/prowler/providers/aws/services/codeartifact/codeartifact_service.py +++ b/prowler/providers/aws/services/codeartifact/codeartifact_service.py @@ -2,6 +2,7 @@ import threading from enum import Enum from typing import Optional +from botocore.exceptions import ClientError from pydantic import BaseModel from prowler.lib.logger import logger @@ -68,8 +69,8 @@ class CodeArtifact: def __list_packages__(self, regional_client): logger.info("CodeArtifact - Listing Packages and retrieving information...") - try: - for repository in self.repositories: + for repository in self.repositories: + try: if self.repositories[repository].region == regional_client.region: list_packages_paginator = regional_client.get_paginator( "list_packages" @@ -142,12 +143,21 @@ class CodeArtifact: # Save all the packages information self.repositories[repository].packages = packages - except Exception as error: - logger.error( - f"{regional_client.region} --" - f" {error.__class__.__name__}[{error.__traceback__.tb_lineno}]:" - f" {error}" - ) + except ClientError as error: + if error.response["Error"]["Code"] == "ResourceNotFoundException": + logger.warning( + f"{regional_client.region} --" + f" {error.__class__.__name__}[{error.__traceback__.tb_lineno}]:" + f" {error}" + ) + continue + + except Exception as error: + logger.error( + f"{regional_client.region} --" + f" {error.__class__.__name__}[{error.__traceback__.tb_lineno}]:" + f" {error}" + ) def __list_tags_for_resource__(self): logger.info("CodeArtifact - List Tags...") diff --git a/prowler/providers/aws/services/ec2/ec2_service.py b/prowler/providers/aws/services/ec2/ec2_service.py index 4fb32a21..e8a4dac9 100644 --- a/prowler/providers/aws/services/ec2/ec2_service.py +++ b/prowler/providers/aws/services/ec2/ec2_service.py @@ -195,8 +195,8 @@ class EC2: def __get_snapshot_public__(self): logger.info("EC2 - Gettting snapshots encryption...") - try: - for snapshot in self.snapshots: + for snapshot in self.snapshots: + try: regional_client = self.regional_clients[snapshot.region] snapshot_public = regional_client.describe_snapshot_attribute( Attribute="createVolumePermission", SnapshotId=snapshot.id @@ -205,10 +205,20 @@ class EC2: if "Group" in permission: if permission["Group"] == "all": snapshot.public = True - except Exception as error: - logger.error( - f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" - ) + + except ClientError as error: + if error.response["Error"]["Code"] == "InvalidSnapshot.NotFound": + logger.warning( + f"{snapshot.region} --" + f" {error.__class__.__name__}[{error.__traceback__.tb_lineno}]:" + f" {error}" + ) + continue + + except Exception as error: + logger.error( + f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) def __describe_network_interfaces__(self, regional_client): logger.info("EC2 - Describing Network Interfaces...") @@ -239,23 +249,25 @@ class EC2: def __get_instance_user_data__(self): logger.info("EC2 - Gettting instance user data...") - try: - for instance in self.instances: + for instance in self.instances: + try: regional_client = self.regional_clients[instance.region] user_data = regional_client.describe_instance_attribute( Attribute="userData", InstanceId=instance.id )["UserData"] if "Value" in user_data: instance.user_data = user_data["Value"] - except ClientError as error: - if error.response["Error"]["Code"] == "InvalidInstanceID.NotFound": - logger.warning( + + except ClientError as error: + if error.response["Error"]["Code"] == "InvalidInstanceID.NotFound": + logger.warning( + f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + continue + except Exception as error: + logger.error( f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" ) - except Exception as error: - logger.error( - f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" - ) def __describe_images__(self, regional_client): logger.info("EC2 - Describing Images...")