From 7ff80dbb8f186ca4c2b2be14ebd777889968c453 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20Mart=C3=ADn?= Date: Tue, 27 Aug 2024 13:22:54 +0200 Subject: [PATCH] fix(rds): get the db_instances values (#4866) --- .../providers/aws/services/rds/rds_service.py | 2 +- .../aws/services/rds/rds_service_test.py | 87 +++++++++++++------ 2 files changed, 63 insertions(+), 26 deletions(-) diff --git a/prowler/providers/aws/services/rds/rds_service.py b/prowler/providers/aws/services/rds/rds_service.py index 05498c8e89..19e277fd78 100644 --- a/prowler/providers/aws/services/rds/rds_service.py +++ b/prowler/providers/aws/services/rds/rds_service.py @@ -132,7 +132,7 @@ class RDS(AWSService): def __describe_db_certificate__(self, regional_client): logger.info("RDS - Describe DB Certificate...") try: - for instance in self.db_instances: + for instance in self.db_instances.values(): if instance.region == regional_client.region: describe_db_certificates_paginator = regional_client.get_paginator( "describe_certificates" diff --git a/tests/providers/aws/services/rds/rds_service_test.py b/tests/providers/aws/services/rds/rds_service_test.py index e8a3a18152..eb981a4434 100644 --- a/tests/providers/aws/services/rds/rds_service_test.py +++ b/tests/providers/aws/services/rds/rds_service_test.py @@ -1,11 +1,12 @@ from datetime import datetime +from unittest import mock from unittest.mock import patch import botocore from boto3 import client from moto import mock_aws -from prowler.providers.aws.services.rds.rds_service import RDS +from prowler.providers.aws.services.rds.rds_service import RDS, Certificate, DBInstance from tests.providers.aws.utils import ( AWS_ACCOUNT_NUMBER, AWS_REGION_US_EAST_1, @@ -161,31 +162,67 @@ class Test_RDS_Service: @mock_aws def test__describe_db_certificate__(self): - conn = client("rds", region_name=AWS_REGION_US_EAST_1) - conn.create_db_parameter_group( - DBParameterGroupName="test", - DBParameterGroupFamily="default.postgres9.3", - Description="test parameter group", - ) - conn.create_db_instance( - DBInstanceIdentifier="db-master-1", - AllocatedStorage=10, - Engine="postgres", - DBName="staging-postgres", - DBInstanceClass="db.m1.small", - DBParameterGroupName="test", - CACertificateIdentifier="rds-cert-2015", - ) + rds_client = mock.MagicMock + rds_client.db_instances = { + "arn:aws:rds:us-east-1:123456789012:db:db-master-1": DBInstance( + id="db-master-1", + region=AWS_REGION_US_EAST_1, + endpoint={ + "Address": "db-master-1.aaaaaaaaaa.us-east-1.rds.amazonaws.com", + "Port": 5432, + }, + status="available", + public=True, + encrypted=True, + backup_retention_period=10, + cloudwatch_logs=["audit", "error"], + deletion_protection=True, + auto_minor_version_upgrade=True, + multi_az=True, + cluster_id="cluster-postgres", + tags=[{"Key": "test", "Value": "test"}], + parameter_groups=["test"], + copy_tags_to_snapshot=True, + ca_cert="rds-cert-2015", + arn="arn:aws:rds:us-east-1:123456789012:db:db-master-1", + engine="postgres", + engine_version="9.6.9", + username="test", + iam_auth=False, + cert=[ + Certificate( + id="rds-cert-2015", + arn="arn:aws:rds:us-east-1:123456789012:cert:rds-cert-2015", + region=AWS_REGION_US_EAST_1, + type="CA", + valid_from=datetime(2015, 1, 1), + valid_till=datetime(2025, 1, 1), + customer_override=False, + customer_override_valid_till=datetime(2025, 1, 1), + ) + ], + ) + } - # RDS client for this test class - aws_provider = set_mocked_aws_provider([AWS_REGION_US_EAST_1]) - rds = RDS(aws_provider) - assert len(rds.db_instances) == 1 - db_instance_arn, db_instance = next(iter(rds.db_instances.items())) - assert db_instance.id == "db-master-1" - assert db_instance.region == AWS_REGION_US_EAST_1 - for cert in db_instance.cert: - assert cert["ValidTill"] < datetime.now() + with mock.patch( + "prowler.providers.aws.services.rds.rds_service.RDS", + new=rds_client, + ): + from prowler.providers.aws.services.rds.rds_service import RDS + + rds = RDS(rds_client) + assert len(rds.db_instances) == 1 + db_instance_arn, db_instance = next(iter(rds.db_instances.items())) + assert db_instance.id == "db-master-1" + assert db_instance.region == AWS_REGION_US_EAST_1 + assert len(db_instance.cert) == 1 + for cert in db_instance.cert: + assert cert.id == "rds-cert-2015" + assert cert.type == "CA" + assert cert.valid_from == datetime(2015, 1, 1) + assert cert.valid_till == datetime(2025, 1, 1) + assert not cert.customer_override + assert cert.customer_override_valid_till == datetime(2025, 1, 1) # Test RDS Describe DB Snapshots @mock_aws