fix(aws): review checks with wrong attributes (#5503)

This commit is contained in:
Sergio Garcia
2024-10-28 08:45:03 +01:00
committed by GitHub
parent 0331af02ac
commit 0f9ebecbb7
25 changed files with 194 additions and 46 deletions
@@ -7,6 +7,7 @@ from prowler.providers.aws.services.ecr.ecr_service import (
ScanningRule,
)
from tests.providers.aws.utils import (
AWS_ACCOUNT_ARN,
AWS_ACCOUNT_NUMBER,
AWS_REGION_EU_WEST_1,
set_mocked_aws_provider,
@@ -43,6 +44,7 @@ class Test_ecr_registry_scan_images_on_push_enabled:
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
repositories=[],
@@ -66,9 +68,11 @@ class Test_ecr_registry_scan_images_on_push_enabled:
def test_registry_scan_on_push_enabled(self):
ecr_client = mock.MagicMock
ecr_client.audited_account_arn = AWS_ACCOUNT_ARN
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
repositories=[
@@ -107,13 +111,19 @@ class Test_ecr_registry_scan_images_on_push_enabled:
assert result[0].status == "PASS"
assert search("with scan on push", result[0].status_extended)
assert result[0].resource_id == AWS_ACCOUNT_NUMBER
assert (
result[0].resource_arn
== f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}"
)
assert result[0].region == AWS_REGION_EU_WEST_1
def test_scan_on_push_enabled_with_filters(self):
ecr_client = mock.MagicMock
ecr_client.audited_account_arn = AWS_ACCOUNT_ARN
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
repositories=[
@@ -155,13 +165,19 @@ class Test_ecr_registry_scan_images_on_push_enabled:
result[0].status_extended,
)
assert result[0].resource_id == AWS_ACCOUNT_NUMBER
assert (
result[0].resource_arn
== f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}"
)
assert result[0].region == AWS_REGION_EU_WEST_1
def test_scan_on_push_disabled(self):
ecr_client = mock.MagicMock
ecr_client.audited_account_arn = AWS_ACCOUNT_ARN
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
repositories=[
@@ -195,4 +211,8 @@ class Test_ecr_registry_scan_images_on_push_enabled:
assert result[0].status == "FAIL"
assert search("scanning without scan on push", result[0].status_extended)
assert result[0].resource_id == AWS_ACCOUNT_NUMBER
assert (
result[0].resource_arn
== f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}"
)
assert result[0].region == AWS_REGION_EU_WEST_1
@@ -51,6 +51,7 @@ class Test_ecr_repositories_lifecycle_policy_enabled:
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
repositories=[],
@@ -77,6 +78,7 @@ class Test_ecr_repositories_lifecycle_policy_enabled:
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
rules=[],
@@ -121,6 +123,7 @@ class Test_ecr_repositories_lifecycle_policy_enabled:
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
rules=[],
@@ -63,6 +63,7 @@ class Test_ecr_repositories_not_publicly_accessible:
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
repositories=[],
@@ -91,6 +92,7 @@ class Test_ecr_repositories_not_publicly_accessible:
ecr_client.audited_account = AWS_ACCOUNT_NUMBER
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
repositories=[
@@ -134,6 +136,7 @@ class Test_ecr_repositories_not_publicly_accessible:
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
repositories=[
@@ -179,6 +182,7 @@ class Test_ecr_repositories_not_publicly_accessible:
ecr_client.audited_account = AWS_ACCOUNT_NUMBER
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
repositories=[
@@ -51,6 +51,7 @@ class Test_ecr_repositories_scan_images_on_push_enabled:
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
repositories=[],
@@ -77,6 +78,7 @@ class Test_ecr_repositories_scan_images_on_push_enabled:
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
repositories=[
@@ -120,6 +122,7 @@ class Test_ecr_repositories_scan_images_on_push_enabled:
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
repositories=[
@@ -62,6 +62,7 @@ class Test_ecr_repositories_scan_vulnerabilities_in_latest_image:
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
repositories=[],
@@ -89,6 +90,7 @@ class Test_ecr_repositories_scan_vulnerabilities_in_latest_image:
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
repositories=[
@@ -126,6 +128,7 @@ class Test_ecr_repositories_scan_vulnerabilities_in_latest_image:
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
repositories=[
@@ -184,6 +187,7 @@ class Test_ecr_repositories_scan_vulnerabilities_in_latest_image:
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
repositories=[
@@ -242,6 +246,7 @@ class Test_ecr_repositories_scan_vulnerabilities_in_latest_image:
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
repositories=[
@@ -304,6 +309,7 @@ class Test_ecr_repositories_scan_vulnerabilities_in_latest_image:
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
repositories=[
@@ -366,6 +372,7 @@ class Test_ecr_repositories_scan_vulnerabilities_in_latest_image:
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
repositories=[
@@ -428,6 +435,7 @@ class Test_ecr_repositories_scan_vulnerabilities_in_latest_image:
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
repositories=[
@@ -490,6 +498,7 @@ class Test_ecr_repositories_scan_vulnerabilities_in_latest_image:
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
repositories=[
@@ -552,6 +561,7 @@ class Test_ecr_repositories_scan_vulnerabilities_in_latest_image:
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
repositories=[
@@ -610,6 +620,7 @@ class Test_ecr_repositories_scan_vulnerabilities_in_latest_image:
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
repositories=[
@@ -51,6 +51,7 @@ class Test_ecr_repositories_tag_immutability:
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
repositories=[],
@@ -77,6 +78,7 @@ class Test_ecr_repositories_tag_immutability:
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
rules=[],
@@ -122,6 +124,7 @@ class Test_ecr_repositories_tag_immutability:
ecr_client.registries = {}
ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
id=AWS_ACCOUNT_NUMBER,
arn=f"arn:aws:ecr:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:registry/{AWS_ACCOUNT_NUMBER}",
region=AWS_REGION_EU_WEST_1,
scan_type="BASIC",
rules=[],
@@ -197,6 +197,78 @@ class Test_rds_instance_certificate_expiration:
)
assert result[0].resource_tags == []
def test_rds_certificate_less_than_one_month(self):
valid_from = datetime.now(utc) - relativedelta.relativedelta(months=7)
valid_till = datetime.now(utc) + relativedelta.relativedelta(weeks=2)
customer_override_valid = datetime.now(utc) + relativedelta.relativedelta(
weeks=2
)
rds_client = mock.MagicMock
instance_arn = (
f"arn:aws:rds:{AWS_REGION}:{AWS_ACCOUNT_NUMBER_CON}:db:db-master-1"
)
rds_client.db_instances = {
instance_arn: DBInstance(
id="db-master-1",
arn=instance_arn,
engine="aurora-postgresql",
engine_version="aurora14",
status="available",
public=False,
encrypted=True,
deletion_protection=True,
auto_minor_version_upgrade=False,
multi_az=True,
username="test",
iam_auth=False,
region=AWS_REGION,
ca_cert="rds-ca-rsa2048-g1",
endpoint={},
cert=[
Certificate(
id="rds-ca-rsa2048-g1",
arn=f"arn:aws:rds:{AWS_REGION}::cert:rds-ca-2019",
type="CA",
valid_from=valid_from,
valid_till=valid_till,
customer_override=False,
customer_override_valid_till=customer_override_valid,
)
],
)
}
with mock.patch(
"prowler.providers.aws.services.rds.rds_service.RDS",
new=rds_client,
), mock.patch(
"prowler.providers.aws.services.rds.rds_client.rds_client",
new=rds_client,
):
# Test Check
from prowler.providers.aws.services.rds.rds_instance_certificate_expiration.rds_instance_certificate_expiration import (
rds_instance_certificate_expiration,
)
check = rds_instance_certificate_expiration()
result = check.execute()
assert len(result) == 1
assert result[0].status == "FAIL"
assert result[0].check_metadata.Severity == "high"
assert (
result[0].status_extended
== "RDS Instance db-master-1 certificate less than 1 month of validity."
)
assert result[0].resource_id == "db-master-1"
assert result[0].region == AWS_REGION
assert (
result[0].resource_arn
== f"arn:aws:rds:{AWS_REGION}:{AWS_ACCOUNT_NUMBER_CON}:db:db-master-1"
)
assert result[0].resource_tags == []
def test_rds_certificate_between_three_and_six_months(self):
valid_from = datetime.now(utc) - relativedelta.relativedelta(months=7)
valid_till = datetime.now(utc) + relativedelta.relativedelta(months=4)
@@ -1,7 +1,7 @@
from unittest import mock
from prowler.providers.aws.services.route53.route53_service import Domain
from tests.providers.aws.utils import AWS_REGION_US_EAST_1
from tests.providers.aws.utils import AWS_ACCOUNT_ARN, AWS_REGION_US_EAST_1
class Test_route53_domains_privacy_protection_enabled:
@@ -25,10 +25,14 @@ class Test_route53_domains_privacy_protection_enabled:
def test_domain_privacy_protection_disabled(self):
route53domains = mock.MagicMock
route53domains.audited_account_arn = AWS_ACCOUNT_ARN
domain_name = "test-domain.com"
route53domains.domains = {
domain_name: Domain(
name=domain_name, region=AWS_REGION_US_EAST_1, admin_privacy=False
name=domain_name,
arn=f"arn:aws:route53:::domain/{domain_name}",
region=AWS_REGION_US_EAST_1,
admin_privacy=False,
)
}
@@ -46,6 +50,7 @@ class Test_route53_domains_privacy_protection_enabled:
assert len(result) == 1
assert result[0].resource_id == domain_name
assert result[0].resource_arn == f"arn:aws:route53:::domain/{domain_name}"
assert result[0].region == AWS_REGION_US_EAST_1
assert result[0].status == "FAIL"
assert (
@@ -55,10 +60,14 @@ class Test_route53_domains_privacy_protection_enabled:
def test_domain_privacy_protection_enabled(self):
route53domains = mock.MagicMock
route53domains.audited_account_arn = AWS_ACCOUNT_ARN
domain_name = "test-domain.com"
route53domains.domains = {
domain_name: Domain(
name=domain_name, region=AWS_REGION_US_EAST_1, admin_privacy=True
name=domain_name,
arn=f"arn:aws:route53:::domain/{domain_name}",
region=AWS_REGION_US_EAST_1,
admin_privacy=True,
)
}
@@ -76,6 +85,7 @@ class Test_route53_domains_privacy_protection_enabled:
assert len(result) == 1
assert result[0].resource_id == domain_name
assert result[0].resource_arn == f"arn:aws:route53:::domain/{domain_name}"
assert result[0].region == AWS_REGION_US_EAST_1
assert result[0].status == "PASS"
assert (
@@ -1,7 +1,7 @@
from unittest import mock
from prowler.providers.aws.services.route53.route53_service import Domain
from tests.providers.aws.utils import AWS_REGION_US_EAST_1
from tests.providers.aws.utils import AWS_ACCOUNT_ARN, AWS_REGION_US_EAST_1
class Test_route53_domains_transferlock_enabled:
@@ -25,10 +25,12 @@ class Test_route53_domains_transferlock_enabled:
def test_domain_transfer_lock_disabled(self):
route53domains = mock.MagicMock
route53domains.audited_account_arn = AWS_ACCOUNT_ARN
domain_name = "test-domain.com"
route53domains.domains = {
domain_name: Domain(
name=domain_name,
arn=f"arn:aws:route53:::domain/{domain_name}",
region=AWS_REGION_US_EAST_1,
admin_privacy=False,
status_list=[""],
@@ -49,6 +51,7 @@ class Test_route53_domains_transferlock_enabled:
assert len(result) == 1
assert result[0].resource_id == domain_name
assert result[0].resource_arn == f"arn:aws:route53:::domain/{domain_name}"
assert result[0].region == AWS_REGION_US_EAST_1
assert result[0].status == "FAIL"
assert (
@@ -58,10 +61,12 @@ class Test_route53_domains_transferlock_enabled:
def test_domain_transfer_lock_enabled(self):
route53domains = mock.MagicMock
route53domains.audited_account_arn = AWS_ACCOUNT_ARN
domain_name = "test-domain.com"
route53domains.domains = {
domain_name: Domain(
name=domain_name,
arn=f"arn:aws:route53:::domain/{domain_name}",
region=AWS_REGION_US_EAST_1,
admin_privacy=False,
status_list=["clientTransferProhibited"],
@@ -82,6 +87,7 @@ class Test_route53_domains_transferlock_enabled:
assert len(result) == 1
assert result[0].resource_id == domain_name
assert result[0].resource_arn == f"arn:aws:route53:::domain/{domain_name}"
assert result[0].region == AWS_REGION_US_EAST_1
assert result[0].status == "PASS"
assert (