Skip to content

Commit ac623b7

Browse files
fix(aws): enhance resource arn filtering (#4837)
Co-authored-by: Sergio Garcia <[email protected]>
1 parent fa05936 commit ac623b7

File tree

3 files changed

+20
-13
lines changed

3 files changed

+20
-13
lines changed

prowler/providers/aws/aws_provider.py

+18-12
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ def __init__(self, arguments: Namespace):
7878
# MFA Configuration (false by default)
7979
input_mfa = getattr(arguments, "mfa", None)
8080
input_profile = getattr(arguments, "profile", None)
81-
input_regions = getattr(arguments, "region", set())
81+
input_regions = set(getattr(arguments, "region", set()))
8282
organizations_role_arn = getattr(arguments, "organizations_role", None)
8383

8484
# Set if unused services must be scanned
@@ -740,16 +740,22 @@ def get_tagged_resources(self, input_resource_tags: list[str]) -> list[str]:
740740

741741
def get_default_region(self, service: str) -> str:
742742
"""get_default_region returns the default region based on the profile and audited service regions"""
743-
service_regions = self.get_available_aws_service_regions(service)
744-
default_region = self.get_global_region()
745-
# global region of the partition when all regions are audited and there is no profile region
746-
if self._identity.profile_region in service_regions:
747-
# return profile region only if it is audited
748-
default_region = self._identity.profile_region
749-
# return first audited region if specific regions are audited
750-
elif self._identity.audited_regions:
751-
default_region = self._identity.audited_regions[0]
752-
return default_region
743+
try:
744+
service_regions = self.get_available_aws_service_regions(service)
745+
default_region = self.get_global_region()
746+
# global region of the partition when all regions are audited and there is no profile region
747+
if self._identity.profile_region in service_regions:
748+
# return profile region only if it is audited
749+
default_region = self._identity.profile_region
750+
# return first audited region if specific regions are audited
751+
elif self._identity.audited_regions:
752+
default_region = list(self._identity.audited_regions)[0]
753+
return default_region
754+
except Exception as error:
755+
logger.critical(
756+
f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
757+
)
758+
raise error
753759

754760
def get_global_region(self) -> str:
755761
"""get_global_region returns the global region based on the audited partition"""
@@ -959,7 +965,7 @@ def get_aws_region_for_sts(session_region: str, input_regions: set[str]) -> str:
959965
aws_region = AWS_STS_GLOBAL_ENDPOINT_REGION
960966
else:
961967
# Get the first region passed to the -f/--region
962-
aws_region = input_regions[0]
968+
aws_region = list(input_regions)[0]
963969

964970
return aws_region
965971

prowler/providers/aws/lib/arn/arn.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,5 +58,5 @@ def parse_iam_credentials_arn(arn: str) -> ARN:
5858

5959
def is_valid_arn(arn: str) -> bool:
6060
"""is_valid_arn returns True or False whether the given AWS ARN (Amazon Resource Name) is valid or not."""
61-
regex = r"^arn:aws(-cn|-us-gov|-iso|-iso-b)?:[a-zA-Z0-9\-]+:([a-z]{2}-[a-z]+-\d{1})?:(\d{12})?:[a-zA-Z0-9\-_\/:\.]+(:\d+)?$"
61+
regex = r"^arn:aws(-cn|-us-gov|-iso|-iso-b)?:[a-zA-Z0-9\-]+:([a-z]{2}-[a-z]+-\d{1})?:(\d{12})?:[a-zA-Z0-9\-_\/:\.\*]+(:\d+)?$"
6262
return re.match(regex, arn) is not None

tests/providers/aws/lib/arn/arn_test.py

+1
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,7 @@ def test_is_valid_arn(self):
386386
"arn:aws:lambda:eu-west-1:123456789012:function:lambda-function"
387387
)
388388
assert is_valid_arn("arn:aws:sns:eu-west-1:123456789012:test.fifo")
389+
assert is_valid_arn("arn:aws:logs:eu-west-1:123456789012:log-group:/ecs/test:")
389390
assert not is_valid_arn("arn:azure:::012345678910:user/test")
390391
assert not is_valid_arn("arn:aws:iam::account:user/test")
391392
assert not is_valid_arn("arn:aws:::012345678910:resource")

0 commit comments

Comments
 (0)