diff --git a/prowler/providers/aws/services/mq/__init__.py b/prowler/providers/aws/services/mq/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/aws/services/mq/mq_client.py b/prowler/providers/aws/services/mq/mq_client.py new file mode 100644 index 0000000000..cb92d30100 --- /dev/null +++ b/prowler/providers/aws/services/mq/mq_client.py @@ -0,0 +1,4 @@ +from prowler.providers.aws.services.mq.mq_service import MQ +from prowler.providers.common.provider import Provider + +mq_client = MQ(Provider.get_global_provider()) diff --git a/prowler/providers/aws/services/mq/mq_service.py b/prowler/providers/aws/services/mq/mq_service.py new file mode 100644 index 0000000000..efc9fcbe92 --- /dev/null +++ b/prowler/providers/aws/services/mq/mq_service.py @@ -0,0 +1,41 @@ +from pydantic import BaseModel + +from prowler.lib.logger import logger +from prowler.lib.scan_filters.scan_filters import is_resource_filtered +from prowler.providers.aws.lib.service.service import AWSService + + +class MQ(AWSService): + def __init__(self, provider): + # Call AWSService's __init__ + super().__init__("mq", provider) + self.brokers = {} + self.__threading_call__(self._list_brokers) + + def _list_brokers(self, regional_client): + logger.info("MQ - Listing brokers...") + try: + for broker in regional_client.list_brokers()["BrokerSummaries"]: + if not self.audit_resources or ( + is_resource_filtered(broker["BrokerArn"], self.audit_resources) + ): + broker_arn = broker["BrokerArn"] + self.brokers[broker_arn] = Broker( + arn=broker_arn, + name=broker["BrokerName"], + id=broker["BrokerId"], + region=regional_client.region, + ) + except Exception as error: + logger.error( + f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + + +class Broker(BaseModel): + """Broker model for MQ""" + + arn: str + name: str + id: str + region: str diff --git a/tests/providers/aws/services/mq/mq_service_test.py b/tests/providers/aws/services/mq/mq_service_test.py new file mode 100644 index 0000000000..4771026a6b --- /dev/null +++ b/tests/providers/aws/services/mq/mq_service_test.py @@ -0,0 +1,66 @@ +from boto3 import client +from moto import mock_aws + +from prowler.providers.aws.services.mq.mq_service import MQ +from tests.providers.aws.utils import AWS_REGION_EU_WEST_1, set_mocked_aws_provider + + +class Test_MQ_Service: + # Test MQ Service + @mock_aws + def test_service(self): + # MQ client for this test class + aws_provider = set_mocked_aws_provider([AWS_REGION_EU_WEST_1]) + mq = MQ(aws_provider) + assert mq.service == "mq" + + # Test MQ Client + @mock_aws + def test_client(self): + # MQ client for this test class + aws_provider = set_mocked_aws_provider([AWS_REGION_EU_WEST_1]) + mq = MQ(aws_provider) + for regional_client in mq.regional_clients.values(): + assert regional_client.__class__.__name__ == "MQ" + + # Test MQ Session + @mock_aws + def test__get_session__(self): + # MQ client for this test class + aws_provider = set_mocked_aws_provider([AWS_REGION_EU_WEST_1]) + mq = MQ(aws_provider) + assert mq.session.__class__.__name__ == "Session" + + # Test MQ List Brokers + @mock_aws + def test_list_brokers(self): + # Generate MQ client + mq_client = client("mq", region_name=AWS_REGION_EU_WEST_1) + broker = mq_client.create_broker( + AutoMinorVersionUpgrade=True, + BrokerName="my-broker", + DeploymentMode="SINGLE_INSTANCE", + EngineType="ActiveMQ", + EngineVersion="5.15.0", + HostInstanceType="mq.t2.micro", + PubliclyAccessible=True, + Users=[ + { + "ConsoleAccess": False, + "Groups": [], + "Password": "password", + "Username": "user", + } + ], + ) + broker_arn = broker["BrokerArn"] + + # MQ Client for this test class + aws_provider = set_mocked_aws_provider([AWS_REGION_EU_WEST_1]) + mq = MQ(aws_provider) + + assert len(mq.brokers) == 1 + assert mq.brokers[broker_arn].arn == broker_arn + assert mq.brokers[broker_arn].name == "my-broker" + assert mq.brokers[broker_arn].region == AWS_REGION_EU_WEST_1 + assert mq.brokers[broker_arn].id == broker["BrokerId"]