feat(MQ): add new service MQ (#5419)

This commit is contained in:
Hugo Pereira Brito
2024-10-15 20:32:28 +02:00
committed by GitHub
parent c90cb3712b
commit c0ac4c7c30
4 changed files with 111 additions and 0 deletions
@@ -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())
@@ -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
@@ -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"]