fix(sdk): preserve regional IMDSv2 account findings (#11959)

This commit is contained in:
Adrián Peña
2026-07-13 17:32:08 +02:00
committed by GitHub
parent 488f3d1bed
commit 470e218bb8
3 changed files with 57 additions and 8 deletions
@@ -0,0 +1 @@
`ec2_instance_account_imdsv2_enabled` findings now use regional resource ARNs, preventing findings from different AWS Regions from collapsing into one resource
@@ -14,7 +14,11 @@ class ec2_instance_account_imdsv2_enabled(Check):
metadata=self.metadata(),
resource=instance_metadata_default,
)
report.resource_arn = ec2_client.account_arn_template
report.resource_arn = (
f"arn:{ec2_client.audited_partition}:ec2:"
f"{instance_metadata_default.region}:"
f"{ec2_client.audited_account}:account"
)
report.resource_id = ec2_client.audited_account
if instance_metadata_default.http_tokens == "required":
report.status = "PASS"
@@ -1,15 +1,64 @@
from types import SimpleNamespace
from unittest import mock
from moto import mock_aws
from tests.providers.aws.utils import (
AWS_ACCOUNT_NUMBER,
AWS_COMMERCIAL_PARTITION,
AWS_REGION_EU_WEST_1,
AWS_REGION_US_EAST_1,
set_mocked_aws_provider,
)
class Test_ec2_instance_account_imdsv2_enabled:
@mock_aws
def test_ec2_imdsv2_uses_region_in_resource_arn(self):
from prowler.providers.aws.services.ec2.ec2_service import (
InstanceMetadataDefaults,
)
ec2_client = SimpleNamespace(
instance_metadata_defaults=[
InstanceMetadataDefaults(
http_tokens=None,
instances=True,
region=AWS_REGION_US_EAST_1,
),
InstanceMetadataDefaults(
http_tokens=None,
instances=True,
region=AWS_REGION_EU_WEST_1,
),
],
audited_account=AWS_ACCOUNT_NUMBER,
audited_partition=AWS_COMMERCIAL_PARTITION,
provider=SimpleNamespace(scan_unused_services=False),
)
with (
mock.patch(
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_aws_provider(),
),
mock.patch(
"prowler.providers.aws.services.ec2.ec2_instance_account_imdsv2_enabled.ec2_instance_account_imdsv2_enabled.ec2_client",
new=ec2_client,
),
):
from prowler.providers.aws.services.ec2.ec2_instance_account_imdsv2_enabled.ec2_instance_account_imdsv2_enabled import (
ec2_instance_account_imdsv2_enabled,
)
result = ec2_instance_account_imdsv2_enabled().execute()
assert len(result) == 2
assert {report.resource_arn for report in result} == {
f"arn:aws:ec2:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:account",
f"arn:aws:ec2:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:account",
}
@mock_aws
def test_ec2_imdsv2_required(self):
from prowler.providers.aws.services.ec2.ec2_service import (
@@ -23,10 +72,8 @@ class Test_ec2_instance_account_imdsv2_enabled:
)
]
ec2_client.audited_account = AWS_ACCOUNT_NUMBER
ec2_client.audited_partition = AWS_COMMERCIAL_PARTITION
ec2_client.region = AWS_REGION_US_EAST_1
ec2_client.account_arn_template = (
f"arn:aws:ec2:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:account"
)
with (
mock.patch(
@@ -71,12 +118,9 @@ class Test_ec2_instance_account_imdsv2_enabled:
)
]
ec2_client.audited_account = AWS_ACCOUNT_NUMBER
ec2_client.audited_partition = AWS_COMMERCIAL_PARTITION
ec2_client.region = AWS_REGION_US_EAST_1
ec2_client.account_arn_template = (
f"arn:aws:ec2:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:account"
)
with (
mock.patch(
"prowler.providers.common.provider.Provider.get_global_provider",