diff --git a/prowler/providers/aws/services/sqs/sqs_service.py b/prowler/providers/aws/services/sqs/sqs_service.py index 9e6bb0c230..267b71eb92 100644 --- a/prowler/providers/aws/services/sqs/sqs_service.py +++ b/prowler/providers/aws/services/sqs/sqs_service.py @@ -51,7 +51,7 @@ class SQS(AWSService): def _get_queue_attributes(self): try: logger.info("SQS - describing queue attributes...") - valid_queues = [] + non_existing_queues = [] for queue in self.queues: try: regional_client = self.regional_clients[queue.region] @@ -73,7 +73,6 @@ class SQS(AWSService): == "true" ): queue.kms_key_id = "SqsManagedSseEnabled" - valid_queues.append(queue) except ClientError as error: if ( error.response["Error"]["Code"] @@ -82,17 +81,16 @@ class SQS(AWSService): logger.warning( f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" ) + non_existing_queues.append(queue) else: logger.error( f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" ) - valid_queues.append(queue) except Exception as error: logger.error( f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" ) - valid_queues.append(queue) - self.queues = valid_queues + self.queues = [q for q in self.queues if q not in non_existing_queues] except Exception as error: logger.error( f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" diff --git a/tests/providers/aws/services/sqs/sqs_service_test.py b/tests/providers/aws/services/sqs/sqs_service_test.py index 1c98e211f2..562d2d54bf 100644 --- a/tests/providers/aws/services/sqs/sqs_service_test.py +++ b/tests/providers/aws/services/sqs/sqs_service_test.py @@ -4,6 +4,7 @@ from uuid import uuid4 import botocore from boto3 import client +from botocore.exceptions import ClientError from moto import mock_aws from prowler.providers.aws.services.sqs.sqs_service import SQS @@ -114,3 +115,42 @@ class Test_SQS_Service: assert sqs.queues[0].region == AWS_REGION_EU_WEST_1 assert sqs.queues[0].policy assert sqs.queues[0].kms_key_id == test_key + + @mock_aws + def test_get_queue_attributes_nonexistent_queue(self): + aws_provider = set_mocked_aws_provider([AWS_REGION_EU_WEST_1]) + sqs_service = SQS(aws_provider) + + queue_url = f"https://sqs.{AWS_REGION_EU_WEST_1}.amazonaws.com/{AWS_ACCOUNT_NUMBER}/{test_queue}" + sqs_service.queues = [ + type( + "Queue", + (), + { + "id": queue_url, + "name": test_queue, + "arn": test_queue_arn, + "region": AWS_REGION_EU_WEST_1, + }, + )() + ] + + def mock_get_queue_attributes(**kwargs): + raise ClientError( + { + "Error": { + "Code": "AWS.SimpleQueueService.NonExistentQueue", + "Message": "The specified queue does not exist.", + } + }, + "GetQueueAttributes", + ) + + with patch.object( + sqs_service.regional_clients[AWS_REGION_EU_WEST_1], + "get_queue_attributes", + side_effect=mock_get_queue_attributes, + ): + sqs_service._get_queue_attributes() + + assert sqs_service.queues == []