From 27f5c9591bb194bd77b17831c663ec9d54fa3189 Mon Sep 17 00:00:00 2001 From: "Andoni A." <14891798+andoniaf@users.noreply.github.com> Date: Tue, 9 Sep 2025 16:57:14 +0200 Subject: [PATCH] wip: fix IaC scan mapping --- prowler/lib/scan/scan.py | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/prowler/lib/scan/scan.py b/prowler/lib/scan/scan.py index 2745a82785..2a01170736 100644 --- a/prowler/lib/scan/scan.py +++ b/prowler/lib/scan/scan.py @@ -294,31 +294,37 @@ class Scan: # Convert IaC reports to Finding objects findings = [] + from prowler.lib.outputs.finding import Finding + from prowler.lib.outputs.common import Status + from datetime import timezone + for report in iac_reports: - # Extract metadata from CheckReportIAC - check_metadata = report.check_metadata - + # Generate unique UID for the finding + finding_uid = f"{report.check_metadata.CheckID}-{report.resource_name}-{report.resource_line_range}" + + # Convert status string to Status enum + status_enum = Status.FAIL if report.status == "FAIL" else Status.PASS + if report.muted: + status_enum = Status.MUTED + finding = Finding( - provider=self._provider.type, - check_id=check_metadata.CheckID, - check_title=check_metadata.CheckTitle, - check_type=check_metadata.CheckType, - status=report.status, + auth_method="Repository", # IaC uses repository as auth method + timestamp=datetime.datetime.now(timezone.utc), + account_uid=self._provider.scan_repository_url or "local", + account_name="IaC Repository", + metadata=report.check_metadata, # Pass the CheckMetadata object directly + uid=finding_uid, + status=status_enum, status_extended=report.status_extended, - severity=check_metadata.Severity, - resource_type=check_metadata.ResourceType, + muted=report.muted, resource_uid=report.resource_name, # For IaC, the file path is the UID + resource_metadata=report.resource, # The raw finding dict resource_name=report.resource_name, resource_details=report.resource_details, - resource_tags=report.resource_tags, - resource_metadata=report.resource, # The raw finding dict - service_name=check_metadata.ServiceName, + resource_tags={}, # IaC doesn't have resource tags region="global", # IaC doesn't have regions - raw=report.resource, # The raw finding dict - metadata=check_metadata.dict(), - muted=report.muted, - uid=f"{check_metadata.CheckID}-{report.resource_name}-{report.resource_line_range}", # Create unique UID compliance={}, # IaC doesn't have compliance mappings yet + raw=report.resource, # The raw finding dict ) findings.append(finding)