From f484b83f153bc821e69fe2d7d9c5b81993c2c0cc Mon Sep 17 00:00:00 2001 From: Sergio Garcia Date: Thu, 28 Aug 2025 11:42:07 +0200 Subject: [PATCH 01/32] feat(azure): Add APIM threat detection for LLM jacking attacks (#8571) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Rubén De la Torre Vico --- docs/tutorials/configuration_file.md | 45 ++ poetry.lock | 58 ++- prowler/CHANGELOG.md | 1 + prowler/config/config.yaml | 39 ++ .../providers/azure/lib/service/service.py | 3 + .../providers/azure/services/apim/__init__.py | 0 .../azure/services/apim/apim_client.py | 4 + .../azure/services/apim/apim_service.py | 251 +++++++++ .../__init__.py | 0 ...threat_detection_llm_jacking.metadata.json | 34 ++ .../apim_threat_detection_llm_jacking.py | 107 ++++ .../providers/azure/services/logs/__init__.py | 0 .../services/logs/loganalytics_client.py | 4 + .../azure/services/logs/logs_service.py | 15 + .../azure/services/logs/logsquery_client.py | 4 + .../azure/services/monitor/monitor_service.py | 2 + pyproject.toml | 3 + tests/providers/azure/azure_provider_test.py | 24 + .../providers/azure/services/apim/__init__.py | 0 .../azure/services/apim/apim_service_test.py | 318 ++++++++++++ .../__init__.py | 0 .../apim_threat_detection_llm_jacking_test.py | 491 ++++++++++++++++++ 22 files changed, 1399 insertions(+), 4 deletions(-) create mode 100644 prowler/providers/azure/services/apim/__init__.py create mode 100644 prowler/providers/azure/services/apim/apim_client.py create mode 100644 prowler/providers/azure/services/apim/apim_service.py create mode 100644 prowler/providers/azure/services/apim/apim_threat_detection_llm_jacking/__init__.py create mode 100644 prowler/providers/azure/services/apim/apim_threat_detection_llm_jacking/apim_threat_detection_llm_jacking.metadata.json create mode 100644 prowler/providers/azure/services/apim/apim_threat_detection_llm_jacking/apim_threat_detection_llm_jacking.py create mode 100644 prowler/providers/azure/services/logs/__init__.py create mode 100644 prowler/providers/azure/services/logs/loganalytics_client.py create mode 100644 prowler/providers/azure/services/logs/logs_service.py create mode 100644 prowler/providers/azure/services/logs/logsquery_client.py create mode 100644 tests/providers/azure/services/apim/__init__.py create mode 100644 tests/providers/azure/services/apim/apim_service_test.py create mode 100644 tests/providers/azure/services/apim/apim_threat_detection_llm_jacking/__init__.py create mode 100644 tests/providers/azure/services/apim/apim_threat_detection_llm_jacking/apim_threat_detection_llm_jacking_test.py diff --git a/docs/tutorials/configuration_file.md b/docs/tutorials/configuration_file.md index b99e5064d0..bdd0254f41 100644 --- a/docs/tutorials/configuration_file.md +++ b/docs/tutorials/configuration_file.md @@ -83,6 +83,9 @@ The following list includes all the Azure checks with configurable variables tha | `vm_sufficient_daily_backup_retention_period` | `vm_backup_min_daily_retention_days` | Integer | | `vm_desired_sku_size` | `desired_vm_sku_sizes` | List of Strings | | `defender_attack_path_notifications_properly_configured` | `defender_attack_path_minimal_risk_level` | String | +| `apim_threat_detection_llm_jacking` | `apim_threat_detection_llm_jacking_threshold` | Float | +| `apim_threat_detection_llm_jacking` | `apim_threat_detection_llm_jacking_minutes` | Integer | +| `apim_threat_detection_llm_jacking` | `apim_threat_detection_llm_jacking_actions` | List of Strings | ## GCP @@ -494,6 +497,48 @@ azure: "Standard_DS3_v2", "Standard_D4s_v3", ] + # Azure VM Backup Configuration + # azure.vm_sufficient_daily_backup_retention_period + vm_backup_min_daily_retention_days: 7 + + # Azure API Management Threat Detection Configuration + # azure.apim_threat_detection_llm_jacking + apim_threat_detection_llm_jacking_threshold: 0.1 + apim_threat_detection_llm_jacking_minutes: 1440 + apim_threat_detection_llm_jacking_actions: + [ + # OpenAI API endpoints + "ImageGenerations_Create", + "ChatCompletions_Create", + "Completions_Create", + "Embeddings_Create", + "FineTuning_Jobs_Create", + "Models_List", + + # Azure OpenAI endpoints + "Deployments_List", + "Deployments_Get", + "Deployments_Create", + "Deployments_Delete", + + # Anthropic endpoints + "Messages_Create", + "Claude_Create", + + # Google AI endpoints + "GenerateContent", + "GenerateText", + "GenerateImage", + + # Meta AI endpoints + "Llama_Create", + "CodeLlama_Create", + + # Other LLM endpoints + "Gemini_Generate", + "Claude_Generate", + "Llama_Generate" + ] # GCP Configuration gcp: diff --git a/poetry.lock b/poetry.lock index ab1e7d5e4c..9d4fb31e02 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.1.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.1.3 and should not be changed by hand. [[package]] name = "about-time" @@ -394,6 +394,24 @@ cryptography = ">=2.1.4" isodate = ">=0.6.1" typing-extensions = ">=4.0.1" +[[package]] +name = "azure-mgmt-apimanagement" +version = "5.0.0" +description = "Microsoft Azure API Management Client Library for Python" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "azure_mgmt_apimanagement-5.0.0-py3-none-any.whl", hash = "sha256:b88c42a392333b60722fb86f15d092dfc19a8d67510dccd15c217381dff4e6ec"}, + {file = "azure_mgmt_apimanagement-5.0.0.tar.gz", hash = "sha256:0ab7fe17e70fe3154cd840ff47d19d7a4610217003eaa7c21acf3511a6e57999"}, +] + +[package.dependencies] +azure-common = ">=1.1" +azure-mgmt-core = ">=1.3.2" +isodate = ">=0.6.1" +typing-extensions = ">=4.6.0" + [[package]] name = "azure-mgmt-applicationinsights" version = "4.1.0" @@ -551,6 +569,23 @@ azure-mgmt-core = ">=1.3.2" isodate = ">=0.6.1" typing-extensions = ">=4.6.0" +[[package]] +name = "azure-mgmt-loganalytics" +version = "12.0.0" +description = "Microsoft Azure Log Analytics Management Client Library for Python" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "azure-mgmt-loganalytics-12.0.0.zip", hash = "sha256:da128a7e0291be7fa2063848df92a9180cf5c16d42adc09d2bc2efd711536bfb"}, + {file = "azure_mgmt_loganalytics-12.0.0-py2.py3-none-any.whl", hash = "sha256:75ac1d47dd81179905c40765be8834643d8994acff31056ddc1863017f3faa02"}, +] + +[package.dependencies] +azure-common = ">=1.1,<2.0" +azure-mgmt-core = ">=1.2.0,<2.0.0" +msrest = ">=0.6.21" + [[package]] name = "azure-mgmt-monitor" version = "6.0.2" @@ -761,6 +796,23 @@ azure-mgmt-core = ">=1.3.2" isodate = ">=0.6.1" typing-extensions = ">=4.6.0" +[[package]] +name = "azure-monitor-query" +version = "2.0.0" +description = "Microsoft Corporation Azure Monitor Query Client Library for Python" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "azure_monitor_query-2.0.0-py3-none-any.whl", hash = "sha256:8f52d581271d785e12f49cd5aaa144b8910fb843db2373855a7ef94c7fc462ea"}, + {file = "azure_monitor_query-2.0.0.tar.gz", hash = "sha256:7b05f2fcac4fb67fc9f77a7d4c5d98a0f3099fb73b57c69ec1b080773994671b"}, +] + +[package.dependencies] +azure-core = ">=1.30.0" +isodate = ">=0.6.1" +typing-extensions = ">=4.6.0" + [[package]] name = "azure-storage-blob" version = "12.24.1" @@ -2352,8 +2404,6 @@ python-versions = "*" groups = ["dev"] files = [ {file = "jsonpath-ng-1.7.0.tar.gz", hash = "sha256:f6f5f7fd4e5ff79c785f1573b394043b39849fb2bb47bcead935d12b00beab3c"}, - {file = "jsonpath_ng-1.7.0-py2-none-any.whl", hash = "sha256:898c93fc173f0c336784a3fa63d7434297544b7198124a68f9a3ef9597b0ae6e"}, - {file = "jsonpath_ng-1.7.0-py3-none-any.whl", hash = "sha256:f3d7f9e848cba1b6da28c55b1c26ff915dc9e0b1ba7e752a53d6da8d5cbd00b6"}, ] [package.dependencies] @@ -5841,4 +5891,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">3.9.1,<3.13" -content-hash = "fdd2cbdb6913d0dd8d05030ee41c0d36d3954e473783d43b730ec163e697ec15" +content-hash = "aea38b0311bfabac00d4bf9ee5d2fa0a7f3e32dd2ee5c5d27eb54c69a80b35e9" diff --git a/prowler/CHANGELOG.md b/prowler/CHANGELOG.md index 78519335be..e54bc46d2f 100644 --- a/prowler/CHANGELOG.md +++ b/prowler/CHANGELOG.md @@ -15,6 +15,7 @@ All notable changes to the **Prowler SDK** are documented in this file. - `eks_cluster_deletion_protection_enabled` check for AWS provider [(#8536)](https://github.com/prowler-cloud/prowler/pull/8536) - ECS privilege escalation patterns (StartTask and RunTask) for AWS provider [(#8541)](https://github.com/prowler-cloud/prowler/pull/8541) - Resource Explorer enumeration v2 API actions in `cloudtrail_threat_detection_enumeration` check [(#8557)](https://github.com/prowler-cloud/prowler/pull/8557) +- `apim_threat_detection_llm_jacking` check for Azure provider [(#8571)](https://github.com/prowler-cloud/prowler/pull/8571) - GCP `--skip-api-check` command line flag [(#8575)](https://github.com/prowler-cloud/prowler/pull/8575) ### Changed diff --git a/prowler/config/config.yaml b/prowler/config/config.yaml index 7932131af6..33da81eaab 100644 --- a/prowler/config/config.yaml +++ b/prowler/config/config.yaml @@ -463,6 +463,45 @@ azure: # azure.vm_sufficient_daily_backup_retention_period vm_backup_min_daily_retention_days: 7 + # Azure API Management Configuration + # azure.apim_threat_detection_llm_jacking + apim_threat_detection_llm_jacking_threshold: 0.1 + apim_threat_detection_llm_jacking_minutes: 1440 + apim_threat_detection_llm_jacking_actions: + [ + # OpenAI API endpoints + "ImageGenerations_Create", + "ChatCompletions_Create", + "Completions_Create", + "Embeddings_Create", + "FineTuning_Jobs_Create", + "Models_List", + + # Azure OpenAI endpoints + "Deployments_List", + "Deployments_Get", + "Deployments_Create", + "Deployments_Delete", + + # Anthropic endpoints + "Messages_Create", + "Claude_Create", + + # Google AI endpoints + "GenerateContent", + "GenerateText", + "GenerateImage", + + # Meta AI endpoints + "Llama_Create", + "CodeLlama_Create", + + # Other LLM endpoints + "Gemini_Generate", + "Claude_Generate", + "Llama_Generate" + ] + # GCP Configuration gcp: # GCP Compute Configuration diff --git a/prowler/providers/azure/lib/service/service.py b/prowler/providers/azure/lib/service/service.py index 83ed9031f4..b91fd51f56 100644 --- a/prowler/providers/azure/lib/service/service.py +++ b/prowler/providers/azure/lib/service/service.py @@ -25,6 +25,9 @@ class AzureService: try: if "GraphServiceClient" in str(service): clients.update({identity.tenant_domain: service(credentials=session)}) + elif "LogsQueryClient" in str(service): + for display_name, id in identity.subscriptions.items(): + clients.update({display_name: service(credential=session)}) else: for display_name, id in identity.subscriptions.items(): clients.update( diff --git a/prowler/providers/azure/services/apim/__init__.py b/prowler/providers/azure/services/apim/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/azure/services/apim/apim_client.py b/prowler/providers/azure/services/apim/apim_client.py new file mode 100644 index 0000000000..d435153f3a --- /dev/null +++ b/prowler/providers/azure/services/apim/apim_client.py @@ -0,0 +1,4 @@ +from prowler.providers.azure.services.apim.apim_service import APIM +from prowler.providers.common.provider import Provider + +apim_client = APIM(Provider.get_global_provider()) diff --git a/prowler/providers/azure/services/apim/apim_service.py b/prowler/providers/azure/services/apim/apim_service.py new file mode 100644 index 0000000000..8c222cbe6d --- /dev/null +++ b/prowler/providers/azure/services/apim/apim_service.py @@ -0,0 +1,251 @@ +from datetime import datetime, timedelta +from typing import List, Optional + +from azure.mgmt.apimanagement import ApiManagementClient +from pydantic.v1 import BaseModel + +from prowler.lib.logger import logger +from prowler.providers.azure.azure_provider import AzureProvider +from prowler.providers.azure.lib.service.service import AzureService +from prowler.providers.azure.services.logs.loganalytics_client import ( + loganalytics_client, +) +from prowler.providers.azure.services.logs.logsquery_client import logsquery_client +from prowler.providers.azure.services.monitor.monitor_client import monitor_client + + +class APIMInstance(BaseModel): + """APIM Instance model""" + + id: str + name: str + location: str + log_analytics_workspace_id: Optional[str] = None + + +class LogsQueryLogEntry(BaseModel): + """Represents a log entry from Azure Log Analytics query results.""" + + time_generated: datetime + operation_id: str + caller_ip_address: str + correlation_id: str + + +class APIM(AzureService): + def __init__(self, provider: AzureProvider): + """Initialize the APIM service client. + + Args: + provider: The Azure provider instance containing authentication and client configuration + """ + super().__init__(ApiManagementClient, provider) + self.instances = self._get_instances() + + def _get_workspace_customer_id( + self, subscription: str, workspace_arm_id: str + ) -> Optional[str]: + """Get the Customer ID (GUID) for a workspace from its full ARM ID. + + This method extracts the resource group and workspace name from the ARM ID + and queries the Log Analytics client to retrieve the customer ID (GUID) + needed for workspace-specific queries. + + Args: + subscription: The Azure subscription ID + workspace_arm_id: The full ARM ID of the Log Analytics workspace + + Returns: + The customer ID (GUID) of the workspace if successful, None otherwise + """ + try: + resource_group = workspace_arm_id.split("/")[4] + workspace_name = workspace_arm_id.split("/")[-1] + + workspace = loganalytics_client.clients[subscription].workspaces.get( + resource_group_name=resource_group, workspace_name=workspace_name + ) + return workspace.customer_id + except Exception as error: + logger.error( + f"Failed to get customer ID for workspace {workspace_arm_id}: {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + return None + + def _get_log_analytics_workspace_id( + self, instance_id: str, subscription: str + ) -> Optional[str]: + """Retrieve the Log Analytics workspace ARM ID from an APIM instance's diagnostic settings. + + This method queries the Azure Monitor diagnostic settings for a specific APIM + instance to find the configured Log Analytics workspace. It specifically looks + for diagnostic settings that have GatewayLogs enabled, which are essential for + monitoring APIM API calls and operations. + + Args: + instance_id: The ARM ID of the APIM instance + subscription: The Azure subscription ID + + Returns: + The ARM ID of the Log Analytics workspace if diagnostic settings are found + and GatewayLogs are enabled, None otherwise + """ + try: + diagnostic_settings = monitor_client.diagnostic_settings_with_uri( + subscription, instance_id, monitor_client.clients[subscription] + ) + for setting in diagnostic_settings: + if setting.workspace_id and setting.logs: + for log_setting in setting.logs: + if ( + log_setting.enabled + and log_setting.category == "GatewayLogs" + ): + logger.info( + f"Found enabled Log Analytics workspace for APIM instance {instance_id} with category {log_setting.category}" + ) + return setting.workspace_id + except Exception as error: + logger.error( + f"Failed to get diagnostic settings for {instance_id}: {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + return None + + def _get_instances(self): + """Get all APIM instances and their configured Log Analytics workspace. + + This method iterates through all accessible Azure subscriptions and retrieves + all APIM instances within each subscription. For each instance, it also + determines the associated Log Analytics workspace by checking diagnostic + settings. The method populates the instances dictionary with APIMInstance + objects containing all relevant metadata and configuration. + + Returns: + A dictionary mapping subscription IDs to lists of APIMInstance objects. + Each APIMInstance contains the instance details and its associated + Log Analytics workspace ID if configured. + """ + logger.info("APIM - Getting instances...") + instances = {} + + for subscription, client in self.clients.items(): + try: + instances.update({subscription: []}) + apim_instances = client.api_management_service.list() + + for instance in apim_instances: + workspace_id = self._get_log_analytics_workspace_id( + instance.id, subscription + ) + instances[subscription].append( + APIMInstance( + id=instance.id, + name=instance.name, + location=instance.location, + log_analytics_workspace_id=workspace_id, + ) + ) + except Exception as error: + logger.error( + f"Subscription name: {subscription} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + + return instances + + def query_logs( + self, + subscription: str, + query: str, + timespan: timedelta, + workspace_customer_id: str, + ) -> List[LogsQueryLogEntry]: + """Query a specific Log Analytics workspace using its Customer ID (GUID). + + This method executes Kusto Query Language (KQL) queries against a specific + Log Analytics workspace. It's used to retrieve log data for analysis and + monitoring purposes. The method handles the response parsing and converts + the tabular results into a list of dictionaries for easy consumption. + + Args: + subscription: The Azure subscription ID + query: The KQL query string to execute + timespan: The time range for the query as a timedelta + workspace_customer_id: The customer ID (GUID) of the Log Analytics workspace + + Returns: + A list of dictionaries where each dictionary represents a row from the + query results. The keys are the column names from the query response. + Returns an empty list if the query fails or returns no results. + """ + try: + response = logsquery_client.clients[subscription].query_workspace( + workspace_id=workspace_customer_id, + query=query, + timespan=timespan, + ) + + if response.tables: + columns = response.tables[0].columns + rows = response.tables[0].rows + result = [] + + for row in rows: + # Create a mapping from Azure column names to our snake_case field names + row_dict = dict(zip(columns, row)) + mapped_dict = { + "time_generated": row_dict.get("TimeGenerated"), + "operation_id": row_dict.get("OperationId"), + "caller_ip_address": row_dict.get("CallerIpAddress"), + "correlation_id": row_dict.get("CorrelationId"), + } + result.append(LogsQueryLogEntry(**mapped_dict)) + + return result + + except Exception as error: + logger.error( + f"Failed to query Log Analytics workspace with customer ID {workspace_customer_id}: {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + return [] + + def get_llm_operations_logs( + self, subscription: str, instance: APIMInstance, minutes: int = 1440 + ) -> List[LogsQueryLogEntry]: + """Get LLM-related operations from the APIM instance's specific Log Analytics workspace. + + This method retrieves logs related to Large Language Model (LLM) operations + from a specific APIM instance. It queries the GatewayLogs table in the + associated Log Analytics workspace to find API calls and operations that + may be related to LLM services. The method automatically handles the + translation from workspace ARM ID to customer ID for querying. + + Args: + subscription: The Azure subscription ID + instance: The APIMInstance object containing the instance details + minutes: The time range in minutes to look back (default: 1440 = 24 hours) + + Returns: + A list of dictionaries containing log entries with fields like + time_generated, operation_id, caller_ip_address, and correlation_id. + Returns an empty list if no workspace is configured or if the query fails. + """ + if not instance.log_analytics_workspace_id: + logger.warning( + f"APIM instance {instance.name} has no configured Log Analytics workspace." + ) + return [] + + # Translate the workspace ARM ID to the Customer ID (GUID) before querying + workspace_customer_id = self._get_workspace_customer_id( + subscription, instance.log_analytics_workspace_id + ) + if not workspace_customer_id: + return [] + + query = f""" + ApiManagementGatewayLogs + | where _ResourceId has '{instance.id}' + | project TimeGenerated, OperationId, CallerIpAddress, CorrelationId + """ + timespan = timedelta(minutes=minutes) + return self.query_logs(subscription, query, timespan, workspace_customer_id) diff --git a/prowler/providers/azure/services/apim/apim_threat_detection_llm_jacking/__init__.py b/prowler/providers/azure/services/apim/apim_threat_detection_llm_jacking/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/azure/services/apim/apim_threat_detection_llm_jacking/apim_threat_detection_llm_jacking.metadata.json b/prowler/providers/azure/services/apim/apim_threat_detection_llm_jacking/apim_threat_detection_llm_jacking.metadata.json new file mode 100644 index 0000000000..1673f9cf64 --- /dev/null +++ b/prowler/providers/azure/services/apim/apim_threat_detection_llm_jacking/apim_threat_detection_llm_jacking.metadata.json @@ -0,0 +1,34 @@ +{ + "Provider": "azure", + "CheckID": "apim_threat_detection_llm_jacking", + "CheckTitle": "Ensure Azure API Management is protected against LLM Jacking attacks", + "CheckType": [], + "ServiceName": "apim", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "high", + "ResourceType": "Azure API Management Instance", + "Description": "This check analyzes Azure API Management diagnostic logs in Log Analytics to detect potential LLM Jacking attacks by monitoring the frequency of LLM-related operations (ImageGenerations_Create, ChatCompletions_Create, Completions_Create) from individual IP addresses within a configurable time window.", + "Risk": "LLM Jacking attacks can lead to unauthorized access to AI models, potential data exfiltration, increased costs, and abuse of AI services. Attackers may use these endpoints to generate content, bypass rate limits, or access premium AI capabilities without proper authorization.", + "RelatedUrl": "https://learn.microsoft.com/en-us/azure/api-management/monitor-api-management", + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "", + "Terraform": "" + }, + "Recommendation": { + "Text": "To protect against LLM Jacking attacks: 1. Enable diagnostic logging for APIM instances and send logs to Log Analytics workspace 2. Configure appropriate thresholds for LLM operation frequency monitoring 3. Set up alerts for suspicious activity patterns 4. Implement rate limiting and IP allowlisting for sensitive AI endpoints 5. Regularly review and analyze APIM access logs for anomalies", + "Url": "https://learn.microsoft.com/en-us/azure/api-management/monitor-api-management" + } + }, + "Categories": [ + "threat-detection", + "monitoring", + "logging" + ], + "DependsOn": [], + "RelatedTo": [], + "Notes": "This check requires: 1. APIM diagnostic logging to be enabled and configured to send logs to Log Analytics workspace 2. Log Analytics workspace ID and key to be configured in the audit configuration 3. Appropriate permissions to query Log Analytics workspace" +} diff --git a/prowler/providers/azure/services/apim/apim_threat_detection_llm_jacking/apim_threat_detection_llm_jacking.py b/prowler/providers/azure/services/apim/apim_threat_detection_llm_jacking/apim_threat_detection_llm_jacking.py new file mode 100644 index 0000000000..e511b9859b --- /dev/null +++ b/prowler/providers/azure/services/apim/apim_threat_detection_llm_jacking/apim_threat_detection_llm_jacking.py @@ -0,0 +1,107 @@ +from typing import List + +from prowler.lib.check.models import Check, Check_Report_Azure +from prowler.providers.azure.services.apim.apim_client import apim_client +from prowler.providers.azure.services.apim.apim_service import LogsQueryLogEntry + + +class apim_threat_detection_llm_jacking(Check): + def execute(self): + findings = [] + + # Get configuration from audit config with defaults + threshold = float( + getattr(apim_client, "audit_config", {}).get( + "apim_threat_detection_llm_jacking_threshold", 0.1 + ) + ) + threat_detection_minutes = getattr(apim_client, "audit_config", {}).get( + "apim_threat_detection_llm_jacking_minutes", 1440 + ) + monitored_actions = getattr(apim_client, "audit_config", {}).get( + "apim_threat_detection_llm_jacking_actions", + [ + # OpenAI API endpoints + "ImageGenerations_Create", + "ChatCompletions_Create", + "Completions_Create", + "Embeddings_Create", + "FineTuning_Jobs_Create", + "Models_List", + # Azure OpenAI endpoints + "Deployments_List", + "Deployments_Get", + "Deployments_Create", + "Deployments_Delete", + # Anthropic endpoints + "Messages_Create", + "Claude_Create", + # Google AI endpoints + "GenerateContent", + "GenerateText", + "GenerateImage", + # Meta AI endpoints + "Llama_Create", + "CodeLlama_Create", + # Other LLM endpoints + "Gemini_Generate", + "Claude_Generate", + "Llama_Generate", + ], + ) + + # 1. Aggregate logs from all APIM instances first + all_llm_logs: List[LogsQueryLogEntry] = [] + for subscription, instances in apim_client.instances.items(): + for instance in instances: + if instance.log_analytics_workspace_id: + logs = apim_client.get_llm_operations_logs( + subscription, instance, threat_detection_minutes + ) + all_llm_logs.extend(logs) + + # 2. Perform a single, global analysis on all collected logs + potential_llm_jacking_attackers = {} + for log in all_llm_logs: + operation_name = log.operation_id + caller_ip = log.caller_ip_address + + if operation_name in monitored_actions and caller_ip: + # Use IP address as the principal identifier + if caller_ip not in potential_llm_jacking_attackers: + potential_llm_jacking_attackers[caller_ip] = set() + potential_llm_jacking_attackers[caller_ip].add(operation_name) + + # 3. Check each principal against the threshold and report failures + found_potential_llm_jacking_attackers = False + for ( + principal_ip, + distinct_actions, + ) in potential_llm_jacking_attackers.items(): + action_ratio = round(len(distinct_actions) / len(monitored_actions), 2) + + if action_ratio > threshold: + found_potential_llm_jacking_attackers = True + # Build Identity resource for the report + resource = { + "name": principal_ip, + "id": principal_ip, + } + # Report against the subscription, identifying the offending principal (IP) + report = Check_Report_Azure(self.metadata(), resource=resource) + report.subscription = subscription + report.status = "FAIL" + report.status_extended = f"Potential LLM Jacking attack detected from IP address {principal_ip} with a threshold of {action_ratio}." + findings.append(report) + + # 4. If no threats were found after checking all principals, create a single PASS report + if not found_potential_llm_jacking_attackers: + report = Check_Report_Azure(self.metadata(), resource={}) + report.resource_name = "Azure API Management" + report.resource_id = "Azure API Management" + report.subscription = subscription + report.status = "PASS" + report.status_extended = f"No potential LLM Jacking attacks detected across all monitored APIM instances in the last {threat_detection_minutes} minutes." + findings.append(report) + + return findings diff --git a/prowler/providers/azure/services/logs/__init__.py b/prowler/providers/azure/services/logs/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/azure/services/logs/loganalytics_client.py b/prowler/providers/azure/services/logs/loganalytics_client.py new file mode 100644 index 0000000000..dc7ef16f68 --- /dev/null +++ b/prowler/providers/azure/services/logs/loganalytics_client.py @@ -0,0 +1,4 @@ +from prowler.providers.azure.services.logs.logs_service import LogAnalytics +from prowler.providers.common.provider import Provider + +loganalytics_client = LogAnalytics(Provider.get_global_provider()) diff --git a/prowler/providers/azure/services/logs/logs_service.py b/prowler/providers/azure/services/logs/logs_service.py new file mode 100644 index 0000000000..e0a2cf07e5 --- /dev/null +++ b/prowler/providers/azure/services/logs/logs_service.py @@ -0,0 +1,15 @@ +from azure.mgmt.loganalytics import LogAnalyticsManagementClient +from azure.monitor.query import LogsQueryClient + +from prowler.providers.azure.azure_provider import AzureProvider +from prowler.providers.azure.lib.service.service import AzureService + + +class LogsQuery(AzureService): + def __init__(self, provider: AzureProvider): + super().__init__(LogsQueryClient, provider) + + +class LogAnalytics(AzureService): + def __init__(self, provider: AzureProvider): + super().__init__(LogAnalyticsManagementClient, provider) diff --git a/prowler/providers/azure/services/logs/logsquery_client.py b/prowler/providers/azure/services/logs/logsquery_client.py new file mode 100644 index 0000000000..0aabde0c24 --- /dev/null +++ b/prowler/providers/azure/services/logs/logsquery_client.py @@ -0,0 +1,4 @@ +from prowler.providers.azure.services.logs.logs_service import LogsQuery +from prowler.providers.common.provider import Provider + +logsquery_client = LogsQuery(Provider.get_global_provider()) diff --git a/prowler/providers/azure/services/monitor/monitor_service.py b/prowler/providers/azure/services/monitor/monitor_service.py index b4542a7b14..948b0cceec 100644 --- a/prowler/providers/azure/services/monitor/monitor_service.py +++ b/prowler/providers/azure/services/monitor/monitor_service.py @@ -56,6 +56,7 @@ class Monitor(AzureService): for log_settings in (getattr(setting, "logs", []) or []) ], storage_account_id=setting.storage_account_id, + workspace_id=getattr(setting, "workspace_id", None), ) ) except Exception as error: @@ -112,6 +113,7 @@ class DiagnosticSetting: storage_account_name: str logs: List[LogSettings] name: str + workspace_id: Optional[str] = None @dataclass diff --git a/pyproject.toml b/pyproject.toml index 4308b55f91..738d9042d5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,6 +35,9 @@ dependencies = [ "azure-mgmt-storage==22.1.1", "azure-mgmt-subscription==3.1.1", "azure-mgmt-web==8.0.0", + "azure-mgmt-apimanagement==5.0.0", + "azure-mgmt-loganalytics==12.0.0", + "azure-monitor-query==2.0.0", "azure-storage-blob==12.24.1", "boto3==1.39.15", "botocore==1.39.15", diff --git a/tests/providers/azure/azure_provider_test.py b/tests/providers/azure/azure_provider_test.py index 5796b15ada..a0c8a5e5d4 100644 --- a/tests/providers/azure/azure_provider_test.py +++ b/tests/providers/azure/azure_provider_test.py @@ -92,6 +92,30 @@ class TestAzureProvider: "Standard_D4s_v3", ], "defender_attack_path_minimal_risk_level": "High", + "apim_threat_detection_llm_jacking_threshold": 0.1, + "apim_threat_detection_llm_jacking_minutes": 1440, + "apim_threat_detection_llm_jacking_actions": [ + "ImageGenerations_Create", + "ChatCompletions_Create", + "Completions_Create", + "Embeddings_Create", + "FineTuning_Jobs_Create", + "Models_List", + "Deployments_List", + "Deployments_Get", + "Deployments_Create", + "Deployments_Delete", + "Messages_Create", + "Claude_Create", + "GenerateContent", + "GenerateText", + "GenerateImage", + "Llama_Create", + "CodeLlama_Create", + "Gemini_Generate", + "Claude_Generate", + "Llama_Generate", + ], } def test_azure_provider_not_auth_methods(self): diff --git a/tests/providers/azure/services/apim/__init__.py b/tests/providers/azure/services/apim/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/providers/azure/services/apim/apim_service_test.py b/tests/providers/azure/services/apim/apim_service_test.py new file mode 100644 index 0000000000..3b1a061293 --- /dev/null +++ b/tests/providers/azure/services/apim/apim_service_test.py @@ -0,0 +1,318 @@ +from datetime import timedelta +from unittest import TestCase, mock +from unittest.mock import patch + +from azure.mgmt.loganalytics.models import Workspace +from azure.mgmt.monitor.models import DiagnosticSettingsResource +from azure.monitor.query import LogsQueryResult + +from tests.providers.azure.azure_fixtures import ( + AZURE_SUBSCRIPTION_ID, + set_mocked_azure_provider, +) + +# Define constants for reusable mock data +APIM_INSTANCE_ID = f"/subscriptions/{AZURE_SUBSCRIPTION_ID}/resourceGroups/rg/providers/Microsoft.ApiManagement/service/apim1" +APIM_INSTANCE_NAME = "apim1" +LOCATION = "West US" +RESOURCE_GROUP = "rg" +WORKSPACE_ID = f"/subscriptions/{AZURE_SUBSCRIPTION_ID}/resourcegroups/rg/providers/microsoft.operationalinsights/workspaces/loganalytics" +WORKSPACE_CUSTOMER_ID = "12345678-1234-1234-1234-1234567890ab" + + +def mock_apim_get_instances(_): + """Mock function to replace APIM._get_instances.""" + from prowler.providers.azure.services.apim.apim_service import APIMInstance + + return { + AZURE_SUBSCRIPTION_ID: [ + APIMInstance( + id=APIM_INSTANCE_ID, + name=APIM_INSTANCE_NAME, + location=LOCATION, + log_analytics_workspace_id=WORKSPACE_ID, + ) + ] + } + + +class Test_APIM_Service(TestCase): + def test_get_client(self): + """Test that the APIM service client is created correctly.""" + mock_provider = mock.MagicMock() + mock_provider.identity = mock.MagicMock() + with ( + patch( + "prowler.providers.azure.azure_provider.Provider.get_global_provider", + return_value=mock_provider, + ), + patch( + "prowler.providers.azure.services.apim.apim_service.APIM._get_instances", + return_value={}, + ), + ): + from prowler.providers.azure.services.apim.apim_service import APIM + + apim = APIM(set_mocked_azure_provider()) + self.assertEqual( + apim.clients[AZURE_SUBSCRIPTION_ID].__class__.__name__, + "ApiManagementClient", + ) + + def test_get_subscriptions(self): + """Test that subscriptions are retrieved correctly.""" + mock_provider = mock.MagicMock() + mock_provider.identity = mock.MagicMock() + with ( + patch( + "prowler.providers.azure.azure_provider.Provider.get_global_provider", + return_value=mock_provider, + ), + patch( + "prowler.providers.azure.services.apim.apim_service.APIM._get_instances", + return_value={}, + ), + ): + from prowler.providers.azure.services.apim.apim_service import APIM + + apim = APIM(set_mocked_azure_provider()) + self.assertEqual(apim.subscriptions.__class__.__name__, "dict") + + def test_get_instances(self): + """Test that APIM instances are retrieved and parsed correctly.""" + mock_provider = mock.MagicMock() + mock_provider.identity = mock.MagicMock() + with ( + patch( + "prowler.providers.azure.azure_provider.Provider.get_global_provider", + return_value=mock_provider, + ), + patch( + "prowler.providers.azure.services.apim.apim_service.APIM._get_instances", + new=mock_apim_get_instances, + ), + ): + from prowler.providers.azure.services.apim.apim_service import APIM + + apim = APIM(set_mocked_azure_provider()) + self.assertEqual(len(apim.instances), 1) + self.assertEqual(len(apim.instances[AZURE_SUBSCRIPTION_ID]), 1) + instance = apim.instances[AZURE_SUBSCRIPTION_ID][0] + self.assertEqual(instance.id, APIM_INSTANCE_ID) + self.assertEqual(instance.name, APIM_INSTANCE_NAME) + self.assertEqual(instance.location, LOCATION) + self.assertEqual(instance.log_analytics_workspace_id, WORKSPACE_ID) + + def test_get_log_analytics_workspace_id_success(self): + """Test retrieving a Log Analytics workspace ID successfully.""" + mock_provider = mock.MagicMock() + mock_provider.identity = mock.MagicMock() + with patch( + "prowler.providers.azure.azure_provider.Provider.get_global_provider", + return_value=mock_provider, + ): + from prowler.providers.azure.services.apim.apim_service import APIM + + with ( + patch( + "prowler.providers.azure.services.apim.apim_service.APIM._get_instances", + return_value={}, + ), + patch( + "prowler.providers.azure.services.apim.apim_service.monitor_client" + ) as mock_monitor_client, + ): + apim = APIM(set_mocked_azure_provider()) + mock_log_setting = mock.MagicMock(enabled=True, category="GatewayLogs") + mock_setting = DiagnosticSettingsResource( + workspace_id=WORKSPACE_ID, logs=[mock_log_setting] + ) + mock_monitor_client.diagnostic_settings_with_uri.return_value = [ + mock_setting + ] + workspace_id = apim._get_log_analytics_workspace_id( + APIM_INSTANCE_ID, AZURE_SUBSCRIPTION_ID + ) + self.assertEqual(workspace_id, WORKSPACE_ID) + + def test_get_log_analytics_workspace_id_not_enabled(self): + """Test that no workspace ID is returned if GatewayLogs are not enabled.""" + mock_provider = mock.MagicMock() + mock_provider.identity = mock.MagicMock() + with patch( + "prowler.providers.azure.azure_provider.Provider.get_global_provider", + return_value=mock_provider, + ): + from prowler.providers.azure.services.apim.apim_service import APIM + + with ( + patch( + "prowler.providers.azure.services.apim.apim_service.APIM._get_instances", + return_value={}, + ), + patch( + "prowler.providers.azure.services.apim.apim_service.monitor_client" + ) as mock_monitor_client, + ): + apim = APIM(set_mocked_azure_provider()) + mock_log_setting = mock.MagicMock(enabled=False, category="GatewayLogs") + mock_setting = DiagnosticSettingsResource( + workspace_id=WORKSPACE_ID, logs=[mock_log_setting] + ) + mock_monitor_client.diagnostic_settings_with_uri.return_value = [ + mock_setting + ] + workspace_id = apim._get_log_analytics_workspace_id( + APIM_INSTANCE_ID, AZURE_SUBSCRIPTION_ID + ) + self.assertIsNone(workspace_id) + + def test_get_workspace_customer_id_success(self): + """Test retrieving a workspace customer ID successfully.""" + mock_provider = mock.MagicMock() + mock_provider.identity = mock.MagicMock() + with patch( + "prowler.providers.azure.azure_provider.Provider.get_global_provider", + return_value=mock_provider, + ): + from prowler.providers.azure.services.apim.apim_service import APIM + + with ( + patch( + "prowler.providers.azure.services.apim.apim_service.APIM._get_instances", + return_value={}, + ), + patch( + "prowler.providers.azure.services.apim.apim_service.loganalytics_client" + ) as mock_loganalytics_client, + ): + apim = APIM(set_mocked_azure_provider()) + mock_workspace = Workspace(location=LOCATION) + # Set customer_id after creation since it's readonly + mock_workspace.customer_id = WORKSPACE_CUSTOMER_ID + + # Properly mock the nested client structure + mock_client = mock.MagicMock() + mock_workspaces = mock.MagicMock() + mock_workspaces.get.return_value = mock_workspace + mock_client.workspaces = mock_workspaces + mock_loganalytics_client.clients = {AZURE_SUBSCRIPTION_ID: mock_client} + + customer_id = apim._get_workspace_customer_id( + AZURE_SUBSCRIPTION_ID, WORKSPACE_ID + ) + self.assertEqual(customer_id, WORKSPACE_CUSTOMER_ID) + + def test_query_logs_success(self): + """Test querying logs successfully.""" + mock_provider = mock.MagicMock() + mock_provider.identity = mock.MagicMock() + with patch( + "prowler.providers.azure.azure_provider.Provider.get_global_provider", + return_value=mock_provider, + ): + from prowler.providers.azure.services.apim.apim_service import APIM + + with ( + patch( + "prowler.providers.azure.services.apim.apim_service.APIM._get_instances", + return_value={}, + ), + patch( + "prowler.providers.azure.services.apim.apim_service.logsquery_client" + ) as mock_logsquery_client, + ): + apim = APIM(set_mocked_azure_provider()) + # Create a mock table with the expected structure for LogsQueryLogEntry + mock_table = mock.MagicMock() + mock_table.columns = [ + "TimeGenerated", + "OperationId", + "CallerIpAddress", + "CorrelationId", + ] + from datetime import datetime + + mock_table.rows = [ + [ + datetime.fromisoformat("2024-01-01T10:00:00+00:00"), + "test-operation", + "192.168.1.100", + "test-correlation", + ] + ] + + mock_response = LogsQueryResult(tables=[mock_table], status="Success") + + # Properly mock the nested client structure + mock_client = mock.MagicMock() + mock_client.query_workspace.return_value = mock_response + mock_logsquery_client.clients = {AZURE_SUBSCRIPTION_ID: mock_client} + + result = apim.query_logs( + AZURE_SUBSCRIPTION_ID, + "query", + timedelta(minutes=60), + WORKSPACE_CUSTOMER_ID, + ) + self.assertEqual(len(result), 1) + # The result should be LogsQueryLogEntry objects + from datetime import datetime + + self.assertEqual( + result[0].time_generated, + datetime.fromisoformat("2024-01-01T10:00:00+00:00"), + ) + self.assertEqual(result[0].operation_id, "test-operation") + self.assertEqual(result[0].caller_ip_address, "192.168.1.100") + self.assertEqual(result[0].correlation_id, "test-correlation") + + def test_get_llm_operations_logs_no_workspace_id(self): + """Test getting logs when the APIM instance has no workspace configured.""" + mock_provider = mock.MagicMock() + mock_provider.identity = mock.MagicMock() + with patch( + "prowler.providers.azure.azure_provider.Provider.get_global_provider", + return_value=mock_provider, + ): + from prowler.providers.azure.services.apim.apim_service import APIM + + with patch( + "prowler.providers.azure.services.apim.apim_service.APIM._get_instances", + return_value={}, + ): + apim = APIM(set_mocked_azure_provider()) + instance = mock.MagicMock( + log_analytics_workspace_id=None, name="test-apim" + ) + result = apim.get_llm_operations_logs(AZURE_SUBSCRIPTION_ID, instance) + self.assertEqual(result, []) + + def test_get_llm_operations_logs_success(self): + """Test the successful retrieval of LLM operation logs.""" + mock_provider = mock.MagicMock() + mock_provider.identity = mock.MagicMock() + with patch( + "prowler.providers.azure.azure_provider.Provider.get_global_provider", + return_value=mock_provider, + ): + from prowler.providers.azure.services.apim.apim_service import APIM + + with ( + patch( + "prowler.providers.azure.services.apim.apim_service.APIM._get_instances", + new=mock_apim_get_instances, + ), + patch( + "prowler.providers.azure.services.apim.apim_service.APIM.query_logs", + return_value=[{"log": "data"}], + ), + patch( + "prowler.providers.azure.services.apim.apim_service.APIM._get_workspace_customer_id", + return_value=WORKSPACE_CUSTOMER_ID, + ), + ): + apim = APIM(set_mocked_azure_provider()) + instance = apim.instances[AZURE_SUBSCRIPTION_ID][0] + result = apim.get_llm_operations_logs(AZURE_SUBSCRIPTION_ID, instance) + self.assertEqual(result, [{"log": "data"}]) diff --git a/tests/providers/azure/services/apim/apim_threat_detection_llm_jacking/__init__.py b/tests/providers/azure/services/apim/apim_threat_detection_llm_jacking/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/providers/azure/services/apim/apim_threat_detection_llm_jacking/apim_threat_detection_llm_jacking_test.py b/tests/providers/azure/services/apim/apim_threat_detection_llm_jacking/apim_threat_detection_llm_jacking_test.py new file mode 100644 index 0000000000..d37385f585 --- /dev/null +++ b/tests/providers/azure/services/apim/apim_threat_detection_llm_jacking/apim_threat_detection_llm_jacking_test.py @@ -0,0 +1,491 @@ +from datetime import datetime +from unittest import mock + +from tests.providers.azure.azure_fixtures import ( + AZURE_SUBSCRIPTION_ID, + set_mocked_azure_provider, +) + + +# Create a mock LogsQueryLogEntry class for testing +class MockLogsQueryLogEntry: + def __init__(self, **kwargs): + for key, value in kwargs.items(): + setattr(self, key, value) + + +def mock_get_llm_operations_logs(subscription, instance, minutes): + """Mock LLM operations logs for testing - returns 2 operations""" + return [ + MockLogsQueryLogEntry( + time_generated=datetime.fromisoformat("2024-01-01T10:00:00+00:00"), + operation_id="ChatCompletions_Create", + caller_ip_address="192.168.1.100", + correlation_id="test-correlation-id-1", + ), + MockLogsQueryLogEntry( + time_generated=datetime.fromisoformat("2024-01-01T10:01:00+00:00"), + operation_id="ImageGenerations_Create", + caller_ip_address="192.168.1.100", + correlation_id="test-correlation-id-2", + ), + ] + + +def mock_get_llm_operations_logs_6_operations(subscription, instance, minutes): + """Mock LLM operations logs for testing - returns 6 operations""" + return [ + MockLogsQueryLogEntry( + time_generated=datetime.fromisoformat("2024-01-01T10:00:00+00:00"), + operation_id="ChatCompletions_Create", + caller_ip_address="192.168.1.100", + correlation_id="test-correlation-id-1", + ), + MockLogsQueryLogEntry( + time_generated=datetime.fromisoformat("2024-01-01T10:01:00+00:00"), + operation_id="ImageGenerations_Create", + caller_ip_address="192.168.1.100", + correlation_id="test-correlation-id-2", + ), + MockLogsQueryLogEntry( + time_generated=datetime.fromisoformat("2024-01-01T10:02:00+00:00"), + operation_id="Completions_Create", + caller_ip_address="192.168.1.100", + correlation_id="test-correlation-id-3", + ), + MockLogsQueryLogEntry( + time_generated=datetime.fromisoformat("2024-01-01T10:03:00+00:00"), + operation_id="Embeddings_Create", + caller_ip_address="192.168.1.100", + correlation_id="test-correlation-id-4", + ), + MockLogsQueryLogEntry( + time_generated=datetime.fromisoformat("2024-01-01T10:04:00+00:00"), + operation_id="FineTuning_Jobs_Create", + caller_ip_address="192.168.1.100", + correlation_id="test-correlation-id-5", + ), + MockLogsQueryLogEntry( + time_generated=datetime.fromisoformat("2024-01-01T10:05:00+00:00"), + operation_id="Models_List", + caller_ip_address="192.168.1.100", + correlation_id="test-correlation-id-6", + ), + ] + + +def mock_get_llm_operations_logs_2_operations(subscription, instance, minutes): + """Mock LLM operations logs for testing - returns 2 operations""" + return [ + MockLogsQueryLogEntry( + time_generated=datetime.fromisoformat("2024-01-01T10:00:00+00:00"), + operation_id="ChatCompletions_Create", + caller_ip_address="192.168.1.100", + correlation_id="test-correlation-id-1", + ), + MockLogsQueryLogEntry( + time_generated=datetime.fromisoformat("2024-01-01T10:01:00+00:00"), + operation_id="ImageGenerations_Create", + caller_ip_address="192.168.1.100", + correlation_id="test-correlation-id-2", + ), + ] + + +def mock_get_llm_operations_logs_attacker(subscription, instance, minutes): + """Mock LLM operations logs showing potential attack""" + return [ + MockLogsQueryLogEntry( + time_generated=datetime.fromisoformat("2024-01-01T10:00:00+00:00"), + operation_id="ChatCompletions_Create", + caller_ip_address="10.0.0.50", + correlation_id="test-correlation-id-1", + ), + MockLogsQueryLogEntry( + time_generated=datetime.fromisoformat("2024-01-01T10:01:00+00:00"), + operation_id="ImageGenerations_Create", + caller_ip_address="10.0.0.50", + correlation_id="test-correlation-id-2", + ), + MockLogsQueryLogEntry( + time_generated=datetime.fromisoformat("2024-01-01T10:02:00+00:00"), + operation_id="Completions_Create", + caller_ip_address="10.0.0.50", + correlation_id="test-correlation-id-3", + ), + MockLogsQueryLogEntry( + time_generated=datetime.fromisoformat("2024-01-01T10:03:00+00:00"), + operation_id="Embeddings_Create", + caller_ip_address="10.0.0.50", + correlation_id="test-correlation-id-4", + ), + MockLogsQueryLogEntry( + time_generated=datetime.fromisoformat("2024-01-01T10:04:00+00:00"), + operation_id="FineTuning_Jobs_Create", + caller_ip_address="10.0.0.50", + correlation_id="test-correlation-id-5", + ), + MockLogsQueryLogEntry( + time_generated=datetime.fromisoformat("2024-01-01T10:05:00+00:00"), + operation_id="Models_List", + caller_ip_address="10.0.0.50", + correlation_id="test-correlation-id-6", + ), + ] + + +def mock_get_llm_operations_logs_no_workspace(subscription, instance, minutes): + """Mock LLM operations logs for instance without workspace""" + return [] + + +class Test_apim_threat_detection_llm_jacking: + def test_no_apim_instances(self): + """Test when there are no APIM instances""" + apim_client = mock.MagicMock() + apim_client.instances = {} + apim_client.audit_config = { + "apim_threat_detection_llm_jacking_threshold": 0.1, + "apim_threat_detection_llm_jacking_minutes": 1440, + "apim_threat_detection_llm_jacking_actions": [ + "ChatCompletions_Create", + "ImageGenerations_Create", + ], + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_azure_provider(), + ), + mock.patch( + "prowler.providers.azure.services.apim.apim_threat_detection_llm_jacking.apim_threat_detection_llm_jacking.apim_client", + new=apim_client, + ), + ): + from prowler.providers.azure.services.apim.apim_threat_detection_llm_jacking.apim_threat_detection_llm_jacking import ( + apim_threat_detection_llm_jacking, + ) + + check = apim_threat_detection_llm_jacking() + result = check.execute() + + assert len(result) == 0 + + def test_no_potential_llm_jacking(self): + """Test when no potential LLM jacking is detected""" + apim_client = mock.MagicMock() + apim_client.instances = { + AZURE_SUBSCRIPTION_ID: [ + mock.MagicMock( + id="/subscriptions/test-sub/resourceGroups/test-rg/providers/Microsoft.ApiManagement/service/test-apim", + name="test-apim", + log_analytics_workspace_id="/subscriptions/test-sub/resourceGroups/test-rg/providers/Microsoft.OperationalInsights/workspaces/test-workspace", + ) + ] + } + apim_client.audit_config = { + "apim_threat_detection_llm_jacking_threshold": 0.9, + "apim_threat_detection_llm_jacking_minutes": 1440, + "apim_threat_detection_llm_jacking_actions": [ + "ChatCompletions_Create", + "ImageGenerations_Create", + "Completions_Create", + "Embeddings_Create", + "FineTuning_Jobs_Create", + "Models_List", + "Deployments_List", + "Deployments_Get", + "Deployments_Create", + "Deployments_Delete", + "Messages_Create", + "Claude_Create", + "GenerateContent", + "GenerateText", + "GenerateImage", + "Llama_Create", + "CodeLlama_Create", + "Gemini_Generate", + "Claude_Generate", + "Llama_Generate", + ], + } + apim_client.get_llm_operations_logs = mock_get_llm_operations_logs_6_operations + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_azure_provider(), + ), + mock.patch( + "prowler.providers.azure.services.apim.apim_threat_detection_llm_jacking.apim_threat_detection_llm_jacking.apim_client", + new=apim_client, + ), + ): + from prowler.providers.azure.services.apim.apim_threat_detection_llm_jacking.apim_threat_detection_llm_jacking import ( + apim_threat_detection_llm_jacking, + ) + + check = apim_threat_detection_llm_jacking() + result = check.execute() + + assert len(result) == 1 + assert result[0].status == "PASS" + assert ( + "No potential LLM Jacking attacks detected" in result[0].status_extended + ) + assert result[0].subscription == AZURE_SUBSCRIPTION_ID + + def test_potential_llm_jacking_detected(self): + """Test when potential LLM jacking is detected""" + apim_client = mock.MagicMock() + apim_client.instances = { + AZURE_SUBSCRIPTION_ID: [ + mock.MagicMock( + id="/subscriptions/test-sub/resourceGroups/test-rg/providers/Microsoft.ApiManagement/service/test-apim", + name="test-apim", + log_analytics_workspace_id="/subscriptions/test-sub/resourceGroups/test-rg/providers/Microsoft.OperationalInsights/workspaces/test-workspace", + ) + ] + } + apim_client.audit_config = { + "apim_threat_detection_llm_jacking_threshold": 0.1, + "apim_threat_detection_llm_jacking_minutes": 1440, + "apim_threat_detection_llm_jacking_actions": [ + "ChatCompletions_Create", + "ImageGenerations_Create", + "Completions_Create", + "Embeddings_Create", + "FineTuning_Jobs_Create", + "Models_List", + ], + } + apim_client.get_llm_operations_logs = mock_get_llm_operations_logs_attacker + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_azure_provider(), + ), + mock.patch( + "prowler.providers.azure.services.apim.apim_threat_detection_llm_jacking.apim_threat_detection_llm_jacking.apim_client", + new=apim_client, + ), + ): + from prowler.providers.azure.services.apim.apim_threat_detection_llm_jacking.apim_threat_detection_llm_jacking import ( + apim_threat_detection_llm_jacking, + ) + + check = apim_threat_detection_llm_jacking() + result = check.execute() + + assert len(result) == 1 + assert result[0].status == "FAIL" + assert ( + "Potential LLM Jacking attack detected from IP address 10.0.0.50" + in result[0].status_extended + ) + assert result[0].subscription == AZURE_SUBSCRIPTION_ID + assert result[0].resource["name"] == "10.0.0.50" + assert result[0].resource["id"] == "10.0.0.50" + + def test_higher_threshold_no_detection(self): + """Test when threshold is higher and no attack is detected""" + apim_client = mock.MagicMock() + apim_client.instances = { + AZURE_SUBSCRIPTION_ID: [ + mock.MagicMock( + id="/subscriptions/test-sub/resourceGroups/test-rg/providers/Microsoft.ApiManagement/service/test-apim", + name="test-apim", + log_analytics_workspace_id="/subscriptions/test-sub/resourceGroups/test-rg/providers/Microsoft.OperationalInsights/workspaces/test-workspace", + ) + ] + } + apim_client.audit_config = { + "apim_threat_detection_llm_jacking_threshold": 0.9, + "apim_threat_detection_llm_jacking_minutes": 1440, + "apim_threat_detection_llm_jacking_actions": [ + "ChatCompletions_Create", + "ImageGenerations_Create", + "Completions_Create", + "Embeddings_Create", + "FineTuning_Jobs_Create", + "Models_List", + "Deployments_List", + "Deployments_Get", + "Deployments_Create", + "Deployments_Delete", + "Messages_Create", + "Claude_Create", + "GenerateContent", + "GenerateText", + "GenerateImage", + "Llama_Create", + "CodeLlama_Create", + "Gemini_Generate", + "Claude_Generate", + "Llama_Generate", + ], + } + apim_client.get_llm_operations_logs = mock_get_llm_operations_logs_6_operations + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_azure_provider(), + ), + mock.patch( + "prowler.providers.azure.services.apim.apim_threat_detection_llm_jacking.apim_threat_detection_llm_jacking.apim_client", + new=apim_client, + ), + ): + from prowler.providers.azure.services.apim.apim_threat_detection_llm_jacking.apim_threat_detection_llm_jacking import ( + apim_threat_detection_llm_jacking, + ) + + check = apim_threat_detection_llm_jacking() + result = check.execute() + + assert len(result) == 1 + assert result[0].status == "PASS" + assert ( + "No potential LLM Jacking attacks detected" in result[0].status_extended + ) + assert result[0].subscription == AZURE_SUBSCRIPTION_ID + + def test_instance_without_workspace(self): + """Test when APIM instance has no Log Analytics workspace configured""" + apim_client = mock.MagicMock() + apim_client.instances = { + AZURE_SUBSCRIPTION_ID: [ + mock.MagicMock( + id="/subscriptions/test-sub/resourceGroups/test-rg/providers/Microsoft.ApiManagement/service/test-apim", + name="test-apim", + log_analytics_workspace_id=None, + ) + ] + } + apim_client.audit_config = { + "apim_threat_detection_llm_jacking_threshold": 0.9, + "apim_threat_detection_llm_jacking_minutes": 1440, + "apim_threat_detection_llm_jacking_actions": [ + "ChatCompletions_Create", + "ImageGenerations_Create", + "Completions_Create", + "Embeddings_Create", + "FineTuning_Jobs_Create", + "Models_List", + "Deployments_List", + "Deployments_Get", + "Deployments_Create", + "Deployments_Delete", + "Messages_Create", + "Claude_Create", + "GenerateContent", + "GenerateText", + "GenerateImage", + "Llama_Create", + "CodeLlama_Create", + "Gemini_Generate", + "Claude_Generate", + "Llama_Generate", + ], + } + apim_client.get_llm_operations_logs = mock_get_llm_operations_logs_2_operations + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_azure_provider(), + ), + mock.patch( + "prowler.providers.azure.services.apim.apim_threat_detection_llm_jacking.apim_threat_detection_llm_jacking.apim_client", + new=apim_client, + ), + ): + from prowler.providers.azure.services.apim.apim_threat_detection_llm_jacking.apim_threat_detection_llm_jacking import ( + apim_threat_detection_llm_jacking, + ) + + check = apim_threat_detection_llm_jacking() + result = check.execute() + + assert len(result) == 1 + assert result[0].status == "PASS" + assert ( + "No potential LLM Jacking attacks detected" in result[0].status_extended + ) + assert result[0].subscription == AZURE_SUBSCRIPTION_ID + + def test_multiple_subscriptions(self): + """Test with multiple subscriptions""" + apim_client = mock.MagicMock() + apim_client.instances = { + AZURE_SUBSCRIPTION_ID: [ + mock.MagicMock( + id="/subscriptions/test-sub/resourceGroups/test-rg/providers/Microsoft.ApiManagement/service/test-apim", + name="test-apim", + log_analytics_workspace_id="/subscriptions/test-sub/resourceGroups/test-rg/providers/Microsoft.OperationalInsights/workspaces/test-workspace", + ) + ], + "another-subscription": [ + mock.MagicMock( + id="/subscriptions/another-sub/resourceGroups/test-rg/providers/Microsoft.ApiManagement/service/another-apim", + name="another-apim", + log_analytics_workspace_id="/subscriptions/another-sub/resourceGroups/test-rg/providers/Microsoft.OperationalInsights/workspaces/another-workspace", + ) + ], + } + apim_client.audit_config = { + "apim_threat_detection_llm_jacking_threshold": 0.9, + "apim_threat_detection_llm_jacking_minutes": 1440, + "apim_threat_detection_llm_jacking_actions": [ + "ChatCompletions_Create", + "ImageGenerations_Create", + "Completions_Create", + "Embeddings_Create", + "FineTuning_Jobs_Create", + "Models_List", + "Deployments_List", + "Deployments_Get", + "Deployments_Create", + "Deployments_Delete", + "Messages_Create", + "Claude_Create", + "GenerateContent", + "GenerateText", + "GenerateImage", + "Llama_Create", + "CodeLlama_Create", + "Gemini_Generate", + "Claude_Generate", + "Llama_Generate", + ], + } + apim_client.get_llm_operations_logs = mock_get_llm_operations_logs_2_operations + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_azure_provider(), + ), + mock.patch( + "prowler.providers.azure.services.apim.apim_threat_detection_llm_jacking.apim_threat_detection_llm_jacking.apim_client", + new=apim_client, + ), + ): + from prowler.providers.azure.services.apim.apim_threat_detection_llm_jacking.apim_threat_detection_llm_jacking import ( + apim_threat_detection_llm_jacking, + ) + + check = apim_threat_detection_llm_jacking() + result = check.execute() + + assert len(result) == 2 + # Both subscriptions should have PASS results + for report in result: + assert report.status == "PASS" + assert ( + "No potential LLM Jacking attacks detected" + in report.status_extended + ) From 7342a8901f2c5681a64f62ba7aee5aca83e701d3 Mon Sep 17 00:00:00 2001 From: Alejandro Bailo <59607668+alejandrobailo@users.noreply.github.com> Date: Thu, 28 Aug 2025 11:43:24 +0200 Subject: [PATCH 02/32] chore: update CHANGELOG.md for Prowler v5.11.0 release (#8597) --- ui/CHANGELOG.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ui/CHANGELOG.md b/ui/CHANGELOG.md index 407e76abd1..1372359a34 100644 --- a/ui/CHANGELOG.md +++ b/ui/CHANGELOG.md @@ -2,7 +2,7 @@ All notable changes to the **Prowler UI** are documented in this file. -## [1.11.0] (Prowler v5.11.0 - UNRELEASED) +## [1.11.0] (Prowler v5.11.0) ### 🚀 Added @@ -25,8 +25,6 @@ All notable changes to the **Prowler UI** are documented in this file. - Auth callback route checking working as expected [(#8556)](https://github.com/prowler-cloud/prowler/pull/8556) - DataTable column headers set to single-line [(#8480)](https://github.com/prowler-cloud/prowler/pull/8480) -### ❌ Removed - --- ## [1.10.2] (Prowler v5.10.3) From 338bb74c0ceb66f9219abc62b04d7ace86376db4 Mon Sep 17 00:00:00 2001 From: Sergio Garcia Date: Thu, 28 Aug 2025 12:03:35 +0200 Subject: [PATCH 03/32] fix(azure): query API management logs with not empty operations (#8598) --- prowler/providers/azure/services/apim/apim_service.py | 1 + 1 file changed, 1 insertion(+) diff --git a/prowler/providers/azure/services/apim/apim_service.py b/prowler/providers/azure/services/apim/apim_service.py index 8c222cbe6d..793eb727c3 100644 --- a/prowler/providers/azure/services/apim/apim_service.py +++ b/prowler/providers/azure/services/apim/apim_service.py @@ -245,6 +245,7 @@ class APIM(AzureService): query = f""" ApiManagementGatewayLogs | where _ResourceId has '{instance.id}' + | where isnotempty(OperationId) | project TimeGenerated, OperationId, CallerIpAddress, CorrelationId """ timespan = timedelta(minutes=minutes) From b4deda3c3fd860fb1c49aa26f7446f7c0b830a88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20Poyatos?= Date: Thu, 28 Aug 2025 12:39:07 +0200 Subject: [PATCH 04/32] docs(api): fix API response samples (#8592) --- api/src/backend/api/schema_hooks.py | 95 ++++ api/src/backend/api/specs/v1.yaml | 654 +++++++++++++++++--------- api/src/backend/api/v1/views.py | 52 +- api/src/backend/config/django/base.py | 3 + 4 files changed, 560 insertions(+), 244 deletions(-) create mode 100644 api/src/backend/api/schema_hooks.py diff --git a/api/src/backend/api/schema_hooks.py b/api/src/backend/api/schema_hooks.py new file mode 100644 index 0000000000..f94db59562 --- /dev/null +++ b/api/src/backend/api/schema_hooks.py @@ -0,0 +1,95 @@ +def _pick_task_response_component(components): + schemas = components.get("schemas", {}) or {} + for candidate in ("TaskResponse",): + if candidate in schemas: + return candidate + return None + + +def _extract_task_example_from_components(components): + schemas = components.get("schemas", {}) or {} + candidate = "TaskResponse" + doc = schemas.get(candidate) + if isinstance(doc, dict) and "example" in doc: + return doc["example"] + + res = schemas.get(candidate) + if isinstance(res, dict) and "example" in res: + example = res["example"] + return example if "data" in example else {"data": example} + + # Fallback + return { + "data": { + "type": "tasks", + "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", + "attributes": { + "inserted_at": "2019-08-24T14:15:22Z", + "completed_at": "2019-08-24T14:15:22Z", + "name": "string", + "state": "available", + "result": None, + "task_args": None, + "metadata": None, + }, + } + } + + +def attach_task_202_examples(result, generator, request, public): # noqa: F841 + if not isinstance(result, dict): + return result + + components = result.get("components", {}) or {} + task_resp_component = _pick_task_response_component(components) + task_example = _extract_task_example_from_components(components) + + paths = result.get("paths", {}) or {} + for path_item in paths.values(): + if not isinstance(path_item, dict): + continue + + for method_obj in path_item.values(): + if not isinstance(method_obj, dict): + continue + + responses = method_obj.get("responses", {}) or {} + resp_202 = responses.get("202") + if not isinstance(resp_202, dict): + continue + + content = resp_202.get("content", {}) or {} + jsonapi = content.get("application/vnd.api+json") + if not isinstance(jsonapi, dict): + continue + + # Inject example if missing + if "examples" not in jsonapi and "example" not in jsonapi: + jsonapi["examples"] = { + "Task queued": { + "summary": "Task queued", + "value": task_example, + } + } + + # Rewrite schema $ref if needed + if task_resp_component: + schema = jsonapi.get("schema") + must_replace = False + if not isinstance(schema, dict): + must_replace = True + else: + ref = schema.get("$ref") + if not ref: + must_replace = True + else: + current = ref.split("/")[-1] + if current != task_resp_component: + must_replace = True + + if must_replace: + jsonapi["schema"] = { + "$ref": f"#/components/schemas/{task_resp_component}" + } + + return result diff --git a/api/src/backend/api/specs/v1.yaml b/api/src/backend/api/specs/v1.yaml index cf64a00ffd..b09998234a 100644 --- a/api/src/backend/api/specs/v1.yaml +++ b/api/src/backend/api/specs/v1.yaml @@ -147,7 +147,22 @@ paths: content: application/vnd.api+json: schema: - $ref: '#/components/schemas/PaginatedTaskList' + $ref: '#/components/schemas/TaskResponse' + examples: + Task queued: + summary: Task queued + value: + data: + type: tasks + id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 + attributes: + inserted_at: '2019-08-24T14:15:22Z' + completed_at: '2019-08-24T14:15:22Z' + name: string + state: available + result: null + task_args: null + metadata: null description: The task is in progress '500': description: Compliance overviews generation task failed @@ -230,6 +245,25 @@ paths: $ref: '#/components/schemas/OpenApiResponseResponse' description: Compliance overviews metadata obtained successfully '202': + content: + application/vnd.api+json: + schema: + $ref: '#/components/schemas/TaskResponse' + examples: + Task queued: + summary: Task queued + value: + data: + type: tasks + id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 + attributes: + inserted_at: '2019-08-24T14:15:22Z' + completed_at: '2019-08-24T14:15:22Z' + name: string + state: available + result: null + task_args: null + metadata: null description: The task is in progress '500': description: Compliance overviews generation task failed @@ -360,6 +394,25 @@ paths: $ref: '#/components/schemas/PaginatedComplianceOverviewDetailList' description: Compliance requirement details obtained successfully '202': + content: + application/vnd.api+json: + schema: + $ref: '#/components/schemas/TaskResponse' + examples: + Task queued: + summary: Task queued + value: + data: + type: tasks + id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 + attributes: + inserted_at: '2019-08-24T14:15:22Z' + completed_at: '2019-08-24T14:15:22Z' + name: string + state: available + result: null + task_args: null + metadata: null description: The task is in progress '500': description: Compliance overviews generation task failed @@ -417,6 +470,7 @@ paths: name: filter[delta] schema: type: string + x-spec-enum-id: fef6b0e2506af8bc nullable: true enum: - changed @@ -452,6 +506,7 @@ paths: name: filter[impact] schema: type: string + x-spec-enum-id: c93e070ed135d9bf enum: - critical - high @@ -540,6 +595,7 @@ paths: name: filter[provider_type] schema: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -560,6 +616,7 @@ paths: type: array items: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -715,6 +772,7 @@ paths: name: filter[severity] schema: type: string + x-spec-enum-id: c93e070ed135d9bf enum: - critical - high @@ -740,6 +798,7 @@ paths: name: filter[status] schema: type: string + x-spec-enum-id: ce612ddbfa464789 enum: - FAIL - MANUAL @@ -941,6 +1000,7 @@ paths: name: filter[delta] schema: type: string + x-spec-enum-id: fef6b0e2506af8bc nullable: true enum: - changed @@ -976,6 +1036,7 @@ paths: name: filter[impact] schema: type: string + x-spec-enum-id: c93e070ed135d9bf enum: - critical - high @@ -1061,6 +1122,7 @@ paths: name: filter[provider_type] schema: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -1081,6 +1143,7 @@ paths: type: array items: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -1236,6 +1299,7 @@ paths: name: filter[severity] schema: type: string + x-spec-enum-id: c93e070ed135d9bf enum: - critical - high @@ -1261,6 +1325,7 @@ paths: name: filter[status] schema: type: string + x-spec-enum-id: ce612ddbfa464789 enum: - FAIL - MANUAL @@ -1392,6 +1457,7 @@ paths: name: filter[delta] schema: type: string + x-spec-enum-id: fef6b0e2506af8bc nullable: true enum: - changed @@ -1427,6 +1493,7 @@ paths: name: filter[impact] schema: type: string + x-spec-enum-id: c93e070ed135d9bf enum: - critical - high @@ -1490,6 +1557,7 @@ paths: name: filter[provider_type] schema: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -1510,6 +1578,7 @@ paths: type: array items: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -1650,6 +1719,7 @@ paths: name: filter[severity] schema: type: string + x-spec-enum-id: c93e070ed135d9bf enum: - critical - high @@ -1675,6 +1745,7 @@ paths: name: filter[status] schema: type: string + x-spec-enum-id: ce612ddbfa464789 enum: - FAIL - MANUAL @@ -1794,6 +1865,7 @@ paths: name: filter[delta] schema: type: string + x-spec-enum-id: fef6b0e2506af8bc nullable: true enum: - changed @@ -1829,6 +1901,7 @@ paths: name: filter[impact] schema: type: string + x-spec-enum-id: c93e070ed135d9bf enum: - critical - high @@ -1917,6 +1990,7 @@ paths: name: filter[provider_type] schema: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -1937,6 +2011,7 @@ paths: type: array items: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -2092,6 +2167,7 @@ paths: name: filter[severity] schema: type: string + x-spec-enum-id: c93e070ed135d9bf enum: - critical - high @@ -2117,6 +2193,7 @@ paths: name: filter[status] schema: type: string + x-spec-enum-id: ce612ddbfa464789 enum: - FAIL - MANUAL @@ -2234,6 +2311,7 @@ paths: name: filter[delta] schema: type: string + x-spec-enum-id: fef6b0e2506af8bc nullable: true enum: - changed @@ -2269,6 +2347,7 @@ paths: name: filter[impact] schema: type: string + x-spec-enum-id: c93e070ed135d9bf enum: - critical - high @@ -2332,6 +2411,7 @@ paths: name: filter[provider_type] schema: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -2352,6 +2432,7 @@ paths: type: array items: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -2492,6 +2573,7 @@ paths: name: filter[severity] schema: type: string + x-spec-enum-id: c93e070ed135d9bf enum: - critical - high @@ -2517,6 +2599,7 @@ paths: name: filter[status] schema: type: string + x-spec-enum-id: ce612ddbfa464789 enum: - FAIL - MANUAL @@ -2633,6 +2716,7 @@ paths: name: filter[integration_type] schema: type: string + x-spec-enum-id: 6cfd0ff9cf4d6dcc enum: - amazon_s3 - aws_security_hub @@ -2649,6 +2733,7 @@ paths: type: array items: type: string + x-spec-enum-id: 6cfd0ff9cf4d6dcc enum: - amazon_s3 - aws_security_hub @@ -2893,7 +2978,22 @@ paths: content: application/vnd.api+json: schema: - $ref: '#/components/schemas/OpenApiResponseResponse' + $ref: '#/components/schemas/TaskResponse' + examples: + Task queued: + summary: Task queued + value: + data: + type: tasks + id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 + attributes: + inserted_at: '2019-08-24T14:15:22Z' + completed_at: '2019-08-24T14:15:22Z' + name: string + state: available + result: null + task_args: null + metadata: null description: '' /api/v1/invitations/accept: post: @@ -3096,7 +3196,22 @@ paths: content: application/vnd.api+json: schema: - $ref: '#/components/schemas/OpenApiResponseResponse' + $ref: '#/components/schemas/TaskResponse' + examples: + Task queued: + summary: Task queued + value: + data: + type: tasks + id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 + attributes: + inserted_at: '2019-08-24T14:15:22Z' + completed_at: '2019-08-24T14:15:22Z' + name: string + state: available + result: null + task_args: null + metadata: null description: '' /api/v1/overviews/findings: get: @@ -3161,6 +3276,7 @@ paths: name: filter[provider_type] schema: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -3181,6 +3297,7 @@ paths: type: array items: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -3326,6 +3443,7 @@ paths: name: filter[provider_type] schema: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -3346,6 +3464,7 @@ paths: type: array items: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -3507,6 +3626,7 @@ paths: name: filter[provider_type] schema: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -3527,6 +3647,7 @@ paths: type: array items: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -3625,6 +3746,7 @@ paths: name: filter[processor_type] schema: type: string + x-spec-enum-id: 53cda4a99fe3d655 enum: - mutelist description: '* `mutelist` - Mutelist' @@ -3634,6 +3756,7 @@ paths: type: array items: type: string + x-spec-enum-id: 53cda4a99fe3d655 enum: - mutelist description: |- @@ -4217,6 +4340,7 @@ paths: name: filter[provider] schema: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -4473,7 +4597,22 @@ paths: content: application/vnd.api+json: schema: - $ref: '#/components/schemas/OpenApiResponseResponse' + $ref: '#/components/schemas/TaskResponse' + examples: + Task queued: + summary: Task queued + value: + data: + type: tasks + id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 + attributes: + inserted_at: '2019-08-24T14:15:22Z' + completed_at: '2019-08-24T14:15:22Z' + name: string + state: available + result: null + task_args: null + metadata: null description: '' /api/v1/providers/{id}/connection: post: @@ -4498,7 +4637,22 @@ paths: content: application/vnd.api+json: schema: - $ref: '#/components/schemas/OpenApiResponseResponse' + $ref: '#/components/schemas/TaskResponse' + examples: + Task queued: + summary: Task queued + value: + data: + type: tasks + id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 + attributes: + inserted_at: '2019-08-24T14:15:22Z' + completed_at: '2019-08-24T14:15:22Z' + name: string + state: available + result: null + task_args: null + metadata: null description: '' /api/v1/providers/secrets: get: @@ -4800,6 +4954,7 @@ paths: name: filter[provider_type] schema: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -4820,6 +4975,7 @@ paths: type: array items: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -5163,6 +5319,7 @@ paths: name: filter[provider_type] schema: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -5183,6 +5340,7 @@ paths: type: array items: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -5427,6 +5585,7 @@ paths: name: filter[provider_type] schema: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -5447,6 +5606,7 @@ paths: type: array items: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -5697,6 +5857,7 @@ paths: name: filter[provider_type] schema: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -5717,6 +5878,7 @@ paths: type: array items: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -6527,6 +6689,7 @@ paths: name: filter[provider_type] schema: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -6547,6 +6710,7 @@ paths: type: array items: type: string + x-spec-enum-id: 4c1e219dad1cc0e7 enum: - aws - azure @@ -6607,6 +6771,7 @@ paths: name: filter[state] schema: type: string + x-spec-enum-id: d38ba07264e1ed34 enum: - available - cancelled @@ -6627,6 +6792,7 @@ paths: type: array items: type: string + x-spec-enum-id: d38ba07264e1ed34 enum: - available - cancelled @@ -6649,6 +6815,7 @@ paths: name: filter[trigger] schema: type: string + x-spec-enum-id: 2e52c981d1c89bdf enum: - manual - scheduled @@ -6741,7 +6908,22 @@ paths: content: application/vnd.api+json: schema: - $ref: '#/components/schemas/OpenApiResponseResponse' + $ref: '#/components/schemas/TaskResponse' + examples: + Task queued: + summary: Task queued + value: + data: + type: tasks + id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 + attributes: + inserted_at: '2019-08-24T14:15:22Z' + completed_at: '2019-08-24T14:15:22Z' + name: string + state: available + result: null + task_args: null + metadata: null description: '' /api/v1/scans/{id}: get: @@ -6945,7 +7127,22 @@ paths: content: application/vnd.api+json: schema: - $ref: '#/components/schemas/OpenApiResponseResponse' + $ref: '#/components/schemas/TaskResponse' + examples: + Task queued: + summary: Task queued + value: + data: + type: tasks + id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 + attributes: + inserted_at: '2019-08-24T14:15:22Z' + completed_at: '2019-08-24T14:15:22Z' + name: string + state: available + result: null + task_args: null + metadata: null description: '' /api/v1/tasks: get: @@ -7110,7 +7307,22 @@ paths: content: application/vnd.api+json: schema: - $ref: '#/components/schemas/OpenApiResponseResponse' + $ref: '#/components/schemas/TaskResponse' + examples: + Task queued: + summary: Task queued + value: + data: + type: tasks + id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 + attributes: + inserted_at: '2019-08-24T14:15:22Z' + completed_at: '2019-08-24T14:15:22Z' + name: string + state: available + result: null + task_args: null + metadata: null description: '' /api/v1/tenants: get: @@ -7532,6 +7744,7 @@ paths: name: filter[state] schema: type: string + x-spec-enum-id: 92a1c1fd12e13e25 enum: - accepted - expired @@ -8217,6 +8430,7 @@ paths: name: filter[role] schema: type: string + x-spec-enum-id: 12c359ee5dc51001 enum: - member - owner @@ -8378,11 +8592,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/ComplianceOverviewTypeEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - compliance-overviews id: {} attributes: type: object @@ -8417,11 +8632,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/ComplianceOverviewAttributesTypeEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - compliance-requirements-attributes id: {} attributes: type: object @@ -8447,10 +8663,6 @@ components: - version - description - attributes - ComplianceOverviewAttributesTypeEnum: - type: string - enum: - - compliance-requirements-attributes ComplianceOverviewDetail: type: object required: @@ -8459,11 +8671,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/ComplianceOverviewDetailTypeEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - compliance-requirements-details id: {} attributes: type: object @@ -8486,16 +8699,13 @@ components: * `FAIL` - Fail * `PASS` - Pass * `MANUAL` - Manual + x-spec-enum-id: ce612ddbfa464789 required: - id - framework - version - description - status - ComplianceOverviewDetailTypeEnum: - type: string - enum: - - compliance-requirements-details ComplianceOverviewMetadata: type: object required: @@ -8504,11 +8714,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/ComplianceOverviewMetadataTypeEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - compliance-overviews-metadata id: {} attributes: type: object @@ -8519,14 +8730,6 @@ components: type: string required: - regions - ComplianceOverviewMetadataTypeEnum: - type: string - enum: - - compliance-overviews-metadata - ComplianceOverviewTypeEnum: - type: string - enum: - - compliance-overviews Finding: type: object required: @@ -8535,11 +8738,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/FindingTypeEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - findings id: type: string format: uuid @@ -8558,6 +8762,7 @@ components: description: |- * `new` - New * `changed` - Changed + x-spec-enum-id: fef6b0e2506af8bc nullable: true status: enum: @@ -8569,6 +8774,7 @@ components: * `FAIL` - Fail * `PASS` - Pass * `MANUAL` - Manual + x-spec-enum-id: ce612ddbfa464789 status_extended: type: string nullable: true @@ -8586,6 +8792,7 @@ components: * `medium` - Medium * `low` - Low * `informational` - Informational + x-spec-enum-id: c93e070ed135d9bf check_id: type: string maxLength: 100 @@ -8682,11 +8889,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/FindingDynamicFilterTypeEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - finding-dynamic-filters id: {} attributes: type: object @@ -8709,10 +8917,6 @@ components: $ref: '#/components/schemas/FindingDynamicFilter' required: - data - FindingDynamicFilterTypeEnum: - type: string - enum: - - finding-dynamic-filters FindingMetadata: type: object required: @@ -8721,11 +8925,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/FindingMetadataTypeEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - findings-metadata id: {} attributes: type: object @@ -8753,10 +8958,6 @@ components: $ref: '#/components/schemas/FindingMetadata' required: - data - FindingMetadataTypeEnum: - type: string - enum: - - findings-metadata FindingResponse: type: object properties: @@ -8764,10 +8965,6 @@ components: $ref: '#/components/schemas/Finding' required: - data - FindingTypeEnum: - type: string - enum: - - findings Integration: type: object required: @@ -8776,11 +8973,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/TypeC82Enum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - integrations id: type: string format: uuid @@ -8816,6 +9014,7 @@ components: * `aws_security_hub` - AWS Security Hub * `jira` - JIRA * `slack` - Slack + x-spec-enum-id: 6cfd0ff9cf4d6dcc configuration: {} required: - integration_type @@ -8859,11 +9058,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/TypeC82Enum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - integrations attributes: type: object properties: @@ -8898,6 +9098,7 @@ components: * `aws_security_hub` - AWS Security Hub * `jira` - JIRA * `slack` - Slack + x-spec-enum-id: 6cfd0ff9cf4d6dcc configuration: oneOf: - type: object @@ -8924,8 +9125,8 @@ components: send_only_fails: type: boolean default: false - description: If true, only findings with status 'FAIL' will - be sent to Security Hub. + description: If true, only findings with status 'FAIL' will be + sent to Security Hub. archive_previous_findings: type: boolean default: false @@ -9056,6 +9257,7 @@ components: * `aws_security_hub` - AWS Security Hub * `jira` - JIRA * `slack` - Slack + x-spec-enum-id: 6cfd0ff9cf4d6dcc configuration: oneOf: - type: object @@ -9190,11 +9392,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/TypeC82Enum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - integrations id: {} attributes: type: object @@ -9230,6 +9433,7 @@ components: * `aws_security_hub` - AWS Security Hub * `jira` - JIRA * `slack` - Slack + x-spec-enum-id: 6cfd0ff9cf4d6dcc readOnly: true configuration: oneOf: @@ -9257,8 +9461,8 @@ components: send_only_fails: type: boolean default: false - description: If true, only findings with status 'FAIL' will - be sent to Security Hub. + description: If true, only findings with status 'FAIL' will be + sent to Security Hub. archive_previous_findings: type: boolean default: false @@ -9350,11 +9554,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/TypeD4dEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - invitations id: type: string format: uuid @@ -9385,6 +9590,7 @@ components: * `accepted` - Invitation was accepted by a user * `expired` - Invitation expired after the configured time * `revoked` - Invitation was revoked by a user + x-spec-enum-id: 92a1c1fd12e13e25 token: type: string readOnly: true @@ -9485,11 +9691,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/TypeD4dEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - invitations attributes: type: object properties: @@ -9514,6 +9721,7 @@ components: * `accepted` - Invitation was accepted by a user * `expired` - Invitation expired after the configured time * `revoked` - Invitation was revoked by a user + x-spec-enum-id: 92a1c1fd12e13e25 readOnly: true token: type: string @@ -9620,6 +9828,7 @@ components: * `accepted` - Invitation was accepted by a user * `expired` - Invitation expired after the configured time * `revoked` - Invitation was revoked by a user + x-spec-enum-id: 92a1c1fd12e13e25 readOnly: true token: type: string @@ -9710,11 +9919,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/TypeD4dEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - invitations id: type: string format: uuid @@ -9740,6 +9950,7 @@ components: * `accepted` - Invitation was accepted by a user * `expired` - Invitation expired after the configured time * `revoked` - Invitation was revoked by a user + x-spec-enum-id: 92a1c1fd12e13e25 readOnly: true token: type: string @@ -9790,11 +10001,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/Type4bfEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - lighthouse-configurations id: type: string format: uuid @@ -9821,6 +10033,7 @@ components: - gpt-5-mini-2025-08-07 - gpt-5-mini type: string + x-spec-enum-id: bd2108eb25b2d472 description: |- Must be one of the supported model names @@ -9866,11 +10079,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/Type4bfEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - lighthouse-configurations attributes: type: object properties: @@ -9895,6 +10109,7 @@ components: - gpt-5-mini-2025-08-07 - gpt-5-mini type: string + x-spec-enum-id: bd2108eb25b2d472 description: |- Must be one of the supported model names @@ -9975,6 +10190,7 @@ components: - gpt-5-mini-2025-08-07 - gpt-5-mini type: string + x-spec-enum-id: bd2108eb25b2d472 description: |- Must be one of the supported model names @@ -10031,11 +10247,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/Type4bfEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - lighthouse-configurations id: type: string format: uuid @@ -10063,6 +10280,7 @@ components: - gpt-5-mini-2025-08-07 - gpt-5-mini type: string + x-spec-enum-id: bd2108eb25b2d472 description: |- Must be one of the supported model names @@ -10105,11 +10323,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/MembershipTypeEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - memberships attributes: type: object properties: @@ -10121,6 +10340,7 @@ components: description: |- * `owner` - Owner * `member` - Member + x-spec-enum-id: 12c359ee5dc51001 date_joined: type: string format: date-time @@ -10187,10 +10407,6 @@ components: $ref: '#/components/schemas/Membership' required: - data - MembershipTypeEnum: - type: string - enum: - - memberships OpenApiResponseResponse: type: object properties: @@ -10206,11 +10422,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/OverviewFindingTypeEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - findings-overview id: {} attributes: type: object @@ -10265,10 +10482,6 @@ components: $ref: '#/components/schemas/OverviewFinding' required: - data - OverviewFindingTypeEnum: - type: string - enum: - - findings-overview OverviewProvider: type: object required: @@ -10277,11 +10490,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/OverviewProviderTypeEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - providers-overview id: {} attributes: type: object @@ -10315,10 +10529,6 @@ components: $ref: '#/components/schemas/OverviewProvider' required: - data - OverviewProviderTypeEnum: - type: string - enum: - - providers-overview OverviewService: type: object required: @@ -10327,11 +10537,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/OverviewServiceTypeEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - services-overview id: {} attributes: type: object @@ -10359,10 +10570,6 @@ components: $ref: '#/components/schemas/OverviewService' required: - data - OverviewServiceTypeEnum: - type: string - enum: - - services-overview OverviewSeverity: type: object required: @@ -10371,11 +10578,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/OverviewSeverityTypeEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - findings-severity-overview id: {} attributes: type: object @@ -10406,10 +10614,6 @@ components: $ref: '#/components/schemas/OverviewSeverity' required: - data - OverviewSeverityTypeEnum: - type: string - enum: - - findings-severity-overview PaginatedComplianceOverviewAttributesList: type: object properties: @@ -10633,6 +10837,7 @@ components: * `aws_security_hub` - AWS Security Hub * `jira` - JIRA * `slack` - Slack + x-spec-enum-id: 6cfd0ff9cf4d6dcc readOnly: true configuration: oneOf: @@ -10785,6 +10990,7 @@ components: * `accepted` - Invitation was accepted by a user * `expired` - Invitation expired after the configured time * `revoked` - Invitation was revoked by a user + x-spec-enum-id: 92a1c1fd12e13e25 readOnly: true token: type: string @@ -10868,6 +11074,7 @@ components: - gpt-5-mini-2025-08-07 - gpt-5-mini type: string + x-spec-enum-id: bd2108eb25b2d472 description: |- Must be one of the supported model names @@ -11174,6 +11381,7 @@ components: * `static` - Key-value pairs * `role` - Role assumption * `service_account` - GCP Service Account Key + x-spec-enum-id: 20c74ebcd6671497 secret: oneOf: - type: object @@ -11806,11 +12014,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/Type552Enum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - processors id: type: string format: uuid @@ -11830,6 +12039,7 @@ components: - mutelist type: string description: '* `mutelist` - Mutelist' + x-spec-enum-id: 53cda4a99fe3d655 configuration: oneOf: - type: object @@ -11907,11 +12117,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/Type552Enum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - processors attributes: type: object properties: @@ -11928,6 +12139,7 @@ components: - mutelist type: string description: '* `mutelist` - Mutelist' + x-spec-enum-id: 53cda4a99fe3d655 configuration: oneOf: - type: object @@ -12030,6 +12242,7 @@ components: - mutelist type: string description: '* `mutelist` - Mutelist' + x-spec-enum-id: 53cda4a99fe3d655 configuration: oneOf: - type: object @@ -12124,11 +12337,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/Type552Enum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - processors id: {} attributes: type: object @@ -12225,11 +12439,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/Type227Enum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - providers id: type: string format: uuid @@ -12260,6 +12475,7 @@ components: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + x-spec-enum-id: 4c1e219dad1cc0e7 uid: type: string title: Unique identifier for the provider, set by the provider @@ -12347,11 +12563,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/Type227Enum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - providers attributes: type: object properties: @@ -12376,6 +12593,7 @@ components: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + x-spec-enum-id: 4c1e219dad1cc0e7 uid: type: string title: Unique identifier for the provider, set by the provider @@ -12423,6 +12641,7 @@ components: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + x-spec-enum-id: 4c1e219dad1cc0e7 uid: type: string minLength: 3 @@ -12447,11 +12666,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/Type34dEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - provider-groups id: type: string format: uuid @@ -12537,11 +12757,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/Type34dEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - provider-groups attributes: type: object properties: @@ -12828,11 +13049,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/Type049Enum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - provider-secrets id: type: string format: uuid @@ -12862,6 +13084,7 @@ components: * `static` - Key-value pairs * `role` - Role assumption * `service_account` - GCP Service Account Key + x-spec-enum-id: 20c74ebcd6671497 required: - secret_type relationships: @@ -12900,11 +13123,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/Type049Enum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - provider-secrets attributes: type: object properties: @@ -12931,6 +13155,7 @@ components: * `static` - Key-value pairs * `role` - Role assumption * `service_account` - GCP Service Account Key + x-spec-enum-id: 20c74ebcd6671497 secret: oneOf: - type: object @@ -13177,6 +13402,7 @@ components: * `static` - Key-value pairs * `role` - Role assumption * `service_account` - GCP Service Account Key + x-spec-enum-id: 20c74ebcd6671497 secret: oneOf: - type: object @@ -13406,11 +13632,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/Type049Enum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - provider-secrets id: type: string format: uuid @@ -13440,6 +13667,7 @@ components: * `static` - Key-value pairs * `role` - Role assumption * `service_account` - GCP Service Account Key + x-spec-enum-id: 20c74ebcd6671497 secret: oneOf: - type: object @@ -13657,11 +13885,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/ResourceTypeEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - resources id: type: string format: uuid @@ -13767,11 +13996,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/ResourceMetadataTypeEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - resources-metadata id: {} attributes: type: object @@ -13799,10 +14029,6 @@ components: $ref: '#/components/schemas/ResourceMetadata' required: - data - ResourceMetadataTypeEnum: - type: string - enum: - - resources-metadata ResourceResponse: type: object properties: @@ -13810,10 +14036,6 @@ components: $ref: '#/components/schemas/Resource' required: - data - ResourceTypeEnum: - type: string - enum: - - resources Role: type: object required: @@ -13822,11 +14044,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/Type6bbEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - roles id: type: string format: uuid @@ -13956,11 +14179,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/Type6bbEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - roles attributes: type: object properties: @@ -14299,11 +14523,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/SAMLConfigurationTypeEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - saml-configurations id: type: string format: uuid @@ -14378,10 +14603,6 @@ components: $ref: '#/components/schemas/SAMLConfiguration' required: - data - SAMLConfigurationTypeEnum: - type: string - enum: - - saml-configurations Scan: type: object required: @@ -14390,11 +14611,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/TypeE53Enum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - scans id: type: string format: uuid @@ -14414,6 +14636,7 @@ components: description: |- * `scheduled` - Scheduled * `manual` - Manual + x-spec-enum-id: 2e52c981d1c89bdf readOnly: true state: enum: @@ -14431,6 +14654,7 @@ components: * `completed` - Completed * `failed` - Failed * `cancelled` - Cancelled + x-spec-enum-id: d38ba07264e1ed34 readOnly: true unique_resource_count: type: integer @@ -14614,11 +14838,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/TypeE53Enum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - scans id: type: string format: uuid @@ -14678,11 +14903,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/TaskTypeEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - tasks id: type: string format: uuid @@ -14723,10 +14949,6 @@ components: $ref: '#/components/schemas/Task' required: - data - TaskTypeEnum: - type: string - enum: - - tasks Tenant: type: object required: @@ -14735,11 +14957,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/TenantTypeEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - tenants id: type: string format: uuid @@ -14849,10 +15072,6 @@ components: $ref: '#/components/schemas/Tenant' required: - data - TenantTypeEnum: - type: string - enum: - - tenants Token: type: object required: @@ -14860,11 +15079,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/TokenTypeEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - tokens attributes: type: object properties: @@ -14896,11 +15116,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/TokenRefreshTypeEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - tokens-refresh attributes: type: object properties: @@ -14948,10 +15169,6 @@ components: $ref: '#/components/schemas/TokenRefresh' required: - data - TokenRefreshTypeEnum: - type: string - enum: - - tokens-refresh TokenRequest: type: object properties: @@ -15012,11 +15229,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/TokenSwitchTenantTypeEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - tokens-switch-tenant attributes: type: object properties: @@ -15076,54 +15294,6 @@ components: $ref: '#/components/schemas/TokenSwitchTenant' required: - data - TokenSwitchTenantTypeEnum: - type: string - enum: - - tokens-switch-tenant - TokenTypeEnum: - type: string - enum: - - tokens - Type049Enum: - type: string - enum: - - provider-secrets - Type227Enum: - type: string - enum: - - providers - Type34dEnum: - type: string - enum: - - provider-groups - Type4bfEnum: - type: string - enum: - - lighthouse-configurations - Type552Enum: - type: string - enum: - - processors - Type6bbEnum: - type: string - enum: - - roles - Type8cdEnum: - type: string - enum: - - users - TypeC82Enum: - type: string - enum: - - integrations - TypeD4dEnum: - type: string - enum: - - invitations - TypeE53Enum: - type: string - enum: - - scans User: type: object required: @@ -15132,11 +15302,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/Type8cdEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - users id: type: string format: uuid @@ -15230,11 +15401,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/Type8cdEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - users attributes: type: object properties: @@ -15348,11 +15520,12 @@ components: additionalProperties: false properties: type: - allOf: - - $ref: '#/components/schemas/Type8cdEnum' + type: string description: The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships. + enum: + - users id: type: string format: uuid @@ -15397,30 +15570,45 @@ tags: refreshing an existing token for authentication purposes. - name: Tenant description: Endpoints for managing tenants, along with their memberships. +- name: Membership + description: Endpoints for managing tenant memberships, allowing retrieval and filtering + of user membership information within tenants. - name: Invitation description: Endpoints for tenant invitations management, allowing retrieval and filtering of invitations, creating new invitations, accepting and revoking them. +- name: Role + description: Endpoints for managing RBAC roles within tenants, allowing creation, + retrieval, updating, and deletion of role configurations and permissions. - name: Provider description: Endpoints for managing providers (AWS, GCP, Azure, etc...). +- name: Provider Secret + description: Endpoints for managing provider secrets, allowing secure storage and + management of credentials for providers. - name: Provider Group description: Endpoints for managing provider groups. +- name: Task + description: Endpoints for task management, allowing retrieval of task status and + revoking tasks that have not started. - name: Scan description: Endpoints for triggering manual scans and viewing scan results. +- name: Schedule + description: Endpoints for managing scan schedules, allowing configuration of automated + scans with different scheduling options. - name: Resource description: Endpoints for managing resources discovered by scans, allowing retrieval and filtering of resource information. - name: Finding description: Endpoints for managing findings, allowing retrieval and filtering of findings that result from scans. -- name: Overview - description: Endpoints for retrieving aggregated summaries of resources from the - system. +- name: Processor + description: Endpoints for managing post-processors used to process Prowler findings, + including registration, configuration, and deletion of post-processing actions. - name: Compliance Overview description: Endpoints for checking the compliance overview, allowing filtering by scan, provider or compliance framework ID. -- name: Task - description: Endpoints for task management, allowing retrieval of task status and - revoking tasks that have not started. +- name: Overview + description: Endpoints for retrieving aggregated summaries of resources from the + system. - name: Integration description: Endpoints for managing third-party integrations, including registration, configuration, retrieval, and deletion of integrations such as S3, JIRA, or other @@ -15429,6 +15617,6 @@ tags: description: Endpoints for managing Lighthouse configurations, including creation, retrieval, updating, and deletion of configurations such as OpenAI keys, models, and business context. -- name: Processor - description: Endpoints for managing post-processors used to process Prowler findings, - including registration, configuration, and deletion of post-processing actions. +- name: SAML + description: Endpoints for Single Sign-On authentication management via SAML for + seamless user authentication. diff --git a/api/src/backend/api/v1/views.py b/api/src/backend/api/v1/views.py index 28cbc3ab5f..59706c8bc1 100644 --- a/api/src/backend/api/v1/views.py +++ b/api/src/backend/api/v1/views.py @@ -308,23 +308,48 @@ class SchemaView(SpectacularAPIView): "name": "Tenant", "description": "Endpoints for managing tenants, along with their memberships.", }, + { + "name": "Membership", + "description": "Endpoints for managing tenant memberships, allowing retrieval and filtering of " + "user membership information within tenants.", + }, { "name": "Invitation", "description": "Endpoints for tenant invitations management, allowing retrieval and filtering of " "invitations, creating new invitations, accepting and revoking them.", }, + { + "name": "Role", + "description": "Endpoints for managing RBAC roles within tenants, allowing creation, retrieval, " + "updating, and deletion of role configurations and permissions.", + }, { "name": "Provider", "description": "Endpoints for managing providers (AWS, GCP, Azure, etc...).", }, + { + "name": "Provider Secret", + "description": "Endpoints for managing provider secrets, allowing secure storage and management " + "of credentials for providers.", + }, { "name": "Provider Group", "description": "Endpoints for managing provider groups.", }, + { + "name": "Task", + "description": "Endpoints for task management, allowing retrieval of task status and " + "revoking tasks that have not started.", + }, { "name": "Scan", "description": "Endpoints for triggering manual scans and viewing scan results.", }, + { + "name": "Schedule", + "description": "Endpoints for managing scan schedules, allowing configuration of automated " + "scans with different scheduling options.", + }, { "name": "Resource", "description": "Endpoints for managing resources discovered by scans, allowing " @@ -336,8 +361,9 @@ class SchemaView(SpectacularAPIView): "findings that result from scans.", }, { - "name": "Overview", - "description": "Endpoints for retrieving aggregated summaries of resources from the system.", + "name": "Processor", + "description": "Endpoints for managing post-processors used to process Prowler findings, including " + "registration, configuration, and deletion of post-processing actions.", }, { "name": "Compliance Overview", @@ -345,9 +371,8 @@ class SchemaView(SpectacularAPIView): " compliance framework ID.", }, { - "name": "Task", - "description": "Endpoints for task management, allowing retrieval of task status and " - "revoking tasks that have not started.", + "name": "Overview", + "description": "Endpoints for retrieving aggregated summaries of resources from the system.", }, { "name": "Integration", @@ -357,12 +382,13 @@ class SchemaView(SpectacularAPIView): { "name": "Lighthouse", "description": "Endpoints for managing Lighthouse configurations, including creation, retrieval, " - "updating, and deletion of configurations such as OpenAI keys, models, and business context.", + "updating, and deletion of configurations such as OpenAI keys, models, and business " + "context.", }, { - "name": "Processor", - "description": "Endpoints for managing post-processors used to process Prowler findings, including " - "registration, configuration, and deletion of post-processing actions.", + "name": "SAML", + "description": "Endpoints for Single Sign-On authentication management via SAML for seamless user " + "authentication.", }, ] return super().get(request, *args, **kwargs) @@ -3033,7 +3059,9 @@ class RoleProviderGroupRelationshipView(RelationshipView, BaseRLSViewSet): description="Compliance overviews metadata obtained successfully", response=ComplianceOverviewMetadataSerializer, ), - 202: OpenApiResponse(description="The task is in progress"), + 202: OpenApiResponse( + description="The task is in progress", response=TaskSerializer + ), 500: OpenApiResponse( description="Compliance overviews generation task failed" ), @@ -3065,7 +3093,9 @@ class RoleProviderGroupRelationshipView(RelationshipView, BaseRLSViewSet): description="Compliance requirement details obtained successfully", response=ComplianceOverviewDetailSerializer(many=True), ), - 202: OpenApiResponse(description="The task is in progress"), + 202: OpenApiResponse( + description="The task is in progress", response=TaskSerializer + ), 500: OpenApiResponse( description="Compliance overviews generation task failed" ), diff --git a/api/src/backend/config/django/base.py b/api/src/backend/config/django/base.py index 514dcfc6ff..37d905ba58 100644 --- a/api/src/backend/config/django/base.py +++ b/api/src/backend/config/django/base.py @@ -116,6 +116,9 @@ SPECTACULAR_SETTINGS = { "PREPROCESSING_HOOKS": [ "drf_spectacular_jsonapi.hooks.fix_nested_path_parameters", ], + "POSTPROCESSING_HOOKS": [ + "api.schema_hooks.attach_task_202_examples", + ], "TITLE": "API Reference - Prowler", } From b003fca37712bbdd90fa8313848cf57a1e447f4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20Poyatos?= Date: Thu, 28 Aug 2025 12:55:46 +0200 Subject: [PATCH 05/32] fix(docs): remove empty sections (#8600) --- api/src/backend/api/specs/v1.yaml | 6 ------ api/src/backend/api/v1/views.py | 10 ---------- 2 files changed, 16 deletions(-) diff --git a/api/src/backend/api/specs/v1.yaml b/api/src/backend/api/specs/v1.yaml index b09998234a..fa1520f60e 100644 --- a/api/src/backend/api/specs/v1.yaml +++ b/api/src/backend/api/specs/v1.yaml @@ -15570,9 +15570,6 @@ tags: refreshing an existing token for authentication purposes. - name: Tenant description: Endpoints for managing tenants, along with their memberships. -- name: Membership - description: Endpoints for managing tenant memberships, allowing retrieval and filtering - of user membership information within tenants. - name: Invitation description: Endpoints for tenant invitations management, allowing retrieval and filtering of invitations, creating new invitations, accepting and revoking them. @@ -15581,9 +15578,6 @@ tags: retrieval, updating, and deletion of role configurations and permissions. - name: Provider description: Endpoints for managing providers (AWS, GCP, Azure, etc...). -- name: Provider Secret - description: Endpoints for managing provider secrets, allowing secure storage and - management of credentials for providers. - name: Provider Group description: Endpoints for managing provider groups. - name: Task diff --git a/api/src/backend/api/v1/views.py b/api/src/backend/api/v1/views.py index 59706c8bc1..a75976c314 100644 --- a/api/src/backend/api/v1/views.py +++ b/api/src/backend/api/v1/views.py @@ -308,11 +308,6 @@ class SchemaView(SpectacularAPIView): "name": "Tenant", "description": "Endpoints for managing tenants, along with their memberships.", }, - { - "name": "Membership", - "description": "Endpoints for managing tenant memberships, allowing retrieval and filtering of " - "user membership information within tenants.", - }, { "name": "Invitation", "description": "Endpoints for tenant invitations management, allowing retrieval and filtering of " @@ -327,11 +322,6 @@ class SchemaView(SpectacularAPIView): "name": "Provider", "description": "Endpoints for managing providers (AWS, GCP, Azure, etc...).", }, - { - "name": "Provider Secret", - "description": "Endpoints for managing provider secrets, allowing secure storage and management " - "of credentials for providers.", - }, { "name": "Provider Group", "description": "Endpoints for managing provider groups.", From 358d4239c73f7f9476e8cb4d7123b5976f58553a Mon Sep 17 00:00:00 2001 From: Prowler Bot Date: Thu, 28 Aug 2025 16:56:24 +0200 Subject: [PATCH 06/32] chore(release): Bump version to v5.12.0 (#8605) Co-authored-by: prowler-bot <179230569+prowler-bot@users.noreply.github.com> --- prowler/config/config.py | 2 +- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/prowler/config/config.py b/prowler/config/config.py index 46dd6f8c1c..6f596ee9ea 100644 --- a/prowler/config/config.py +++ b/prowler/config/config.py @@ -12,7 +12,7 @@ from prowler.lib.logger import logger timestamp = datetime.today() timestamp_utc = datetime.now(timezone.utc).replace(tzinfo=timezone.utc) -prowler_version = "5.11.0" +prowler_version = "5.12.0" html_logo_url = "https://github.com/prowler-cloud/prowler/" square_logo_img = "https://prowler.com/wp-content/uploads/logo-html.png" aws_logo = "https://user-images.githubusercontent.com/38561120/235953920-3e3fba08-0795-41dc-b480-9bea57db9f2e.png" diff --git a/pyproject.toml b/pyproject.toml index 738d9042d5..d1381c298f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -74,7 +74,7 @@ maintainers = [{name = "Prowler Engineering", email = "engineering@prowler.com"} name = "prowler" readme = "README.md" requires-python = ">3.9.1,<3.13" -version = "5.11.0" +version = "5.12.0" [project.scripts] prowler = "prowler.__main__:prowler" From 9e02da342b6288655c2b5af07247b0dbbbc0ce91 Mon Sep 17 00:00:00 2001 From: Alejandro Bailo <59607668+alejandrobailo@users.noreply.github.com> Date: Thu, 28 Aug 2025 16:58:42 +0200 Subject: [PATCH 07/32] docs: Security Hub API and UI documentation (#8576) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Adrián Jesús Peña Rodríguez Co-authored-by: Pepe Fagoaga --- docs/tutorials/aws/securityhub.md | 2 +- .../img/security-hub/create-integration.png | Bin 0 -> 404297 bytes .../img/security-hub/integration-settings.png | Bin 0 -> 107320 bytes .../img/security-hub/integrations-tab.png | Bin 0 -> 378347 bytes .../prowler-app-security-hub-integration.md | 128 ++++++++++++++++++ mkdocs.yml | 4 +- 6 files changed, 132 insertions(+), 2 deletions(-) create mode 100644 docs/tutorials/img/security-hub/create-integration.png create mode 100644 docs/tutorials/img/security-hub/integration-settings.png create mode 100644 docs/tutorials/img/security-hub/integrations-tab.png create mode 100644 docs/tutorials/prowler-app-security-hub-integration.md diff --git a/docs/tutorials/aws/securityhub.md b/docs/tutorials/aws/securityhub.md index 1ece9e61e5..050896763b 100644 --- a/docs/tutorials/aws/securityhub.md +++ b/docs/tutorials/aws/securityhub.md @@ -132,7 +132,7 @@ prowler --security-hub --role arn:aws:iam::123456789012:role/ProwlerExecutionRol ``` ???+ note - The specified IAM role must have the necessary permissions to send findings to Security Hub. For details on the required permissions, refer to the IAM policy: [prowler-security-hub.json](https://github.com/prowler-cloud/prowler/blob/master/permissions/prowler-security-hub.json) + The specified IAM role must have the necessary permissions to send findings to Security Hub. For details on the required permissions, refer to the IAM policy: [prowler-additions-policy.json](https://github.com/prowler-cloud/prowler/blob/master/permissions/prowler-additions-policy.json) ## Sending Only Failed Findings to AWS Security Hub diff --git a/docs/tutorials/img/security-hub/create-integration.png b/docs/tutorials/img/security-hub/create-integration.png new file mode 100644 index 0000000000000000000000000000000000000000..145e68d2012ed762db1fadd438304203084f6222 GIT binary patch literal 404297 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 R}!q|Zdqk!-pPhs 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

;gbuHVI>K{a$mf!ov|}CHIz+%`xd&fB_h9$1mdr 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

6T}Vv>V@l$$>Oupm@JBJ3>1tZ#y6s$Atgz+;gOT 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 TY=PPz;2%XfwL68kA3py-|B}}I literal 0 HcmV?d00001 diff --git a/docs/tutorials/prowler-app-security-hub-integration.md b/docs/tutorials/prowler-app-security-hub-integration.md new file mode 100644 index 0000000000..0cc4193b98 --- /dev/null +++ b/docs/tutorials/prowler-app-security-hub-integration.md @@ -0,0 +1,128 @@ +# AWS Security Hub Integration + +Prowler App enables automatic export of security findings to AWS Security Hub, providing seamless integration with AWS's native security and compliance service. This comprehensive guide demonstrates how to configure and manage AWS Security Hub integrations to centralize security findings and enhance compliance tracking across AWS environments. + +Integrating Prowler App with AWS Security Hub provides: + +* **Centralized security visibility:** Consolidate findings from multiple AWS accounts and regions +* **Native AWS integration:** Leverage existing AWS security workflows and compliance frameworks +* **Automated finding management:** Archive resolved findings and filter results based on severity +* **Cost optimization:** Send only failed findings to reduce AWS Security Hub costs +* **Real-time updates:** Automatically export findings after each scan completion + +## How It Works + +When enabled and configured: + +1. Scan results are automatically sent to AWS Security Hub after each scan completes +2. Findings are formatted in [AWS Security Finding Format](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-findings-format.html) (ASFF) +3. The integration automatically detects new AWS regions to send findings if the Prowler partner integration is enabled +4. Previously resolved findings are archived to maintain clean Security Hub dashboards + +???+ note + Refer to [AWS Security Hub pricing](https://aws.amazon.com/security-hub/pricing/) for cost information. + +## Prerequisites + +Before configuring AWS Security Hub Integration in Prowler App, complete these steps: + +### AWS Security Hub Setup + +Enable the Prowler partner integration in AWS Security Hub by following the [AWS Security Hub setup documentation](./aws/securityhub.md#enabling-aws-security-hub-for-prowler-integration). + +### AWS Authentication + +Configure AWS credentials by following the [AWS authentication setup guide](./aws/getting-started-aws.md#step-3-set-up-aws-authentication). + +## Configuration + +To configure AWS Security Hub integration in Prowler App: + +1. Navigate to **Integrations** in the Prowler App interface +2. Locate the **AWS Security Hub** card and click **Manage**, then select **Add integration** + + ![Integrations tab](./img/security-hub/integrations-tab.png) + +3. Complete the integration settings + +* **AWS Provider:** Select the AWS provider whose findings should be exported to Security Hub +* **Send Only Failed Findings:** Filter out `PASS` findings to reduce AWS Security Hub costs (enabled by default) +* **Archive Previous Findings:** Automatically archive findings resolved since the last scan to maintain clean Security Hub dashboards + + ![Integration settings](./img/security-hub/integration-settings.png) + +4. Configure authentication: + +Choose the appropriate authentication method: + +* **Use Provider Credentials** (recommended): Leverages the AWS provider's existing credentials + + ???+ tip "Simplified Credential Management" + Using provider credentials reduces administrative complexity by managing a single set of credentials instead of maintaining separate authentication mechanisms. This approach minimizes security risks and provides the most efficient integration path when the AWS account has sufficient permissions to export findings to Security Hub. + +* **Custom Credentials:** Configure separate credentials specifically for Security Hub access + + +5. Click **Create integration** to enable the integration + + ![Create integration](./img/security-hub/create-integration.png) + +Once configured successfully, findings from subsequent scans will automatically appear in AWS Security Hub. + +### Integration Status + +Once the integration is active, monitor its status and make adjustments as needed through the integrations management interface. + +1. Review configured integrations in the management interface +2. Each integration displays: + + - **Connection Status:** Connected or Disconnected indicator. + - **Provider Information:** Selected AWS provider name. + - **Finding Filters:** Status of failed-only and archive settings. + - **Last Checked:** Timestamp of the most recent connection test. + - **Regions:** List of regions where the integration is active. + +#### Actions + +Each Security Hub integration provides several management actions accessible through dedicated buttons: + +| Button | Purpose | Available Actions | Notes | +|--------|---------|------------------|-------| +| **Test** | Verify integration connectivity | • Test AWS credential validity
• Check Security Hub accessibility
• Detect enabled regions automatically
• Validate finding export capability | Results displayed in notification message | +| **Config** | Modify integration settings | • Update AWS provider selection
• Change finding filter settings
• Modify archive preferences | Click "Update Configuration" to save changes | +| **Credentials** | Update authentication settings | • Switch between provider/custom credentials
• Update AWS access keys
• Change IAM role configuration | Click "Update Credentials" to save changes | +| **Enable/Disable** | Toggle integration status | • Enable integration to start exporting findings
• Disable integration to pause exports | Status change takes effect immediately | +| **Delete** | Remove integration permanently | • Permanently delete integration
• Remove all configuration data | ⚠️ **Cannot be undone** - confirm before deleting | + +???+ tip "Management Best Practices" + - Test the integration after any configuration changes + - Use the Enable/Disable toggle for temporary changes instead of deleting + - Monitor the Last Checked timestamp to ensure recent connectivity + + +## Viewing Findings in AWS Security Hub + +After successful configuration and scan completion, Prowler findings automatically appear in AWS Security Hub. For detailed information about accessing and interpreting findings in the Security Hub console, refer to the [AWS Security Hub findings documentation](./aws/securityhub.md#viewing-prowler-findings-in-aws-security-hub). + + +## Troubleshooting + +**Connection test fails:** + +- Verify AWS Security Hub is enabled in target regions +- Confirm Prowler integration is accepted in Security Hub +- Check IAM permissions include required Security Hub actions +- If using IAM Role, verify trust policy and External ID + +**No findings in Security Hub:** + +- Ensure integration shows "Connected" status +- Verify a scan has completed after enabling integration +- Check Security Hub console in the correct region +- Confirm finding filters match expectations + +**Authentication errors:** + +- For provider credentials, verify provider configuration +- For custom credentials, check access key validity +- For IAM roles, confirm role ARN and External ID match diff --git a/mkdocs.yml b/mkdocs.yml index 68aa34bcc6..96622f0201 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -66,7 +66,9 @@ nav: - Social Login: tutorials/prowler-app-social-login.md - SSO with SAML: tutorials/prowler-app-sso.md - Mute findings: tutorials/prowler-app-mute-findings.md - - Amazon S3 Integration: tutorials/prowler-app-s3-integration.md + - Integrations: + - Amazon S3: tutorials/prowler-app-s3-integration.md + - AWS Security Hub: tutorials/prowler-app-security-hub-integration.md - Lighthouse: tutorials/prowler-app-lighthouse.md - Bulk Provider Provisioning: tutorials/bulk-provider-provisioning.md - CLI: From f6ea314ec0fa099fa8958f0f1bb7b8a383e49a7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20Arroba?= <19954079+cesararroba@users.noreply.github.com> Date: Fri, 29 Aug 2025 10:58:53 +0200 Subject: [PATCH 08/32] chore(sdk): push readme file to docker hub (#8611) --- .../workflows/sdk-build-lint-push-containers.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.github/workflows/sdk-build-lint-push-containers.yml b/.github/workflows/sdk-build-lint-push-containers.yml index ec1d71a0cb..e17241eb46 100644 --- a/.github/workflows/sdk-build-lint-push-containers.yml +++ b/.github/workflows/sdk-build-lint-push-containers.yml @@ -157,6 +157,22 @@ jobs: cache-from: type=gha cache-to: type=gha,mode=max + - name: Push README to Docker Hub (toniblyx) + uses: peter-evans/dockerhub-description@432a30c9e07499fd01da9f8a49f0faf9e0ca5b77 # v4.0.2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + repository: ${{ env.DOCKER_HUB_REPOSITORY }}/${{ env.IMAGE_NAME }} + readme-filepath: ./README.md + + - name: Push README to Docker Hub (prowlercloud) + uses: peter-evans/dockerhub-description@432a30c9e07499fd01da9f8a49f0faf9e0ca5b77 # v4.0.2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + repository: ${{ env.PROWLERCLOUD_DOCKERHUB_REPOSITORY }}/${{ env.PROWLERCLOUD_DOCKERHUB_IMAGE }} + readme-filepath: ./README.md + dispatch-action: needs: container-build-push runs-on: ubuntu-latest From 0db9ab91b20b5602f095dc558f43672bf5732971 Mon Sep 17 00:00:00 2001 From: Pepe Fagoaga Date: Fri, 29 Aug 2025 10:59:01 +0200 Subject: [PATCH 09/32] chore(docs): review stats, imgs and update copy (#8612) --- README.md | 33 ++++++++++++++++----------------- docs/basic-usage/prowler-app.md | 2 +- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index fce0fbdc48..9fa11514b3 100644 --- a/README.md +++ b/README.md @@ -19,19 +19,16 @@
Slack Shield Python Version Python Version - PyPI Prowler Downloads + PyPI Downloads Docker Pulls - Docker - Docker AWS ECR Gallery

- Repo size - Issues - Version + Version Version Contributors + Issues License Twitter Twitter @@ -55,15 +52,11 @@ Prowler includes hundreds of built-in controls to ensure compliance with standar - **National Security Standards:** ENS (Spanish National Security Scheme) - **Custom Security Frameworks:** Tailored to your needs -## Prowler CLI and Prowler Cloud - -Prowler offers a Command Line Interface (CLI), known as Prowler Open Source, and an additional service built on top of it, called Prowler Cloud. - ## Prowler App Prowler App is a web-based application that simplifies running Prowler across your cloud provider accounts. It provides a user-friendly interface to visualize the results and streamline your security assessments. -![Prowler App](docs/img/overview.png) +![Prowler App](docs/products/img/overview.png) >For more details, refer to the [Prowler App Documentation](https://docs.prowler.com/projects/prowler-open-source/en/latest/#prowler-app-installation) @@ -80,13 +73,16 @@ prowler ```console prowler dashboard ``` -![Prowler Dashboard](docs/img/dashboard.png) +![Prowler Dashboard](docs/products/img/dashboard.png) # Prowler at a Glance +> [!Tip] +> For the most accurate and up-to-date information about checks, services, frameworks, and categories, visit [**Prowler Hub**](https://hub.prowler.com). + | Provider | Checks | Services | [Compliance Frameworks](https://docs.prowler.com/projects/prowler-open-source/en/latest/tutorials/compliance/) | [Categories](https://docs.prowler.com/projects/prowler-open-source/en/latest/tutorials/misc/#categories) | |---|---|---|---|---| -| AWS | 571 | 82 | 36 | 10 | +| AWS | 576 | 82 | 36 | 10 | | GCP | 79 | 13 | 10 | 3 | | Azure | 162 | 19 | 11 | 4 | | Kubernetes | 83 | 7 | 5 | 7 | @@ -97,11 +93,14 @@ prowler dashboard > [!Note] > The numbers in the table are updated periodically. -> [!Tip] -> For the most accurate and up-to-date information about checks, services, frameworks, and categories, visit [**Prowler Hub**](https://hub.prowler.com). + > [!Note] -> Use the following commands to list Prowler's available checks, services, compliance frameworks, and categories: `prowler --list-checks`, `prowler --list-services`, `prowler --list-compliance` and `prowler --list-categories`. +> Use the following commands to list Prowler's available checks, services, compliance frameworks, and categories: +> - `prowler --list-checks` +> - `prowler --list-services` +> - `prowler --list-compliance` +> - `prowler --list-categories`. # 💻 Installation @@ -239,7 +238,7 @@ The following versions of Prowler CLI are available, depending on your requireme The container images are available here: - Prowler CLI: - - [DockerHub](https://hub.docker.com/r/toniblyx/prowler/tags) + - [DockerHub](https://hub.docker.com/r/prowlercloud/prowler/tags) - [AWS Public ECR](https://gallery.ecr.aws/prowler-cloud/prowler) - Prowler App: - [DockerHub - Prowler UI](https://hub.docker.com/r/prowlercloud/prowler-ui/tags) diff --git a/docs/basic-usage/prowler-app.md b/docs/basic-usage/prowler-app.md index 8ed7625577..0bea33007b 100644 --- a/docs/basic-usage/prowler-app.md +++ b/docs/basic-usage/prowler-app.md @@ -50,7 +50,7 @@ Click `Go to Scans` to monitor progress. Review findings during scan execution in the following sections: - **Overview** – Provides a high-level summary of your scans. - Overview + Overview - **Compliance** – Displays compliance insights based on security frameworks. Compliance From 1259bb85e3e2b4b88bf829e657daa84602c80be6 Mon Sep 17 00:00:00 2001 From: Pepe Fagoaga Date: Fri, 29 Aug 2025 11:01:19 +0200 Subject: [PATCH 10/32] fix: remove dot (#8613) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9fa11514b3..a66868db3b 100644 --- a/README.md +++ b/README.md @@ -100,7 +100,7 @@ prowler dashboard > - `prowler --list-checks` > - `prowler --list-services` > - `prowler --list-compliance` -> - `prowler --list-categories`. +> - `prowler --list-categories` # 💻 Installation From fdb76e78207e10cf07660bbfa70665fc6552c0dd Mon Sep 17 00:00:00 2001 From: Daniel Barranquero <74871504+danibarranqueroo@users.noreply.github.com> Date: Mon, 1 Sep 2025 09:48:21 +0200 Subject: [PATCH 11/32] feat(docs): update mfa enforcement date for m365 (#8610) --- docs/tutorials/microsoft365/authentication.md | 4 ++-- docs/tutorials/microsoft365/getting-started-m365.md | 2 +- prowler/providers/m365/lib/powershell/m365_powershell.py | 4 ++-- .../workflow/forms/via-credentials/m365-credentials-form.tsx | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/tutorials/microsoft365/authentication.md b/docs/tutorials/microsoft365/authentication.md index c8f78c1c78..fde711d4ff 100644 --- a/docs/tutorials/microsoft365/authentication.md +++ b/docs/tutorials/microsoft365/authentication.md @@ -8,7 +8,7 @@ Prowler for Microsoft 365 (M365) supports the following authentication methods: - **Interactive browser authentication** ???+ warning - Prowler App supports the **Service Principal** authentication method and the **Service Principal with User Credentials** authentication method, but this last one will be deprecated in September once Microsoft will enforce MFA in all tenants not allowing User authentication without interactive method. + Prowler App supports the **Service Principal** authentication method and the **Service Principal with User Credentials** authentication method, but this last one will be deprecated in October once Microsoft will enforce MFA in all tenants not allowing User authentication without interactive method. ### Service Principal Authentication (Recommended) @@ -109,7 +109,7 @@ When using service principal authentication, add the following **Application Per > If you do this you will need to add also the `Organization.Read.All` permission to the service principal application in order to authenticate. ???+ note - This is the **recommended authentication method** because it allows you to run the full M365 provider including PowerShell checks, providing complete coverage of all available security checks, same as the Service Principal Authentication + User Credentials Authentication but this last one will be deprecated in September once Microsoft will enforce MFA in all tenants not allowing User authentication without interactive method. + This is the **recommended authentication method** because it allows you to run the full M365 provider including PowerShell checks, providing complete coverage of all available security checks, same as the Service Principal Authentication + User Credentials Authentication but this last one will be deprecated in October once Microsoft will enforce MFA in all tenants not allowing User authentication without interactive method. #### Service Principal + User Credentials Authentication (`--env-auth`) diff --git a/docs/tutorials/microsoft365/getting-started-m365.md b/docs/tutorials/microsoft365/getting-started-m365.md index 988f58a1b5..8c3037f728 100644 --- a/docs/tutorials/microsoft365/getting-started-m365.md +++ b/docs/tutorials/microsoft365/getting-started-m365.md @@ -194,7 +194,7 @@ To grant the permissions for the PowerShell modules via application authenticati #### If using user authentication -This method is not recommended because it requires a user with MFA enabled and Microsoft will not allow MFA capable users to authenticate programmatically after 1st September 2025. See [Microsoft documentation](https://learn.microsoft.com/en-us/entra/identity/authentication/concept-mandatory-multifactor-authentication?tabs=dotnet) for more information. +This method is not recommended because it requires a user with MFA enabled and Microsoft will not allow MFA capable users to authenticate programmatically after 1st October 2025. See [Microsoft documentation](https://learn.microsoft.com/en-us/entra/identity/authentication/concept-mandatory-multifactor-authentication?tabs=dotnet) for more information. ???+ warning Remember that if the user is newly created, you need to sign in with that account first, as Microsoft will prompt you to change the password. If you don’t complete this step, user authentication will fail because Microsoft marks the initial password as expired. diff --git a/prowler/providers/m365/lib/powershell/m365_powershell.py b/prowler/providers/m365/lib/powershell/m365_powershell.py index 26380ae2a2..be36964b11 100644 --- a/prowler/providers/m365/lib/powershell/m365_powershell.py +++ b/prowler/providers/m365/lib/powershell/m365_powershell.py @@ -77,7 +77,7 @@ class M365PowerShell(PowerShellSession): Initialize PowerShell credential object for Microsoft 365 authentication. Supports three authentication methods: - 1. User authentication (username/password) - Will be deprecated in September 2025 + 1. User authentication (username/password) - Will be deprecated in October 2025 2. Application authentication (client_id/client_secret) 3. Certificate authentication (certificate_content in base64/application_id) @@ -115,7 +115,7 @@ class M365PowerShell(PowerShellSession): self.execute(f'$tenantID = "{sanitized_tenant_id}"') self.execute(f'$tenantDomain = "{credentials.tenant_domains[0]}"') - # User Auth (Will be deprecated in September 2025) + # User Auth (Will be deprecated in October 2025) elif credentials.user and credentials.passwd: credentials.encrypted_passwd = self.encrypt_password(credentials.passwd) diff --git a/ui/components/providers/workflow/forms/via-credentials/m365-credentials-form.tsx b/ui/components/providers/workflow/forms/via-credentials/m365-credentials-form.tsx index 13eb61710d..4031536fac 100644 --- a/ui/components/providers/workflow/forms/via-credentials/m365-credentials-form.tsx +++ b/ui/components/providers/workflow/forms/via-credentials/m365-credentials-form.tsx @@ -69,7 +69,7 @@ export const M365CredentialsForm = ({

- By September 2025, MFA will be mandatory. + By October 2025, MFA will be mandatory.

From a064e43302693b9cd10d01c1c36749a91f257859 Mon Sep 17 00:00:00 2001 From: Hugo Pereira Brito <101209179+HugoPBrito@users.noreply.github.com> Date: Mon, 1 Sep 2025 16:43:36 +0200 Subject: [PATCH 12/32] chore(ui): render attributes as markdown (#8604) Co-authored-by: alejandrobailo --- ui/CHANGELOG.md | 6 ++++ .../findings/table/finding-detail.tsx | 34 ++++++++++++------- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/ui/CHANGELOG.md b/ui/CHANGELOG.md index 1372359a34..12d2548bdd 100644 --- a/ui/CHANGELOG.md +++ b/ui/CHANGELOG.md @@ -2,6 +2,12 @@ All notable changes to the **Prowler UI** are documented in this file. +## [1.11.1] (Prowler v5.11.1) + +### 🐞 Changed + +- Markdown rendering in finding details page [(#8604)](https://github.com/prowler-cloud/prowler/pull/8604) + ## [1.11.0] (Prowler v5.11.0) ### 🚀 Added diff --git a/ui/components/findings/table/finding-detail.tsx b/ui/components/findings/table/finding-detail.tsx index 00c88e285f..36f418480c 100644 --- a/ui/components/findings/table/finding-detail.tsx +++ b/ui/components/findings/table/finding-detail.tsx @@ -1,6 +1,7 @@ "use client"; import { Snippet } from "@nextui-org/react"; +import ReactMarkdown from "react-markdown"; import { CodeSnippet } from "@/components/ui/code-snippet/code-snippet"; import { CustomSection } from "@/components/ui/custom"; @@ -13,6 +14,14 @@ import { FindingProps, ProviderType } from "@/types"; import { Muted } from "../muted"; import { DeltaIndicator } from "./delta-indicator"; +const MarkdownContainer = ({ children }: { children: string }) => { + return ( +

+ {children} +
+ ); +}; + const renderValue = (value: string | null | undefined) => { return value && value.trim() !== "" ? value : "-"; }; @@ -122,15 +131,17 @@ export const FindingDetail = ({ hideCopyButton hideSymbol > -

+ {attributes.check_metadata.risk} -

+ )} - {renderValue(attributes.check_metadata.description)} + + {attributes.check_metadata.description} + @@ -147,9 +158,9 @@ export const FindingDetail = ({ {attributes.check_metadata.remediation.recommendation.text && (
-

+ {attributes.check_metadata.remediation.recommendation.text} -

+ {attributes.check_metadata.remediation.recommendation.url && ( )} - {/* Additional Resources section */} + {/* Remediation Steps section */} {attributes.check_metadata.remediation.code.other && ( - - - View documentation - + + + {attributes.check_metadata.remediation.code.other} + )}
From 665c9d878ae84bd3098474d741bca0b724463555 Mon Sep 17 00:00:00 2001 From: Alejandro Bailo <59607668+alejandrobailo@users.noreply.github.com> Date: Mon, 1 Sep 2025 18:38:39 +0200 Subject: [PATCH 13/32] chore(ui): update Next.js and ESLint dependencies to version 14.2.32 (#8623) --- ui/package-lock.json | 104 +++++++++++++++++++++---------------------- ui/package.json | 4 +- 2 files changed, 54 insertions(+), 54 deletions(-) diff --git a/ui/package-lock.json b/ui/package-lock.json index 0d53f26376..984c9a0895 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -44,7 +44,7 @@ "jwt-decode": "^4.0.0", "lucide-react": "^0.471.0", "marked": "^15.0.12", - "next": "^14.2.30", + "next": "^14.2.32", "next-auth": "^5.0.0-beta.25", "next-themes": "^0.2.1", "radix-ui": "^1.1.3", @@ -75,7 +75,7 @@ "@typescript-eslint/parser": "^7.10.0", "autoprefixer": "10.4.19", "eslint": "^8.56.0", - "eslint-config-next": "^14.2.30", + "eslint-config-next": "^14.2.32", "eslint-config-prettier": "^10.0.1", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jsx-a11y": "^6.9.0", @@ -1258,15 +1258,15 @@ } }, "node_modules/@next/env": { - "version": "14.2.30", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.30.tgz", - "integrity": "sha512-KBiBKrDY6kxTQWGzKjQB7QirL3PiiOkV7KW98leHFjtVRKtft76Ra5qSA/SL75xT44dp6hOcqiiJ6iievLOYug==", + "version": "14.2.32", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.32.tgz", + "integrity": "sha512-n9mQdigI6iZ/DF6pCTwMKeWgF2e8lg7qgt5M7HXMLtyhZYMnf/u905M18sSpPmHL9MKp9JHo56C6jrD2EvWxng==", "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { - "version": "14.2.30", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.30.tgz", - "integrity": "sha512-mvVsMIutMxQ4NGZEMZ1kiBNc+la8Xmlk30bKUmCPQz2eFkmsLv54Mha8QZarMaCtSPkkFA1TMD+FIZk0l/PpzA==", + "version": "14.2.32", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.32.tgz", + "integrity": "sha512-tyZMX8g4cWg/uPW4NxiJK13t62Pab47SKGJGVZJa6YtFwtfrXovH4j1n9tdpRdXW03PGQBugYEVGM7OhWfytdA==", "dev": true, "license": "MIT", "dependencies": { @@ -1274,9 +1274,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "14.2.30", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.30.tgz", - "integrity": "sha512-EAqfOTb3bTGh9+ewpO/jC59uACadRHM6TSA9DdxJB/6gxOpyV+zrbqeXiFTDy9uV6bmipFDkfpAskeaDcO+7/g==", + "version": "14.2.32", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.32.tgz", + "integrity": "sha512-osHXveM70zC+ilfuFa/2W6a1XQxJTvEhzEycnjUaVE8kpUS09lDpiDDX2YLdyFCzoUbvbo5r0X1Kp4MllIOShw==", "cpu": [ "arm64" ], @@ -1290,9 +1290,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "14.2.30", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.30.tgz", - "integrity": "sha512-TyO7Wz1IKE2kGv8dwQ0bmPL3s44EKVencOqwIY69myoS3rdpO1NPg5xPM5ymKu7nfX4oYJrpMxv8G9iqLsnL4A==", + "version": "14.2.32", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.32.tgz", + "integrity": "sha512-P9NpCAJuOiaHHpqtrCNncjqtSBi1f6QUdHK/+dNabBIXB2RUFWL19TY1Hkhu74OvyNQEYEzzMJCMQk5agjw1Qg==", "cpu": [ "x64" ], @@ -1306,9 +1306,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.2.30", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.30.tgz", - "integrity": "sha512-I5lg1fgPJ7I5dk6mr3qCH1hJYKJu1FsfKSiTKoYwcuUf53HWTrEkwmMI0t5ojFKeA6Vu+SfT2zVy5NS0QLXV4Q==", + "version": "14.2.32", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.32.tgz", + "integrity": "sha512-v7JaO0oXXt6d+cFjrrKqYnR2ubrD+JYP7nQVRZgeo5uNE5hkCpWnHmXm9vy3g6foMO8SPwL0P3MPw1c+BjbAzA==", "cpu": [ "arm64" ], @@ -1322,9 +1322,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.2.30", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.30.tgz", - "integrity": "sha512-8GkNA+sLclQyxgzCDs2/2GSwBc92QLMrmYAmoP2xehe5MUKBLB2cgo34Yu242L1siSkwQkiV4YLdCnjwc/Micw==", + "version": "14.2.32", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.32.tgz", + "integrity": "sha512-tA6sIKShXtSJBTH88i0DRd6I9n3ZTirmwpwAqH5zdJoQF7/wlJXR8DkPmKwYl5mFWhEKr5IIa3LfpMW9RRwKmQ==", "cpu": [ "arm64" ], @@ -1338,9 +1338,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.2.30", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.30.tgz", - "integrity": "sha512-8Ly7okjssLuBoe8qaRCcjGtcMsv79hwzn/63wNeIkzJVFVX06h5S737XNr7DZwlsbTBDOyI6qbL2BJB5n6TV/w==", + "version": "14.2.32", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.32.tgz", + "integrity": "sha512-7S1GY4TdnlGVIdeXXKQdDkfDysoIVFMD0lJuVVMeb3eoVjrknQ0JNN7wFlhCvea0hEk0Sd4D1hedVChDKfV2jw==", "cpu": [ "x64" ], @@ -1354,9 +1354,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "14.2.30", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.30.tgz", - "integrity": "sha512-dBmV1lLNeX4mR7uI7KNVHsGQU+OgTG5RGFPi3tBJpsKPvOPtg9poyav/BYWrB3GPQL4dW5YGGgalwZ79WukbKQ==", + "version": "14.2.32", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.32.tgz", + "integrity": "sha512-OHHC81P4tirVa6Awk6eCQ6RBfWl8HpFsZtfEkMpJ5GjPsJ3nhPe6wKAJUZ/piC8sszUkAgv3fLflgzPStIwfWg==", "cpu": [ "x64" ], @@ -1370,9 +1370,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.2.30", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.30.tgz", - "integrity": "sha512-6MMHi2Qc1Gkq+4YLXAgbYslE1f9zMGBikKMdmQRHXjkGPot1JY3n5/Qrbg40Uvbi8//wYnydPnyvNhI1DMUW1g==", + "version": "14.2.32", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.32.tgz", + "integrity": "sha512-rORQjXsAFeX6TLYJrCG5yoIDj+NKq31Rqwn8Wpn/bkPNy5rTHvOXkW8mLFonItS7QC6M+1JIIcLe+vOCTOYpvg==", "cpu": [ "arm64" ], @@ -1386,9 +1386,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.2.30", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.30.tgz", - "integrity": "sha512-pVZMnFok5qEX4RT59mK2hEVtJX+XFfak+/rjHpyFh7juiT52r177bfFKhnlafm0UOSldhXjj32b+LZIOdswGTg==", + "version": "14.2.32", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.32.tgz", + "integrity": "sha512-jHUeDPVHrgFltqoAqDB6g6OStNnFxnc7Aks3p0KE0FbwAvRg6qWKYF5mSTdCTxA3axoSAUwxYdILzXJfUwlHhA==", "cpu": [ "ia32" ], @@ -1402,9 +1402,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.2.30", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.30.tgz", - "integrity": "sha512-4KCo8hMZXMjpTzs3HOqOGYYwAXymXIy7PEPAXNEcEOyKqkjiDlECumrWziy+JEF0Oi4ILHGxzgQ3YiMGG2t/Lg==", + "version": "14.2.32", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.32.tgz", + "integrity": "sha512-2N0lSoU4GjfLSO50wvKpMQgKd4HdI2UHEhQPPPnlgfBJlOgJxkjpkYBqzk08f1gItBB6xF/n+ykso2hgxuydsA==", "cpu": [ "x64" ], @@ -9070,13 +9070,13 @@ } }, "node_modules/eslint-config-next": { - "version": "14.2.30", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.30.tgz", - "integrity": "sha512-4pTMb3wfpI+piVeEz3TWG1spjuXJJBZaYabi2H08z2ZTk6/N304POEovHdFmK6EZb4QlKpETulBNaRIITA0+xg==", + "version": "14.2.32", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.32.tgz", + "integrity": "sha512-mP/NmYtDBsKlKIOBnH+CW+pYeyR3wBhE+26DAqQ0/aRtEBeTEjgY2wAFUugUELkTLmrX6PpuMSSTpOhz7j9kdQ==", "dev": true, "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "14.2.30", + "@next/eslint-plugin-next": "14.2.32", "@rushstack/eslint-patch": "^1.3.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", @@ -12758,12 +12758,12 @@ "license": "MIT" }, "node_modules/next": { - "version": "14.2.30", - "resolved": "https://registry.npmjs.org/next/-/next-14.2.30.tgz", - "integrity": "sha512-+COdu6HQrHHFQ1S/8BBsCag61jZacmvbuL2avHvQFbWa2Ox7bE+d8FyNgxRLjXQ5wtPyQwEmk85js/AuaG2Sbg==", + "version": "14.2.32", + "resolved": "https://registry.npmjs.org/next/-/next-14.2.32.tgz", + "integrity": "sha512-fg5g0GZ7/nFc09X8wLe6pNSU8cLWbLRG3TZzPJ1BJvi2s9m7eF991se67wliM9kR5yLHRkyGKU49MMx58s3LJg==", "license": "MIT", "dependencies": { - "@next/env": "14.2.30", + "@next/env": "14.2.32", "@swc/helpers": "0.5.5", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", @@ -12778,15 +12778,15 @@ "node": ">=18.17.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.2.30", - "@next/swc-darwin-x64": "14.2.30", - "@next/swc-linux-arm64-gnu": "14.2.30", - "@next/swc-linux-arm64-musl": "14.2.30", - "@next/swc-linux-x64-gnu": "14.2.30", - "@next/swc-linux-x64-musl": "14.2.30", - "@next/swc-win32-arm64-msvc": "14.2.30", - "@next/swc-win32-ia32-msvc": "14.2.30", - "@next/swc-win32-x64-msvc": "14.2.30" + "@next/swc-darwin-arm64": "14.2.32", + "@next/swc-darwin-x64": "14.2.32", + "@next/swc-linux-arm64-gnu": "14.2.32", + "@next/swc-linux-arm64-musl": "14.2.32", + "@next/swc-linux-x64-gnu": "14.2.32", + "@next/swc-linux-x64-musl": "14.2.32", + "@next/swc-win32-arm64-msvc": "14.2.32", + "@next/swc-win32-ia32-msvc": "14.2.32", + "@next/swc-win32-x64-msvc": "14.2.32" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", diff --git a/ui/package.json b/ui/package.json index 05484fe77d..e6b8a95641 100644 --- a/ui/package.json +++ b/ui/package.json @@ -36,7 +36,7 @@ "jwt-decode": "^4.0.0", "lucide-react": "^0.471.0", "marked": "^15.0.12", - "next": "^14.2.30", + "next": "^14.2.32", "next-auth": "^5.0.0-beta.25", "next-themes": "^0.2.1", "radix-ui": "^1.1.3", @@ -67,7 +67,7 @@ "@typescript-eslint/parser": "^7.10.0", "autoprefixer": "10.4.19", "eslint": "^8.56.0", - "eslint-config-next": "^14.2.30", + "eslint-config-next": "^14.2.32", "eslint-config-prettier": "^10.0.1", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jsx-a11y": "^6.9.0", From d4eb4bdca770c8cfed2c234309020a21d31f0ad0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20Poyatos?= Date: Tue, 2 Sep 2025 09:53:36 +0200 Subject: [PATCH 14/32] feat(integrations): Support JIRA integration in the API (#8622) --- api/CHANGELOG.md | 7 + api/pyproject.toml | 2 +- api/src/backend/api/specs/v1.yaml | 150 +++++++++++++++++- api/src/backend/api/tests/test_utils.py | 59 +++++++ api/src/backend/api/tests/test_views.py | 150 ++++++++++++++++++ api/src/backend/api/utils.py | 10 +- .../api/v1/serializer_utils/integrations.py | 65 +++++++- api/src/backend/api/v1/serializers.py | 42 +++-- api/src/backend/api/v1/views.py | 2 +- api/src/backend/tasks/jobs/integrations.py | 6 +- 10 files changed, 474 insertions(+), 19 deletions(-) diff --git a/api/CHANGELOG.md b/api/CHANGELOG.md index ef66379241..cb8a4e3b17 100644 --- a/api/CHANGELOG.md +++ b/api/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to the **Prowler API** are documented in this file. +## [1.13.0] (Prowler UNRELEASED) + +### Added +- Integration with JIRA, enabling sending findings to a JIRA project [(#8622)](https://github.com/prowler-cloud/prowler/pull/8622) + +--- + ## [1.12.0] (Prowler 5.11.0) ### Added diff --git a/api/pyproject.toml b/api/pyproject.toml index 3a597281cc..6673154e03 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -39,7 +39,7 @@ name = "prowler-api" package-mode = false # Needed for the SDK compatibility requires-python = ">=3.11,<3.13" -version = "1.12.0" +version = "1.13.0" [project.scripts] celery = "src.backend.config.settings.celery" diff --git a/api/src/backend/api/specs/v1.yaml b/api/src/backend/api/specs/v1.yaml index fa1520f60e..5ff07712a3 100644 --- a/api/src/backend/api/specs/v1.yaml +++ b/api/src/backend/api/specs/v1.yaml @@ -1,7 +1,7 @@ openapi: 3.0.3 info: title: Prowler API - version: 1.12.0 + version: 1.13.0 description: |- Prowler API specification. @@ -9132,6 +9132,25 @@ components: default: false description: If true, archives findings that are not present in the current execution. + - type: object + title: JIRA + properties: + project_key: + type: string + description: The JIRA project key where issues will be created + (e.g., 'PROJ', 'SEC'). + issue_types: + type: array + items: + type: string + description: List of JIRA issue types to create for findings. + issue_labels: + type: array + items: + type: string + description: List of labels to apply to created JIRA issues.. + required: + - project_key credentials: oneOf: - type: object @@ -9171,6 +9190,24 @@ components: - User_Session-1 - Test.Session@2 pattern: ^[a-zA-Z0-9=,.@_-]+$ + - type: object + title: JIRA Credentials + properties: + user_mail: + type: string + format: email + description: The email address of the JIRA user account. + domain: + type: string + description: The JIRA domain/instance URL (e.g., 'your-domain.atlassian.net'). + api_token: + type: string + description: The API token for authentication with JIRA. This + can be generated from your Atlassian account settings. + required: + - user_mail + - domain + - api_token writeOnly: true required: - integration_type @@ -9292,6 +9329,25 @@ components: default: false description: If true, archives findings that are not present in the current execution. + - type: object + title: JIRA + properties: + project_key: + type: string + description: The JIRA project key where issues will be created + (e.g., 'PROJ', 'SEC'). + issue_types: + type: array + items: + type: string + description: List of JIRA issue types to create for findings. + issue_labels: + type: array + items: + type: string + description: List of labels to apply to created JIRA issues.. + required: + - project_key credentials: oneOf: - type: object @@ -9332,6 +9388,24 @@ components: - User_Session-1 - Test.Session@2 pattern: ^[a-zA-Z0-9=,.@_-]+$ + - type: object + title: JIRA Credentials + properties: + user_mail: + type: string + format: email + description: The email address of the JIRA user account. + domain: + type: string + description: The JIRA domain/instance URL (e.g., 'your-domain.atlassian.net'). + api_token: + type: string + description: The API token for authentication with JIRA. This + can be generated from your Atlassian account settings. + required: + - user_mail + - domain + - api_token writeOnly: true required: - integration_type @@ -9468,6 +9542,25 @@ components: default: false description: If true, archives findings that are not present in the current execution. + - type: object + title: JIRA + properties: + project_key: + type: string + description: The JIRA project key where issues will be created + (e.g., 'PROJ', 'SEC'). + issue_types: + type: array + items: + type: string + description: List of JIRA issue types to create for findings. + issue_labels: + type: array + items: + type: string + description: List of labels to apply to created JIRA issues.. + required: + - project_key credentials: oneOf: - type: object @@ -9507,6 +9600,24 @@ components: - User_Session-1 - Test.Session@2 pattern: ^[a-zA-Z0-9=,.@_-]+$ + - type: object + title: JIRA Credentials + properties: + user_mail: + type: string + format: email + description: The email address of the JIRA user account. + domain: + type: string + description: The JIRA domain/instance URL (e.g., 'your-domain.atlassian.net'). + api_token: + type: string + description: The API token for authentication with JIRA. This + can be generated from your Atlassian account settings. + required: + - user_mail + - domain + - api_token writeOnly: true relationships: type: object @@ -10873,6 +10984,25 @@ components: default: false description: If true, archives findings that are not present in the current execution. + - type: object + title: JIRA + properties: + project_key: + type: string + description: The JIRA project key where issues will be created + (e.g., 'PROJ', 'SEC'). + issue_types: + type: array + items: + type: string + description: List of JIRA issue types to create for findings. + issue_labels: + type: array + items: + type: string + description: List of labels to apply to created JIRA issues.. + required: + - project_key credentials: oneOf: - type: object @@ -10913,6 +11043,24 @@ components: - User_Session-1 - Test.Session@2 pattern: ^[a-zA-Z0-9=,.@_-]+$ + - type: object + title: JIRA Credentials + properties: + user_mail: + type: string + format: email + description: The email address of the JIRA user account. + domain: + type: string + description: The JIRA domain/instance URL (e.g., 'your-domain.atlassian.net'). + api_token: + type: string + description: The API token for authentication with JIRA. This + can be generated from your Atlassian account settings. + required: + - user_mail + - domain + - api_token writeOnly: true relationships: type: object diff --git a/api/src/backend/api/tests/test_utils.py b/api/src/backend/api/tests/test_utils.py index cf58e41c0c..853bb58ddb 100644 --- a/api/src/backend/api/tests/test_utils.py +++ b/api/src/backend/api/tests/test_utils.py @@ -502,3 +502,62 @@ class TestProwlerIntegrationConnectionTest: assert integration.configuration["regions"]["eu-west-1"] is True assert integration.configuration["regions"]["ap-south-1"] is False integration.save.assert_called_once() + + @patch("api.utils.Jira") + def test_jira_connection_success_basic_auth(self, mock_jira_class): + integration = MagicMock() + integration.integration_type = Integration.IntegrationChoices.JIRA + integration.credentials = { + "user_mail": "test@example.com", + "api_token": "test_api_token", + } + integration.configuration = { + "domain": "example.atlassian.net", + } + + mock_connection = MagicMock() + mock_connection.is_connected = True + mock_connection.error = None + mock_jira_class.test_connection.return_value = mock_connection + + result = prowler_integration_connection_test(integration) + + assert result.is_connected is True + assert result.error is None + + mock_jira_class.test_connection.assert_called_once_with( + user_mail="test@example.com", + api_token="test_api_token", + domain="example.atlassian.net", + raise_on_exception=False, + ) + + @patch("api.utils.Jira") + def test_jira_connection_failure_invalid_credentials(self, mock_jira_class): + integration = MagicMock() + integration.integration_type = Integration.IntegrationChoices.JIRA + integration.credentials = { + "user_mail": "invalid@example.com", + "api_token": "invalid_token", + } + integration.configuration = { + "domain": "invalid.atlassian.net", + } + + # Mock failed JIRA connection + mock_connection = MagicMock() + mock_connection.is_connected = False + mock_connection.error = Exception("Authentication failed: Invalid credentials") + mock_jira_class.test_connection.return_value = mock_connection + + result = prowler_integration_connection_test(integration) + + assert result.is_connected is False + assert "Authentication failed: Invalid credentials" in str(result.error) + + mock_jira_class.test_connection.assert_called_once_with( + user_mail="invalid@example.com", + api_token="invalid_token", + domain="invalid.atlassian.net", + raise_on_exception=False, + ) diff --git a/api/src/backend/api/tests/test_views.py b/api/src/backend/api/tests/test_views.py index 0518cd446a..2e3fb0afcc 100644 --- a/api/src/backend/api/tests/test_views.py +++ b/api/src/backend/api/tests/test_views.py @@ -5660,6 +5660,18 @@ class TestIntegrationViewSet: }, {}, ), + # JIRA + ( + Integration.IntegrationChoices.JIRA, + { + "project_key": "JIRA", + "domain": "prowlerdomain", + }, + { + "api_token": "this-is-an-api-token-for-jira-that-works-for-sure", + "user_mail": "testing@prowler.com", + }, + ), ], ) def test_integrations_create_valid( @@ -5806,6 +5818,40 @@ class TestIntegrationViewSet: "invalid", None, ), + ( + { + "integration_type": "jira", + "configuration": { + "project_key": "JIRA", + }, + "credentials": {}, + }, + "required", + "domain", + ), + ( + { + "integration_type": "jira", + "configuration": { + "project_key": "JIRA", + "domain": "prowlerdomain", + }, + }, + "required", + "credentials", + ), + ( + { + "integration_type": "jira", + "configuration": { + "project_key": "JIRA", + "domain": "prowlerdomain", + }, + "credentials": {"api_token": "api-token"}, + }, + "invalid", + "credentials", + ), ] ), ) @@ -5995,6 +6041,110 @@ class TestIntegrationViewSet: ) assert response.status_code == status.HTTP_400_BAD_REQUEST + def test_integrations_create_duplicate_amazon_s3( + self, authenticated_client, providers_fixture + ): + provider = providers_fixture[0] + + # Create first S3 integration + data = { + "data": { + "type": "integrations", + "attributes": { + "integration_type": Integration.IntegrationChoices.AMAZON_S3, + "configuration": { + "bucket_name": "test-bucket", + "output_directory": "test-output", + }, + "credentials": { + "role_arn": "arn:aws:iam::123456789012:role/test-role", + "external_id": "test-external-id", + }, + "enabled": True, + }, + "relationships": { + "providers": { + "data": [{"type": "providers", "id": str(provider.id)}] + } + }, + } + } + + # First creation should succeed + response = authenticated_client.post( + reverse("integration-list"), + data=json.dumps(data), + content_type="application/vnd.api+json", + ) + assert response.status_code == status.HTTP_201_CREATED + + # Attempt to create duplicate should return 409 + response = authenticated_client.post( + reverse("integration-list"), + data=json.dumps(data), + content_type="application/vnd.api+json", + ) + assert response.status_code == status.HTTP_409_CONFLICT + assert ( + "This integration already exists" in response.json()["errors"][0]["detail"] + ) + assert ( + response.json()["errors"][0]["source"]["pointer"] + == "/data/attributes/configuration" + ) + + def test_integrations_create_duplicate_jira( + self, authenticated_client, providers_fixture + ): + provider = providers_fixture[0] + + # Create first JIRA integration + data = { + "data": { + "type": "integrations", + "attributes": { + "integration_type": Integration.IntegrationChoices.JIRA, + "configuration": { + "project_key": "TEST", + "domain": "test.atlassian.net", + }, + "credentials": { + "user_mail": "test@example.com", + "api_token": "test-api-token", + }, + "enabled": True, + }, + "relationships": { + "providers": { + "data": [{"type": "providers", "id": str(provider.id)}] + } + }, + } + } + + # First creation should succeed + response = authenticated_client.post( + reverse("integration-list"), + data=json.dumps(data), + content_type="application/vnd.api+json", + ) + assert response.status_code == status.HTTP_201_CREATED + + # Attempt to create duplicate should return 409 + response = authenticated_client.post( + reverse("integration-list"), + data=json.dumps(data), + content_type="application/vnd.api+json", + ) + assert response.status_code == status.HTTP_409_CONFLICT + assert ( + "This integration already exists" in response.json()["errors"][0]["detail"] + ) + assert ( + response.json()["errors"][0]["source"]["pointer"] + == "/data/attributes/configuration" + ) + @pytest.mark.django_db class TestSAMLTokenValidation: diff --git a/api/src/backend/api/utils.py b/api/src/backend/api/utils.py index b7c2f73ca3..1901c7972a 100644 --- a/api/src/backend/api/utils.py +++ b/api/src/backend/api/utils.py @@ -9,6 +9,7 @@ from api.db_router import MainRouter from api.exceptions import InvitationTokenExpiredException from api.models import Integration, Invitation, Processor, Provider, Resource from api.v1.serializers import FindingMetadataSerializer +from prowler.lib.outputs.jira.jira import Jira from prowler.providers.aws.aws_provider import AwsProvider from prowler.providers.aws.lib.s3.s3 import S3 from prowler.providers.aws.lib.security_hub.security_hub import SecurityHub @@ -199,7 +200,8 @@ def prowler_integration_connection_test(integration: Integration) -> Connection: raise_on_exception=False, ) # TODO: It is possible that we can unify the connection test for all integrations, but need refactoring - # to avoid code duplication. Actually the AWS integrations are similar, so SecurityHub and S3 can be unified making some changes in the SDK. + # to avoid code duplication. Actually the AWS integrations are similar, so SecurityHub and S3 can be unified + # making some changes in the SDK. elif ( integration.integration_type == Integration.IntegrationChoices.AWS_SECURITY_HUB ): @@ -236,7 +238,11 @@ def prowler_integration_connection_test(integration: Integration) -> Connection: return connection elif integration.integration_type == Integration.IntegrationChoices.JIRA: - pass + return Jira.test_connection( + **integration.credentials, + domain=integration.configuration["domain"], + raise_on_exception=False, + ) elif integration.integration_type == Integration.IntegrationChoices.SLACK: pass else: diff --git a/api/src/backend/api/v1/serializer_utils/integrations.py b/api/src/backend/api/v1/serializer_utils/integrations.py index d15eee88ff..2d443ddfec 100644 --- a/api/src/backend/api/v1/serializer_utils/integrations.py +++ b/api/src/backend/api/v1/serializer_utils/integrations.py @@ -67,6 +67,16 @@ class SecurityHubConfigSerializer(BaseValidateSerializer): resource_name = "integrations" +class JiraConfigSerializer(BaseValidateSerializer): + project_key = serializers.CharField(required=True) + domain = serializers.CharField(required=True) + issue_types = serializers.ListField(required=False, child=serializers.CharField()) + issue_labels = serializers.ListField(required=False, child=serializers.CharField()) + + class Meta: + resource_name = "integrations" + + class AWSCredentialSerializer(BaseValidateSerializer): role_arn = serializers.CharField(required=False) external_id = serializers.CharField(required=False) @@ -82,6 +92,14 @@ class AWSCredentialSerializer(BaseValidateSerializer): resource_name = "integrations" +class JiraCredentialSerializer(BaseValidateSerializer): + user_mail = serializers.EmailField(required=True) + api_token = serializers.CharField(required=True) + + class Meta: + resource_name = "integrations" + + @extend_schema_field( { "oneOf": [ @@ -133,6 +151,23 @@ class AWSCredentialSerializer(BaseValidateSerializer): }, }, }, + { + "type": "object", + "title": "JIRA Credentials", + "properties": { + "user_mail": { + "type": "string", + "format": "email", + "description": "The email address of the JIRA user account.", + }, + "api_token": { + "type": "string", + "description": "The API token for authentication with JIRA. This can be generated from your " + "Atlassian account settings.", + }, + }, + "required": ["user_mail", "api_token"], + }, ] } ) @@ -153,7 +188,10 @@ class IntegrationCredentialField(serializers.JSONField): }, "output_directory": { "type": "string", - "description": 'The directory path within the bucket where files will be saved. Optional - defaults to "output" if not provided. Path will be normalized to remove excessive slashes and invalid characters are not allowed (< > : " | ? *). Maximum length is 900 characters.', + "description": "The directory path within the bucket where files will be saved. Optional - " + 'defaults to "output" if not provided. Path will be normalized to remove ' + 'excessive slashes and invalid characters are not allowed (< > : " | ? *). ' + "Maximum length is 900 characters.", "maxLength": 900, "pattern": '^[^<>:"|?*]+$', "default": "output", @@ -177,6 +215,31 @@ class IntegrationCredentialField(serializers.JSONField): }, }, }, + { + "type": "object", + "title": "JIRA", + "properties": { + "project_key": { + "type": "string", + "description": "The JIRA project key where issues will be created (e.g., 'PROJ', 'SEC').", + }, + "domain": { + "type": "string", + "description": "The JIRA domain/instance URL (e.g., 'your-domain.atlassian.net').", + }, + "issue_types": { + "type": "array", + "items": {"type": "string"}, + "description": "List of JIRA issue types to create for findings.", + }, + "issue_labels": { + "type": "array", + "items": {"type": "string"}, + "description": "List of labels to apply to created JIRA issues..", + }, + }, + "required": ["project_key", "domain"], + }, ] } ) diff --git a/api/src/backend/api/v1/serializers.py b/api/src/backend/api/v1/serializers.py index 30f942b04d..ec97c2719d 100644 --- a/api/src/backend/api/v1/serializers.py +++ b/api/src/backend/api/v1/serializers.py @@ -15,6 +15,7 @@ from rest_framework_simplejwt.exceptions import TokenError from rest_framework_simplejwt.serializers import TokenObtainPairSerializer from rest_framework_simplejwt.tokens import RefreshToken +from api.exceptions import ConflictException from api.models import ( Finding, Integration, @@ -45,6 +46,8 @@ from api.v1.serializer_utils.integrations import ( AWSCredentialSerializer, IntegrationConfigField, IntegrationCredentialField, + JiraConfigSerializer, + JiraCredentialSerializer, S3ConfigSerializer, SecurityHubConfigSerializer, ) @@ -1952,18 +1955,34 @@ class ScheduleDailyCreateSerializer(serializers.Serializer): class BaseWriteIntegrationSerializer(BaseWriteSerializer): def validate(self, attrs): + integration_type = attrs.get("integration_type") + if ( - attrs.get("integration_type") == Integration.IntegrationChoices.AMAZON_S3 + integration_type == Integration.IntegrationChoices.AMAZON_S3 and Integration.objects.filter( configuration=attrs.get("configuration") ).exists() ): - raise serializers.ValidationError( - {"configuration": "This integration already exists."} + raise ConflictException( + detail="This integration already exists.", + pointer="/data/attributes/configuration", + ) + + if ( + integration_type == Integration.IntegrationChoices.JIRA + and Integration.objects.filter( + configuration__contains={ + "domain": attrs.get("configuration").get("domain"), + "project_key": attrs.get("configuration").get("project_key"), + } + ).exists() + ): + raise ConflictException( + detail="This integration already exists.", + pointer="/data/attributes/configuration", ) # Check if any provider already has a SecurityHub integration - integration_type = attrs.get("integration_type") if hasattr(self, "instance") and self.instance and not integration_type: integration_type = self.instance.integration_type @@ -1984,10 +2003,10 @@ class BaseWriteIntegrationSerializer(BaseWriteSerializer): query = query.exclude(integration=self.instance) if query.exists(): - raise serializers.ValidationError( - { - "providers": f"Provider {provider.id} already has a Security Hub integration. Only one Security Hub integration is allowed per provider." - } + raise ConflictException( + detail=f"Provider {provider.id} already has a Security Hub integration. Only one " + "Security Hub integration is allowed per provider.", + pointer="/data/relationships/providers", ) return super().validate(attrs) @@ -2018,6 +2037,9 @@ class BaseWriteIntegrationSerializer(BaseWriteSerializer): ) config_serializer = SecurityHubConfigSerializer credentials_serializers = [AWSCredentialSerializer] + elif integration_type == Integration.IntegrationChoices.JIRA: + config_serializer = JiraConfigSerializer + credentials_serializers = [JiraCredentialSerializer] else: raise serializers.ValidationError( { @@ -2122,9 +2144,7 @@ class IntegrationCreateSerializer(BaseWriteIntegrationSerializer): and integration_type == Integration.IntegrationChoices.AWS_SECURITY_HUB ): raise serializers.ValidationError( - { - "providers": "At least one provider is required for the Security Hub integration." - } + {"providers": "At least one provider is required for this integration."} ) self.validate_integration_data( diff --git a/api/src/backend/api/v1/views.py b/api/src/backend/api/v1/views.py index a75976c314..f6d4e31ab8 100644 --- a/api/src/backend/api/v1/views.py +++ b/api/src/backend/api/v1/views.py @@ -293,7 +293,7 @@ class SchemaView(SpectacularAPIView): def get(self, request, *args, **kwargs): spectacular_settings.TITLE = "Prowler API" - spectacular_settings.VERSION = "1.12.0" + spectacular_settings.VERSION = "1.13.0" spectacular_settings.DESCRIPTION = ( "Prowler API specification.\n\nThis file is auto-generated." ) diff --git a/api/src/backend/tasks/jobs/integrations.py b/api/src/backend/tasks/jobs/integrations.py index e95d39652e..4f7d649714 100644 --- a/api/src/backend/tasks/jobs/integrations.py +++ b/api/src/backend/tasks/jobs/integrations.py @@ -330,7 +330,8 @@ def upload_security_hub_integration( if not connected: logger.error( - f"Security Hub connection failed for integration {integration.id}: {security_hub.error}" + f"Security Hub connection failed for integration {integration.id}: " + f"{security_hub.error}" ) integration.connected = False integration.save() @@ -338,7 +339,8 @@ def upload_security_hub_integration( security_hub_client = security_hub logger.info( - f"Sending {'fail' if send_only_fails else 'all'} findings to Security Hub via integration {integration.id}" + f"Sending {'fail' if send_only_fails else 'all'} findings to Security Hub via " + f"integration {integration.id}" ) else: # Update findings in existing client for this batch From 136eb4facd2d87a7a2685a76138f8edac5243f68 Mon Sep 17 00:00:00 2001 From: Alejandro Bailo <59607668+alejandrobailo@users.noreply.github.com> Date: Tue, 2 Sep 2025 10:12:03 +0200 Subject: [PATCH 15/32] feat: 50X errors handler (#8621) --- ui/CHANGELOG.md | 4 +- ui/actions/compliances/compliances.ts | 49 ++---------- ui/actions/findings/findings.ts | 40 ++-------- ui/actions/integrations/index.ts | 1 - ui/actions/integrations/integrations.ts | 32 +------- ui/actions/integrations/saml.ts | 32 +------- ui/actions/invitations/invitation.ts | 39 +++------- ui/actions/manage-groups/manage-groups.ts | 52 +++---------- ui/actions/overview/overview.ts | 29 +------ ui/actions/providers/providers.ts | 46 +++-------- ui/actions/resources/resources.ts | 39 +++------- ui/actions/roles/roles.ts | 56 ++++--------- ui/actions/scans/scans.ts | 77 ++++-------------- ui/actions/task/tasks.ts | 10 +-- ui/actions/users/tenants.ts | 25 +++--- ui/actions/users/users.ts | 56 +++---------- ui/app/(prowler)/error.tsx | 78 +++++++++++++++---- .../findings/table/finding-detail.tsx | 34 ++++---- .../users/forms/edit-tenant-form.tsx | 10 +-- ui/lib/helper.ts | 26 ++++++- ui/types/server-actions.ts | 0 21 files changed, 227 insertions(+), 508 deletions(-) create mode 100644 ui/types/server-actions.ts diff --git a/ui/CHANGELOG.md b/ui/CHANGELOG.md index 12d2548bdd..b83b62d100 100644 --- a/ui/CHANGELOG.md +++ b/ui/CHANGELOG.md @@ -4,9 +4,9 @@ All notable changes to the **Prowler UI** are documented in this file. ## [1.11.1] (Prowler v5.11.1) -### 🐞 Changed +### 🐞 Added -- Markdown rendering in finding details page [(#8604)](https://github.com/prowler-cloud/prowler/pull/8604) +- Handle API responses and errors consistently across the app [(#8621)](https://github.com/prowler-cloud/prowler/pull/8621) ## [1.11.0] (Prowler v5.11.0) diff --git a/ui/actions/compliances/compliances.ts b/ui/actions/compliances/compliances.ts index cdc947fd8c..dff6bb5bb0 100644 --- a/ui/actions/compliances/compliances.ts +++ b/ui/actions/compliances/compliances.ts @@ -1,7 +1,6 @@ "use server"; -import { revalidatePath } from "next/cache"; -import { apiBaseUrl, getAuthHeaders, parseStringify } from "@/lib"; +import { apiBaseUrl, getAuthHeaders, handleApiResponse } from "@/lib"; export const getCompliancesOverview = async ({ scanId, @@ -25,15 +24,12 @@ export const getCompliancesOverview = async ({ } try { - const compliances = await fetch(url.toString(), { + const response = await fetch(url.toString(), { headers, }); - const data = await compliances.json(); - const parsedData = parseStringify(data); - revalidatePath("/compliance"); - return parsedData; + + return handleApiResponse(response, "/compliance"); } catch (error) { - // eslint-disable-next-line no-console console.error("Error fetching providers:", error); return undefined; } @@ -63,17 +59,8 @@ export const getComplianceOverviewMetadataInfo = async ({ headers, }); - if (!response.ok) { - throw new Error( - `Failed to fetch compliance overview metadata info: ${response.statusText}`, - ); - } - - const parsedData = parseStringify(await response.json()); - - return parsedData; + return handleApiResponse(response); } catch (error) { - // eslint-disable-next-line no-console console.error("Error fetching compliance overview metadata info:", error); return undefined; } @@ -90,22 +77,11 @@ export const getComplianceAttributes = async (complianceId: string) => { headers, }); - if (!response.ok) { - throw new Error( - `Failed to fetch compliance attributes: ${response.statusText}`, - ); - } - - const data = await response.json(); - - const parsedData = parseStringify(data); - return parsedData; + return handleApiResponse(response); } catch (error) { - // eslint-disable-next-line no-console console.error("Error fetching compliance attributes:", error); return undefined; } - // */ }; export const getComplianceRequirements = async ({ @@ -135,20 +111,9 @@ export const getComplianceRequirements = async ({ headers, }); - if (!response.ok) { - throw new Error( - `Failed to fetch compliance requirements: ${response.statusText}`, - ); - } - - const data = await response.json(); - const parsedData = parseStringify(data); - - return parsedData; + return handleApiResponse(response); } catch (error) { - // eslint-disable-next-line no-console console.error("Error fetching compliance requirements:", error); return undefined; } - // */ }; diff --git a/ui/actions/findings/findings.ts b/ui/actions/findings/findings.ts index 438459b4d2..f37e48637c 100644 --- a/ui/actions/findings/findings.ts +++ b/ui/actions/findings/findings.ts @@ -1,9 +1,8 @@ "use server"; -import { revalidatePath } from "next/cache"; import { redirect } from "next/navigation"; -import { apiBaseUrl, getAuthHeaders, parseStringify } from "@/lib"; +import { apiBaseUrl, getAuthHeaders, handleApiResponse } from "@/lib"; export const getFindings = async ({ page = 1, @@ -33,12 +32,8 @@ export const getFindings = async ({ const findings = await fetch(url.toString(), { headers, }); - const data = await findings.json(); - const parsedData = parseStringify(data); - revalidatePath("/findings"); - return parsedData; + return handleApiResponse(findings, "/findings"); } catch (error) { - // eslint-disable-next-line no-console console.error("Error fetching findings:", error); return undefined; } @@ -74,12 +69,8 @@ export const getLatestFindings = async ({ const findings = await fetch(url.toString(), { headers, }); - const data = await findings.json(); - const parsedData = parseStringify(data); - revalidatePath("/findings"); - return parsedData; + return handleApiResponse(findings, "/findings"); } catch (error) { - // eslint-disable-next-line no-console console.error("Error fetching findings:", error); return undefined; } @@ -113,15 +104,8 @@ export const getMetadataInfo = async ({ headers, }); - if (!response.ok) { - throw new Error(`Failed to fetch metadata info: ${response.statusText}`); - } - - const parsedData = parseStringify(await response.json()); - - return parsedData; + return handleApiResponse(response); } catch (error) { - // eslint-disable-next-line no-console console.error("Error fetching metadata info:", error); return undefined; } @@ -155,15 +139,8 @@ export const getLatestMetadataInfo = async ({ headers, }); - if (!response.ok) { - throw new Error(`Failed to fetch metadata info: ${response.statusText}`); - } - - const parsedData = parseStringify(await response.json()); - - return parsedData; + return handleApiResponse(response); } catch (error) { - // eslint-disable-next-line no-console console.error("Error fetching metadata info:", error); return undefined; } @@ -176,14 +153,11 @@ export const getFindingById = async (findingId: string, include = "") => { if (include) url.searchParams.append("include", include); try { - const finding = await fetch(url.toString(), { + const response = await fetch(url.toString(), { headers, }); - const data = await finding.json(); - const parsedData = parseStringify(data); - - return parsedData; + return handleApiResponse(response); } catch (error) { console.error("Error fetching finding by ID:", error); return undefined; diff --git a/ui/actions/integrations/index.ts b/ui/actions/integrations/index.ts index ab4160c009..1e05de036c 100644 --- a/ui/actions/integrations/index.ts +++ b/ui/actions/integrations/index.ts @@ -1,7 +1,6 @@ export { createIntegration, deleteIntegration, - getIntegration, getIntegrations, pollConnectionTestStatus, testIntegrationConnection, diff --git a/ui/actions/integrations/integrations.ts b/ui/actions/integrations/integrations.ts index 2121810a50..32de22a8cc 100644 --- a/ui/actions/integrations/integrations.ts +++ b/ui/actions/integrations/integrations.ts @@ -2,14 +2,14 @@ import { revalidatePath } from "next/cache"; +import { getTask } from "@/actions/task"; import { apiBaseUrl, getAuthHeaders, handleApiError, + handleApiResponse, parseStringify, } from "@/lib"; - -import { getTask } from "@/actions/task"; import { IntegrationType } from "@/types/integrations"; export const getIntegrations = async (searchParams?: URLSearchParams) => { @@ -25,39 +25,13 @@ export const getIntegrations = async (searchParams?: URLSearchParams) => { try { const response = await fetch(url.toString(), { method: "GET", headers }); - if (response.ok) { - const data = await response.json(); - return parseStringify(data); - } - - console.error(`Failed to fetch integrations: ${response.statusText}`); - return { data: [], meta: { pagination: { count: 0 } } }; + return handleApiResponse(response); } catch (error) { console.error("Error fetching integrations:", error); return { data: [], meta: { pagination: { count: 0 } } }; } }; -export const getIntegration = async (id: string) => { - const headers = await getAuthHeaders({ contentType: false }); - const url = new URL(`${apiBaseUrl}/integrations/${id}`); - - try { - const response = await fetch(url.toString(), { method: "GET", headers }); - - if (response.ok) { - const data = await response.json(); - return parseStringify(data); - } - - console.error(`Failed to fetch integration: ${response.statusText}`); - return null; - } catch (error) { - console.error("Error fetching integration:", error); - return null; - } -}; - export const createIntegration = async ( formData: FormData, ): Promise<{ success: string; integrationId?: string } | { error: string }> => { diff --git a/ui/actions/integrations/saml.ts b/ui/actions/integrations/saml.ts index c5bc6d18bb..782f896143 100644 --- a/ui/actions/integrations/saml.ts +++ b/ui/actions/integrations/saml.ts @@ -2,7 +2,7 @@ import { revalidatePath } from "next/cache"; -import { apiBaseUrl, getAuthHeaders, parseStringify } from "@/lib/helper"; +import { apiBaseUrl, getAuthHeaders, handleApiResponse } from "@/lib/helper"; import { samlConfigFormSchema } from "@/types/formSchemas"; export const createSamlConfig = async (_prevState: any, formData: FormData) => { @@ -39,16 +39,7 @@ export const createSamlConfig = async (_prevState: any, formData: FormData) => { }), }); - if (!response.ok) { - const errorData = await response.json().catch(() => ({})); - throw new Error( - errorData.errors?.[0]?.detail || - `Failed to create SAML config: ${response.statusText}`, - ); - } - - await response.json(); - revalidatePath("/integrations"); + handleApiResponse(response, "/integrations", false); return { success: "SAML configuration created successfully!" }; } catch (error) { console.error("Error creating SAML config:", error); @@ -98,16 +89,7 @@ export const updateSamlConfig = async (_prevState: any, formData: FormData) => { }), }); - if (!response.ok) { - const errorData = await response.json().catch(() => ({})); - throw new Error( - errorData.errors?.[0]?.detail || - `Failed to update SAML config: ${response.statusText}`, - ); - } - - await response.json(); - revalidatePath("/integrations"); + handleApiResponse(response, "/integrations", false); return { success: "SAML configuration updated successfully!" }; } catch (error) { console.error("Error updating SAML config:", error); @@ -132,13 +114,7 @@ export const getSamlConfig = async () => { headers, }); - if (!response.ok) { - throw new Error(`Failed to fetch SAML config: ${response.statusText}`); - } - - const data = await response.json(); - const parsedData = parseStringify(data); - return parsedData; + return handleApiResponse(response); } catch (error) { console.error("Error fetching SAML config:", error); return undefined; diff --git a/ui/actions/invitations/invitation.ts b/ui/actions/invitations/invitation.ts index 44cbd1a455..a46b60bf11 100644 --- a/ui/actions/invitations/invitation.ts +++ b/ui/actions/invitations/invitation.ts @@ -6,8 +6,8 @@ import { redirect } from "next/navigation"; import { apiBaseUrl, getAuthHeaders, - getErrorMessage, - parseStringify, + handleApiError, + handleApiResponse, } from "@/lib"; export const getInvitations = async ({ @@ -36,15 +36,12 @@ export const getInvitations = async ({ }); try { - const invitations = await fetch(url.toString(), { + const response = await fetch(url.toString(), { headers, }); - const data = await invitations.json(); - const parsedData = parseStringify(data); - revalidatePath("/invitations"); - return parsedData; + + return handleApiResponse(response, "/invitations"); } catch (error) { - // eslint-disable-next-line no-console console.error("Error fetching invitations:", error); return undefined; } @@ -84,13 +81,10 @@ export const sendInvite = async (formData: FormData) => { headers, body, }); - const data = await response.json(); - return parseStringify(data); + return handleApiResponse(response); } catch (error) { - return { - error: getErrorMessage(error), - }; + handleApiError(error); } }; @@ -145,13 +139,9 @@ export const updateInvite = async (formData: FormData) => { return { error }; } - const data = await response.json(); - revalidatePath("/invitations"); - return parseStringify(data); + return handleApiResponse(response, "/invitations"); } catch (error) { - return { - error: getErrorMessage(error), - }; + handleApiError(error); } }; @@ -165,12 +155,9 @@ export const getInvitationInfoById = async (invitationId: string) => { headers, }); - const data = await response.json(); - return parseStringify(data); + return handleApiResponse(response); } catch (error) { - return { - error: getErrorMessage(error), - }; + handleApiError(error); } }; @@ -209,8 +196,6 @@ export const revokeInvite = async (formData: FormData) => { revalidatePath("/invitations"); return data || { success: true }; } catch (error) { - // eslint-disable-next-line no-console - console.error("Error revoking invitation:", error); - return { error: getErrorMessage(error) }; + handleApiError(error); } }; diff --git a/ui/actions/manage-groups/manage-groups.ts b/ui/actions/manage-groups/manage-groups.ts index 3b12f619f9..3ac89e29ad 100644 --- a/ui/actions/manage-groups/manage-groups.ts +++ b/ui/actions/manage-groups/manage-groups.ts @@ -7,7 +7,8 @@ import { apiBaseUrl, getAuthHeaders, getErrorMessage, - parseStringify, + handleApiError, + handleApiResponse, } from "@/lib"; import { ManageGroupPayload, ProviderGroupsResponse } from "@/types/components"; @@ -47,16 +48,8 @@ export const getProviderGroups = async ({ headers, }); - if (!response.ok) { - throw new Error(`Error fetching provider groups: ${response.statusText}`); - } - - const data: ProviderGroupsResponse = await response.json(); - const parsedData = parseStringify(data); - revalidatePath("/manage-groups"); - return parsedData; + return handleApiResponse(response, "/manage-groups"); } catch (error) { - // eslint-disable-next-line no-console console.error("Error fetching provider groups:", error); return undefined; } @@ -72,18 +65,9 @@ export const getProviderGroupInfoById = async (providerGroupId: string) => { headers, }); - if (!response.ok) { - throw new Error( - `Failed to fetch provider group info: ${response.statusText}`, - ); - } - - const data = await response.json(); - return parseStringify(data); + return handleApiResponse(response); } catch (error) { - return { - error: getErrorMessage(error), - }; + handleApiError(error); } }; @@ -131,13 +115,10 @@ export const createProviderGroup = async (formData: FormData) => { headers, body, }); - const data = await response.json(); - revalidatePath("/manage-groups"); - return parseStringify(data); + + return handleApiResponse(response, "/manage-groups"); } catch (error) { - return { - error: getErrorMessage(error), - }; + handleApiError(error); } }; @@ -180,19 +161,9 @@ export const updateProviderGroup = async ( body: JSON.stringify(payload), }); - if (!response.ok) { - throw new Error( - `Failed to update provider group: ${response.status} ${response.statusText}`, - ); - } - - const data = await response.json(); - revalidatePath("/manage-groups"); - return parseStringify(data); + return handleApiResponse(response, "/manage-groups"); } catch (error) { - return { - error: getErrorMessage(error), - }; + handleApiError(error); } }; @@ -233,9 +204,8 @@ export const deleteProviderGroup = async (formData: FormData) => { revalidatePath("/manage-groups"); return data || { success: true }; } catch (error) { - // eslint-disable-next-line no-console console.error("Error deleting provider group:", error); - const message = await getErrorMessage(error); + const message = getErrorMessage(error); return { errors: [{ detail: message }] }; } }; diff --git a/ui/actions/overview/overview.ts b/ui/actions/overview/overview.ts index 363a2b9df3..052d0f0322 100644 --- a/ui/actions/overview/overview.ts +++ b/ui/actions/overview/overview.ts @@ -1,8 +1,7 @@ "use server"; -import { revalidatePath } from "next/cache"; import { redirect } from "next/navigation"; -import { apiBaseUrl, getAuthHeaders, parseStringify } from "@/lib"; +import { apiBaseUrl, getAuthHeaders, handleApiResponse } from "@/lib"; export const getProvidersOverview = async ({ page = 1, @@ -32,12 +31,8 @@ export const getProvidersOverview = async ({ headers, }); - const data = await response.json(); - const parsedData = parseStringify(data); - revalidatePath("/"); - return parsedData; + return handleApiResponse(response, "/"); } catch (error) { - // eslint-disable-next-line no-console console.error("Error fetching providers overview:", error); return undefined; } @@ -71,16 +66,8 @@ export const getFindingsByStatus = async ({ headers, }); - if (!response.ok) { - throw new Error(`Failed to fetch findings severity: ${response.status}`); - } - - const data = await response.json(); - const parsedData = parseStringify(data); - revalidatePath("/"); - return parsedData; + return handleApiResponse(response, "/"); } catch (error) { - // eslint-disable-next-line no-console console.error("Error fetching findings severity overview:", error); return undefined; } @@ -114,16 +101,8 @@ export const getFindingsBySeverity = async ({ headers, }); - if (!response.ok) { - throw new Error(`Failed to fetch findings severity: ${response.status}`); - } - - const data = await response.json(); - const parsedData = parseStringify(data); - revalidatePath("/"); - return parsedData; + return handleApiResponse(response, "/"); } catch (error) { - // eslint-disable-next-line no-console console.error("Error fetching findings severity overview:", error); return undefined; } diff --git a/ui/actions/providers/providers.ts b/ui/actions/providers/providers.ts index 19bf794de1..58c4ccd470 100644 --- a/ui/actions/providers/providers.ts +++ b/ui/actions/providers/providers.ts @@ -6,11 +6,9 @@ import { redirect } from "next/navigation"; import { apiBaseUrl, getAuthHeaders, - getErrorMessage, getFormValue, handleApiError, handleApiResponse, - parseStringify, wait, } from "@/lib"; import { buildSecretConfig } from "@/lib/provider-credentials/build-crendentials"; @@ -43,15 +41,12 @@ export const getProviders = async ({ }); try { - const providers = await fetch(url.toString(), { + const response = await fetch(url.toString(), { headers, }); - const data = await providers.json(); - const parsedData = parseStringify(data); - revalidatePath("/providers"); - return parsedData; + + return handleApiResponse(response, "/providers"); } catch (error) { - // eslint-disable-next-line no-console console.error("Error fetching providers:", error); return undefined; } @@ -64,16 +59,13 @@ export const getProvider = async (formData: FormData) => { const url = new URL(`${apiBaseUrl}/providers/${providerId}`); try { - const providers = await fetch(url.toString(), { + const response = await fetch(url.toString(), { headers, }); - const data = await providers.json(); - const parsedData = parseStringify(data); - return parsedData; + + return handleApiResponse(response, "/providers"); } catch (error) { - return { - error: getErrorMessage(error), - }; + return handleApiError(error); } }; @@ -129,15 +121,9 @@ export const addProvider = async (formData: FormData) => { body: JSON.stringify(bodyData), }); - const data = await response.json(); - revalidatePath("/providers"); - return parseStringify(data); + return handleApiResponse(response, "/providers"); } catch (error) { - // eslint-disable-next-line no-console - console.error(error); - return { - error: getErrorMessage(error), - }; + return handleApiError(error); } }; @@ -204,11 +190,6 @@ export const updateCredentialsProvider = async ( }), }); - if (!response.ok) { - const data = await response.json(); - return parseStringify(data); // Return API errors for UI handling - } - return handleApiResponse(response, "/providers"); } catch (error) { return handleApiError(error); @@ -223,6 +204,7 @@ export const checkConnectionProvider = async (formData: FormData) => { try { const response = await fetch(url.toString(), { method: "POST", headers }); await wait(2000); + return handleApiResponse(response, "/providers"); } catch (error) { return handleApiError(error); @@ -263,9 +245,7 @@ export const deleteCredentials = async (secretId: string) => { revalidatePath("/providers"); return data || { success: true }; } catch (error) { - // eslint-disable-next-line no-console - console.error("Error deleting credentials:", error); - return { error: getErrorMessage(error) }; + handleApiError(error); } }; @@ -302,8 +282,6 @@ export const deleteProvider = async (formData: FormData) => { revalidatePath("/providers"); return data || { success: true }; } catch (error) { - // eslint-disable-next-line no-console - console.error("Error deleting provider:", error); - return { error: getErrorMessage(error) }; + handleApiError(error); } }; diff --git a/ui/actions/resources/resources.ts b/ui/actions/resources/resources.ts index 4fa78104de..31c7ae21d6 100644 --- a/ui/actions/resources/resources.ts +++ b/ui/actions/resources/resources.ts @@ -1,9 +1,8 @@ "use server"; -import { revalidatePath } from "next/cache"; import { redirect } from "next/navigation"; -import { apiBaseUrl, getAuthHeaders, parseStringify } from "@/lib"; +import { apiBaseUrl, getAuthHeaders, handleApiResponse } from "@/lib"; export const getResources = async ({ page = 1, @@ -43,15 +42,11 @@ export const getResources = async ({ }); try { - const resources = await fetch(url.toString(), { + const response = await fetch(url.toString(), { headers, }); - const data = await resources.json(); - const parsedData = parseStringify(data); - - revalidatePath("/resources"); - return parsedData; + return handleApiResponse(response, "/resources"); } catch (error) { console.error("Error fetching resources:", error); return undefined; @@ -96,15 +91,11 @@ export const getLatestResources = async ({ }); try { - const resources = await fetch(url.toString(), { + const response = await fetch(url.toString(), { headers, }); - const data = await resources.json(); - const parsedData = parseStringify(data); - - revalidatePath("/resources"); - return parsedData; + return handleApiResponse(response, "/resources"); } catch (error) { console.error("Error fetching latest resources:", error); return undefined; @@ -128,16 +119,12 @@ export const getMetadataInfo = async ({ }); try { - const metadata = await fetch(url.toString(), { + const response = await fetch(url.toString(), { headers, }); - const data = await metadata.json(); - const parsedData = parseStringify(data); - - return parsedData; + return handleApiResponse(response); } catch (error) { - // eslint-disable-next-line no-console console.error("Error fetching metadata info:", error); return undefined; } @@ -160,14 +147,11 @@ export const getLatestMetadataInfo = async ({ }); try { - const metadata = await fetch(url.toString(), { + const response = await fetch(url.toString(), { headers, }); - const data = await metadata.json(); - const parsedData = parseStringify(data); - - return parsedData; + return handleApiResponse(response); } catch (error) { console.error("Error fetching latest metadata info:", error); return undefined; @@ -205,10 +189,7 @@ export const getResourceById = async ( throw new Error(`Error fetching resource: ${resource.status}`); } - const data = await resource.json(); - const parsedData = parseStringify(data); - - return parsedData; + return handleApiResponse(resource); } catch (error) { console.error("Error fetching resource by ID:", error); return undefined; diff --git a/ui/actions/roles/roles.ts b/ui/actions/roles/roles.ts index e69300ab26..36295fe462 100644 --- a/ui/actions/roles/roles.ts +++ b/ui/actions/roles/roles.ts @@ -6,8 +6,8 @@ import { redirect } from "next/navigation"; import { apiBaseUrl, getAuthHeaders, - getErrorMessage, - parseStringify, + handleApiError, + handleApiResponse, } from "@/lib"; export const getRoles = async ({ @@ -36,15 +36,12 @@ export const getRoles = async ({ }); try { - const roles = await fetch(url.toString(), { + const response = await fetch(url.toString(), { headers, }); - const data = await roles.json(); - const parsedData = parseStringify(data); - revalidatePath("/roles"); - return parsedData; + + return handleApiResponse(response, "/roles"); } catch (error) { - // eslint-disable-next-line no-console console.error("Error fetching roles:", error); return undefined; } @@ -60,16 +57,9 @@ export const getRoleInfoById = async (roleId: string) => { headers, }); - if (!response.ok) { - throw new Error(`Failed to fetch role info: ${response.statusText}`); - } - - const data = await response.json(); - return parseStringify(data); + return handleApiResponse(response); } catch (error) { - return { - error: getErrorMessage(error), - }; + handleApiError(error); } }; @@ -92,14 +82,8 @@ export const getRolesByIds = async (roleIds: string[]) => { headers, }); - if (!response.ok) { - throw new Error(`Failed to fetch roles: ${response.statusText}`); - } - - const data = await response.json(); - return parseStringify(data); + return handleApiResponse(response); } catch (error) { - // eslint-disable-next-line no-console console.error("Error fetching roles by IDs:", error); return { data: [] }; } @@ -153,15 +137,9 @@ export const addRole = async (formData: FormData) => { body, }); - const data = await response.json(); - revalidatePath("/roles"); - return data; + return handleApiResponse(response, "/roles", false); } catch (error) { - // eslint-disable-next-line no-console - console.error("Error during API call:", error); - return { - error: getErrorMessage(error), - }; + handleApiError(error); } }; @@ -215,15 +193,9 @@ export const updateRole = async (formData: FormData, roleId: string) => { body, }); - const data = await response.json(); - revalidatePath("/roles"); - return data; + return handleApiResponse(response, "/roles", false); } catch (error) { - // eslint-disable-next-line no-console - console.error("Error during API call:", error); - return { - error: getErrorMessage(error), - }; + handleApiError(error); } }; @@ -254,8 +226,6 @@ export const deleteRole = async (roleId: string) => { revalidatePath("/roles"); return data || { success: true }; } catch (error) { - // eslint-disable-next-line no-console - console.error("Error deleting role:", error); - return { error: getErrorMessage(error) }; + handleApiError(error); } }; diff --git a/ui/actions/scans/scans.ts b/ui/actions/scans/scans.ts index 80505b3ca1..73602215ad 100644 --- a/ui/actions/scans/scans.ts +++ b/ui/actions/scans/scans.ts @@ -1,13 +1,13 @@ "use server"; -import { revalidatePath } from "next/cache"; import { redirect } from "next/navigation"; import { apiBaseUrl, getAuthHeaders, getErrorMessage, - parseStringify, + handleApiError, + handleApiResponse, } from "@/lib"; export const getScans = async ({ @@ -43,12 +43,9 @@ export const getScans = async ({ try { const response = await fetch(url.toString(), { headers }); - const data = await response.json(); - const parsedData = parseStringify(data); - revalidatePath("/scans"); - return parsedData; + + return handleApiResponse(response, "/scans"); } catch (error) { - // eslint-disable-next-line no-console console.error("Error fetching scans:", error); return undefined; } @@ -56,9 +53,7 @@ export const getScans = async ({ export const getScansByState = async () => { const headers = await getAuthHeaders({ contentType: false }); - const url = new URL(`${apiBaseUrl}/scans`); - // Request only the necessary fields to optimize the response url.searchParams.append("fields[scans]", "state"); @@ -67,20 +62,8 @@ export const getScansByState = async () => { headers, }); - if (!response.ok) { - try { - const errorData = await response.json(); - throw new Error(errorData?.message || "Failed to fetch scans by state"); - } catch { - throw new Error("Failed to fetch scans by state"); - } - } - - const data = await response.json(); - - return parseStringify(data); + return handleApiResponse(response); } catch (error) { - // eslint-disable-next-line no-console console.error("Error fetching scans by state:", error); return undefined; } @@ -92,17 +75,13 @@ export const getScan = async (scanId: string) => { const url = new URL(`${apiBaseUrl}/scans/${scanId}`); try { - const scan = await fetch(url.toString(), { + const response = await fetch(url.toString(), { headers, }); - const data = await scan.json(); - const parsedData = parseStringify(data); - return parsedData; + return handleApiResponse(response); } catch (error) { - return { - error: getErrorMessage(error), - }; + return handleApiError(error); } }; @@ -139,20 +118,9 @@ export const scanOnDemand = async (formData: FormData) => { body: JSON.stringify(requestBody), }); - if (!response.ok) { - const errorData = await response.json(); - - return { success: false, error: errorData.errors[0].detail }; - } - - const data = await response.json(); - revalidatePath("/scans"); - - return parseStringify(data); + return handleApiResponse(response, "/scans"); } catch (error) { - console.error("Error starting scan:", error); - - return { error: getErrorMessage(error) }; + return handleApiError(error); } }; @@ -177,19 +145,9 @@ export const scheduleDaily = async (formData: FormData) => { }), }); - if (!response.ok) { - throw new Error(`Failed to schedule daily: ${response.statusText}`); - } - - const data = await response.json(); - revalidatePath("/scans"); - return parseStringify(data); + return handleApiResponse(response, "/scans"); } catch (error) { - // eslint-disable-next-line no-console - console.error(error); - return { - error: getErrorMessage(error), - }; + return handleApiError(error); } }; @@ -215,15 +173,10 @@ export const updateScan = async (formData: FormData) => { }, }), }); - const data = await response.json(); - revalidatePath("/scans"); - return parseStringify(data); + + return handleApiResponse(response, "/scans"); } catch (error) { - // eslint-disable-next-line no-console - console.error(error); - return { - error: getErrorMessage(error), - }; + return handleApiError(error); } }; diff --git a/ui/actions/task/tasks.ts b/ui/actions/task/tasks.ts index 13cff62345..cd72884566 100644 --- a/ui/actions/task/tasks.ts +++ b/ui/actions/task/tasks.ts @@ -3,8 +3,8 @@ import { apiBaseUrl, getAuthHeaders, - getErrorMessage, - parseStringify, + handleApiError, + handleApiResponse, } from "@/lib"; export const getTask = async (taskId: string) => { @@ -16,9 +16,9 @@ export const getTask = async (taskId: string) => { const response = await fetch(url.toString(), { headers, }); - const data = await response.json(); - return parseStringify(data); + + return handleApiResponse(response); } catch (error) { - return { error: getErrorMessage(error) }; + return handleApiError(error); } }; diff --git a/ui/actions/users/tenants.ts b/ui/actions/users/tenants.ts index 9063fc9e1b..0cadab0444 100644 --- a/ui/actions/users/tenants.ts +++ b/ui/actions/users/tenants.ts @@ -1,9 +1,13 @@ "use server"; -import { revalidatePath } from "next/cache"; import { z } from "zod"; -import { apiBaseUrl, getAuthHeaders, parseStringify } from "@/lib/helper"; +import { + apiBaseUrl, + getAuthHeaders, + handleApiError, + handleApiResponse, +} from "@/lib/helper"; export const getAllTenants = async () => { const headers = await getAuthHeaders({ contentType: false }); @@ -19,12 +23,8 @@ export const getAllTenants = async () => { throw new Error(`Failed to fetch tenants data: ${response.statusText}`); } - const data = await response.json(); - const parsedData = parseStringify(data); - revalidatePath("/profile"); - return parsedData; + return handleApiResponse(response, "/profile"); } catch (error) { - // eslint-disable-next-line no-console console.error("Error fetching tenants:", error); return undefined; } @@ -80,16 +80,9 @@ export async function updateTenantName(prevState: any, formData: FormData) { throw new Error(`Failed to update tenant name: ${response.statusText}`); } - await response.json(); - revalidatePath("/profile"); + handleApiResponse(response, "/profile", false); return { success: "Tenant name updated successfully!" }; } catch (error) { - // eslint-disable-next-line no-console - console.error("Error updating tenant name:", error); - return { - errors: { - general: "Error updating tenant name. Please try again.", - }, - }; + return handleApiError(error); } } diff --git a/ui/actions/users/users.ts b/ui/actions/users/users.ts index c47c58ebbf..bc0a204d30 100644 --- a/ui/actions/users/users.ts +++ b/ui/actions/users/users.ts @@ -6,8 +6,8 @@ import { redirect } from "next/navigation"; import { apiBaseUrl, getAuthHeaders, - getErrorMessage, - parseStringify, + handleApiError, + handleApiResponse, } from "@/lib"; export const getUsers = async ({ @@ -39,12 +39,9 @@ export const getUsers = async ({ const users = await fetch(url.toString(), { headers, }); - const data = await users.json(); - const parsedData = parseStringify(data); - revalidatePath("/users"); - return parsedData; + + return handleApiResponse(users, "/users"); } catch (error) { - // eslint-disable-next-line no-console console.error("Error fetching users:", error); return undefined; } @@ -88,15 +85,9 @@ export const updateUser = async (formData: FormData) => { }), }); - const data = await response.json(); - revalidatePath("/users"); - return parseStringify(data); + return handleApiResponse(response, "/users"); } catch (error) { - // eslint-disable-next-line no-console - console.error(error); - return { - error: getErrorMessage(error), - }; + handleApiError(error); } }; @@ -129,20 +120,9 @@ export const updateUserRole = async (formData: FormData) => { body: JSON.stringify(requestBody), }); - const data = await response.json(); - - if (!response.ok) { - return { error: data.errors || "An error occurred" }; - } - - revalidatePath("/users"); // Update the path as needed - return parseStringify(data); + return handleApiResponse(response, "/users"); } catch (error) { - // eslint-disable-next-line no-console - console.error(error); - return { - error: getErrorMessage(error), - }; + handleApiError(error); } }; @@ -178,9 +158,7 @@ export const deleteUser = async (formData: FormData) => { revalidatePath("/users"); return data || { success: true }; } catch (error) { - // eslint-disable-next-line no-console - console.error("Error deleting user:", error); - return { error: getErrorMessage(error) }; + handleApiError(error); } }; @@ -198,12 +176,8 @@ export const getUserInfo = async () => { throw new Error(`Failed to fetch user data: ${response.statusText}`); } - const data = await response.json(); - const parsedData = parseStringify(data); - revalidatePath("/profile"); - return parsedData; + return handleApiResponse(response, "/profile"); } catch (error) { - // eslint-disable-next-line no-console console.error("Error fetching profile:", error); return undefined; } @@ -224,16 +198,8 @@ export const getUserMemberships = async (userId: string) => { headers, }); - if (!response.ok) { - throw new Error( - `Failed to fetch user memberships: ${response.statusText}`, - ); - } - - const data = await response.json(); - return parseStringify(data); + return handleApiResponse(response); } catch (error) { - // eslint-disable-next-line no-console console.error("Error fetching user memberships:", error); return { data: [] }; } diff --git a/ui/app/(prowler)/error.tsx b/ui/app/(prowler)/error.tsx index f1813e0ede..a2ef4650c1 100644 --- a/ui/app/(prowler)/error.tsx +++ b/ui/app/(prowler)/error.tsx @@ -1,35 +1,79 @@ "use client"; +import { Icon } from "@iconify/react"; import { useEffect } from "react"; -import { RocketIcon } from "@/components/icons"; import { Alert, AlertDescription, AlertTitle } from "@/components/ui"; +import { CustomButton } from "@/components/ui/custom"; import { CustomLink } from "@/components/ui/custom/custom-link"; export default function Error({ error, - // reset, + reset, }: { - error: Error; + error: Error & { digest?: string }; reset: () => void; }) { useEffect(() => { - // Log the error to an error reporting service - /* eslint-disable no-console */ - console.error(error); + // Check if it's a 500 error + const is500Error = + error.message?.includes("500") || + error.message?.includes("502") || + error.message?.includes("503") || + error.message?.toLowerCase().includes("server error"); + + if (is500Error) { + // Log 500 errors specifically for monitoring + console.error("Server error detected:", { + message: error.message, + digest: error.digest, + timestamp: new Date().toISOString(), + }); + // TODO: sent to sentry + } else { + console.error("Application error:", error); + } }, [error]); + const is500Error = + error.message?.includes("500") || + error.message?.includes("502") || + error.message?.includes("503") || + error.message?.toLowerCase().includes("server error"); + return ( - - - An unexpected error occurred - - We're sorry for the inconvenience. Please try again or contact - support if the problem persists. - - - Go to the homepage - - +
+ + + + {is500Error + ? "Server temporarily unavailable" + : "An unexpected error occurred"} + + + {is500Error + ? "The server is experiencing issues. Our team has been notified and is working on it. Please try again in a few moments." + : "We're sorry for the inconvenience. Please try again or contact support if the problem persists."} + +
+ } + ariaLabel="Try Again" + > + Try Again + + + Go to Overview + +
+
+
); } diff --git a/ui/components/findings/table/finding-detail.tsx b/ui/components/findings/table/finding-detail.tsx index 36f418480c..00c88e285f 100644 --- a/ui/components/findings/table/finding-detail.tsx +++ b/ui/components/findings/table/finding-detail.tsx @@ -1,7 +1,6 @@ "use client"; import { Snippet } from "@nextui-org/react"; -import ReactMarkdown from "react-markdown"; import { CodeSnippet } from "@/components/ui/code-snippet/code-snippet"; import { CustomSection } from "@/components/ui/custom"; @@ -14,14 +13,6 @@ import { FindingProps, ProviderType } from "@/types"; import { Muted } from "../muted"; import { DeltaIndicator } from "./delta-indicator"; -const MarkdownContainer = ({ children }: { children: string }) => { - return ( -
- {children} -
- ); -}; - const renderValue = (value: string | null | undefined) => { return value && value.trim() !== "" ? value : "-"; }; @@ -131,17 +122,15 @@ export const FindingDetail = ({ hideCopyButton hideSymbol > - +

{attributes.check_metadata.risk} - +

)} - - {attributes.check_metadata.description} - + {renderValue(attributes.check_metadata.description)} @@ -158,9 +147,9 @@ export const FindingDetail = ({ {attributes.check_metadata.remediation.recommendation.text && (
- +

{attributes.check_metadata.remediation.recommendation.text} - +

{attributes.check_metadata.remediation.recommendation.url && ( )} - {/* Remediation Steps section */} + {/* Additional Resources section */} {attributes.check_metadata.remediation.code.other && ( - - - {attributes.check_metadata.remediation.code.other} - + + + View documentation + )}
diff --git a/ui/components/users/forms/edit-tenant-form.tsx b/ui/components/users/forms/edit-tenant-form.tsx index 71aabb654c..affc03c95f 100644 --- a/ui/components/users/forms/edit-tenant-form.tsx +++ b/ui/components/users/forms/edit-tenant-form.tsx @@ -21,17 +21,17 @@ export const EditTenantForm = ({ const { toast } = useToast(); useEffect(() => { - if (state?.success) { + if (state && "success" in state) { toast({ title: "Changed successfully", description: state.success, }); setIsOpen(false); - } else if (state?.errors?.general) { + } else if (state && "error" in state) { toast({ variant: "destructive", title: "Oops! Something went wrong", - description: state.errors.general, + description: state.error, }); } }, [state, toast, setIsOpen]); @@ -49,8 +49,8 @@ export const EditTenantForm = ({ labelPlacement="outside" variant="bordered" isRequired={true} - isInvalid={!!state?.errors?.name} - errorMessage={state?.errors?.name} + isInvalid={!!(state && "error" in state)} + errorMessage={state && "error" in state ? state.error : undefined} /> {/* Hidden inputs for Server Action */} diff --git a/ui/lib/helper.ts b/ui/lib/helper.ts index 61b431c7c9..016201c5bd 100644 --- a/ui/lib/helper.ts +++ b/ui/lib/helper.ts @@ -345,18 +345,38 @@ export const permissionFormFields: PermissionInfo[] = [ export const handleApiResponse = async ( response: Response, pathToRevalidate?: string, + parse = true, ) => { + if (!response.ok) { + const errorData = await response.json().catch(() => null); + const errorDetail = errorData?.errors?.[0]?.detail; + + // Special handling for server errors (500+) + if (response.status >= 500) { + throw new Error( + errorDetail || + `Server error (${response.status}): The server encountered an error. Please try again later.`, + ); + } + + // Client errors (4xx) + throw new Error( + errorDetail || + `Request failed (${response.status}): ${response.statusText}`, + ); + } + const data = await response.json(); - if (pathToRevalidate) { + if (pathToRevalidate && pathToRevalidate !== "") { revalidatePath(pathToRevalidate); } - return parseStringify(data); + return parse ? parseStringify(data) : data; }; // Helper function to handle API errors consistently -export const handleApiError = (error: unknown) => { +export const handleApiError = (error: unknown): { error: string } => { console.error(error); return { error: getErrorMessage(error), diff --git a/ui/types/server-actions.ts b/ui/types/server-actions.ts new file mode 100644 index 0000000000..e69de29bb2 From 83a9ac210969a62247ca467c537e7425d343416d Mon Sep 17 00:00:00 2001 From: Alejandro Bailo <59607668+alejandrobailo@users.noreply.github.com> Date: Tue, 2 Sep 2025 10:45:34 +0200 Subject: [PATCH 16/32] chore(ui): update CHANGELOG (#8625) --- ui/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ui/CHANGELOG.md b/ui/CHANGELOG.md index b83b62d100..0ec9900066 100644 --- a/ui/CHANGELOG.md +++ b/ui/CHANGELOG.md @@ -8,6 +8,10 @@ All notable changes to the **Prowler UI** are documented in this file. - Handle API responses and errors consistently across the app [(#8621)](https://github.com/prowler-cloud/prowler/pull/8621) +### 🔄 Changed + +- Markdown rendering in finding details page [(#8604)](https://github.com/prowler-cloud/prowler/pull/8604) + ## [1.11.0] (Prowler v5.11.0) ### 🚀 Added From a5066326bd467da5d798906384b843f4039a478c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20Mart=C3=ADn?= Date: Tue, 2 Sep 2025 11:27:13 +0200 Subject: [PATCH 17/32] chore(changelog): update with latests changes (#8620) --- prowler/CHANGELOG.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/prowler/CHANGELOG.md b/prowler/CHANGELOG.md index e54bc46d2f..0eff617c11 100644 --- a/prowler/CHANGELOG.md +++ b/prowler/CHANGELOG.md @@ -1,6 +1,21 @@ # Prowler SDK Changelog All notable changes to the **Prowler SDK** are documented in this file. +## [v5.12.0] (Prowler UNRELEASED) + +### Added + +### Changed + +### Fixed + +--- + +## [v5.11.1] (Prowler UNRELEASED) + +### Fixed + +--- ## [v5.11.0] (Prowler v5.11.0) From 06ded98d051ae816aa70c1a92eccba010dd8cdcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20Mart=C3=ADn?= Date: Tue, 2 Sep 2025 11:48:52 +0200 Subject: [PATCH 18/32] feat(jira): add data to table and error handling (#8601) --- prowler/CHANGELOG.md | 17 + .../lib/outputs/jira/exceptions/exceptions.py | 11 + prowler/lib/outputs/jira/jira.py | 1072 ++++++++++------- tests/lib/outputs/jira/jira_test.py | 713 ++++------- 4 files changed, 918 insertions(+), 895 deletions(-) diff --git a/prowler/CHANGELOG.md b/prowler/CHANGELOG.md index 0eff617c11..fa05248663 100644 --- a/prowler/CHANGELOG.md +++ b/prowler/CHANGELOG.md @@ -17,6 +17,23 @@ All notable changes to the **Prowler SDK** are documented in this file. --- +## [v5.12.0] (Prowler UNRELEASED) + +### Added +- Add more fields for the Jira ticket and handle custom fields errors [(#8601)](https://github.com/prowler-cloud/prowler/pull/8601) + +### Changed + +### Fixed + +--- + +## [v5.11.1] (Prowler UNRELEASED) + +### Fixed + +--- + ## [v5.11.0] (Prowler v5.11.0) ### Added diff --git a/prowler/lib/outputs/jira/exceptions/exceptions.py b/prowler/lib/outputs/jira/exceptions/exceptions.py index ed138a73a4..0f8aef1efd 100644 --- a/prowler/lib/outputs/jira/exceptions/exceptions.py +++ b/prowler/lib/outputs/jira/exceptions/exceptions.py @@ -90,6 +90,10 @@ class JiraBaseException(ProwlerException): "message": "Missing parameters on Jira Init function.", "remediation": "Please check the parameters and try again.", }, + (9021, "JiraRequiredCustomFieldsError"): { + "message": "Jira project requires custom fields that are not supported.", + "remediation": "Please configure the Jira project to not require custom fields, or use a different project.", + }, } def __init__(self, code, file=None, original_exception=None, message=None): @@ -251,3 +255,10 @@ class JiraInvalidParameterError(JiraBaseException): super().__init__( 9020, file=file, original_exception=original_exception, message=message ) + + +class JiraRequiredCustomFieldsError(JiraBaseException): + def __init__(self, file=None, original_exception=None, message=None): + super().__init__( + 9021, file=file, original_exception=original_exception, message=message + ) diff --git a/prowler/lib/outputs/jira/jira.py b/prowler/lib/outputs/jira/jira.py index 616f97b820..ff3ecf41cc 100644 --- a/prowler/lib/outputs/jira/jira.py +++ b/prowler/lib/outputs/jira/jira.py @@ -28,6 +28,7 @@ from prowler.lib.outputs.jira.exceptions.exceptions import ( JiraNoTokenError, JiraRefreshTokenError, JiraRefreshTokenResponseError, + JiraRequiredCustomFieldsError, JiraSendFindingsResponseError, JiraTestConnectionError, ) @@ -599,7 +600,7 @@ class Jira: return projects else: logger.error( - f"Failed to get projects: {response.status_code} - {response.json()}" + f"Failed to get projects: {response.status_code} - {response.text}" ) raise JiraGetProjectsResponseError( message="Failed to get projects from Jira", @@ -665,7 +666,7 @@ class Jira: issue_types = response.json()["projects"][0]["issuetypes"] return [issue_type["name"] for issue_type in issue_types] else: - response_error = f"Failed to get available issue types: {response.status_code} - {response.json()}" + response_error = f"Failed to get available issue types: {response.status_code} - {response.text}" logger.warning(response_error) raise JiraGetAvailableIssueTypesResponseError( message=response_error, file=os.path.basename(__file__) @@ -698,11 +699,34 @@ class Jira: if status == "MUTED": return "#FFA500" + @staticmethod + def get_severity_color(severity: str) -> str: + """Get the color from the severity + + Args: + - severity: The severity of the finding + + Returns: + - str: The color of the severity + """ + if severity == "critical": + return "#FF0000" + if severity == "high": + return "#FFA500" + if severity == "medium": + return "#FFFF00" + if severity == "low": + return "#008000" + if severity == "informational": + return "#0000FF" + return "#000000" # Default black color for unknown severities + @staticmethod def get_adf_description( check_id: str = None, check_title: str = None, severity: str = None, + severity_color: str = None, status: str = None, status_color: str = None, status_extended: str = None, @@ -713,7 +737,589 @@ class Jira: risk: str = None, recommendation_text: str = None, recommendation_url: str = None, + remediation_code_native_iac: str = None, + remediation_code_terraform: str = None, + remediation_code_cli: str = None, + remediation_code_other: str = None, + resource_tags: dict = None, + compliance: dict = None, ) -> dict: + table_rows = [ + { + "type": "tableRow", + "content": [ + { + "type": "tableCell", + "attrs": {"colwidth": [1]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": "Check Id", + "marks": [{"type": "strong"}], + } + ], + } + ], + }, + { + "type": "tableCell", + "attrs": {"colwidth": [3]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": check_id, + "marks": [{"type": "code"}], + } + ], + } + ], + }, + ], + }, + { + "type": "tableRow", + "content": [ + { + "type": "tableCell", + "attrs": {"colwidth": [1]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": "Check Title", + "marks": [{"type": "strong"}], + } + ], + } + ], + }, + { + "type": "tableCell", + "attrs": {"colwidth": [3]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": check_title, + } + ], + } + ], + }, + ], + }, + { + "type": "tableRow", + "content": [ + { + "type": "tableCell", + "attrs": {"colwidth": [1]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": "Severity", + "marks": [{"type": "strong"}], + } + ], + } + ], + }, + { + "type": "tableCell", + "attrs": {"colwidth": [3]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": severity, + "marks": [ + {"type": "strong"}, + { + "type": "backgroundColor", + "attrs": { + "color": severity_color, + }, + }, + ], + } + ], + } + ], + }, + ], + }, + { + "type": "tableRow", + "content": [ + { + "type": "tableCell", + "attrs": {"colwidth": [1]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": "Status", + "marks": [{"type": "strong"}], + } + ], + } + ], + }, + { + "type": "tableCell", + "attrs": {"colwidth": [3]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": status, + "marks": [ + {"type": "strong"}, + { + "type": "textColor", + "attrs": {"color": status_color}, + }, + ], + } + ], + } + ], + }, + ], + }, + { + "type": "tableRow", + "content": [ + { + "type": "tableCell", + "attrs": {"colwidth": [1]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": "Status Extended", + "marks": [{"type": "strong"}], + } + ], + } + ], + }, + { + "type": "tableCell", + "attrs": {"colwidth": [3]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": status_extended, + } + ], + } + ], + }, + ], + }, + { + "type": "tableRow", + "content": [ + { + "type": "tableCell", + "attrs": {"colwidth": [1]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": "Provider", + "marks": [{"type": "strong"}], + } + ], + } + ], + }, + { + "type": "tableCell", + "attrs": {"colwidth": [3]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": provider, + "marks": [{"type": "code"}], + } + ], + } + ], + }, + ], + }, + { + "type": "tableRow", + "content": [ + { + "type": "tableCell", + "attrs": {"colwidth": [1]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": "Region", + "marks": [{"type": "strong"}], + } + ], + } + ], + }, + { + "type": "tableCell", + "attrs": {"colwidth": [3]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": region, + "marks": [{"type": "code"}], + } + ], + } + ], + }, + ], + }, + { + "type": "tableRow", + "content": [ + { + "type": "tableCell", + "attrs": {"colwidth": [1]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": "Resource UID", + "marks": [{"type": "strong"}], + } + ], + } + ], + }, + { + "type": "tableCell", + "attrs": {"colwidth": [3]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": resource_uid, + "marks": [{"type": "code"}], + } + ], + } + ], + }, + ], + }, + { + "type": "tableRow", + "content": [ + { + "type": "tableCell", + "attrs": {"colwidth": [1]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": "Resource Name", + "marks": [{"type": "strong"}], + } + ], + } + ], + }, + { + "type": "tableCell", + "attrs": {"colwidth": [3]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": resource_name, + "marks": [{"type": "code"}], + } + ], + } + ], + }, + ], + }, + { + "type": "tableRow", + "content": [ + { + "type": "tableCell", + "attrs": {"colwidth": [1]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": "Risk", + "marks": [{"type": "strong"}], + } + ], + } + ], + }, + { + "type": "tableCell", + "attrs": {"colwidth": [3]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": risk, + } + ], + } + ], + }, + ], + }, + ] + + # Add resource tags row only if there are tags + if resource_tags: + tags_text = ", ".join([f"{k}={v}" for k, v in resource_tags.items()]) + table_rows.append( + { + "type": "tableRow", + "content": [ + { + "type": "tableCell", + "attrs": {"colwidth": [1]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": "Resource Tags", + "marks": [{"type": "strong"}], + } + ], + } + ], + }, + { + "type": "tableCell", + "attrs": {"colwidth": [3]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": tags_text, + "marks": [{"type": "code"}], + } + ], + } + ], + }, + ], + } + ) + + # Add compliance row only if there are compliance mappings + if compliance: + compliance_text = [] + for framework, requirements in compliance.items(): + if requirements: + requirements_str = ", ".join(requirements) + compliance_text.append(f"{framework}: {requirements_str}") + + if compliance_text: + table_rows.append( + { + "type": "tableRow", + "content": [ + { + "type": "tableCell", + "attrs": {"colwidth": [1]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": "Compliance", + "marks": [{"type": "strong"}], + } + ], + } + ], + }, + { + "type": "tableCell", + "attrs": {"colwidth": [3]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": "; ".join(compliance_text), + "marks": [{"type": "code"}], + } + ], + } + ], + }, + ], + } + ) + + # Add recommendation row + table_rows.append( + { + "type": "tableRow", + "content": [ + { + "type": "tableCell", + "attrs": {"colwidth": [1]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": "Recommendation", + "marks": [{"type": "strong"}], + } + ], + } + ], + }, + { + "type": "tableCell", + "attrs": {"colwidth": [3]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": recommendation_text + " ", + }, + { + "type": "text", + "text": recommendation_url, + "marks": [ + { + "type": "link", + "attrs": {"href": recommendation_url}, + } + ], + }, + ], + } + ], + }, + ], + } + ) + + # Add remediation code rows only if they have content + remediation_codes = [ + ("Native IaC", remediation_code_native_iac), + ("Terraform", remediation_code_terraform), + ("CLI", remediation_code_cli), + ("Other", remediation_code_other), + ] + + for code_type, code_value in remediation_codes: + if code_value and code_value.strip(): + table_rows.append( + { + "type": "tableRow", + "content": [ + { + "type": "tableCell", + "attrs": {"colwidth": [1]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": f"Remediation {code_type}", + "marks": [{"type": "strong"}], + } + ], + } + ], + }, + { + "type": "tableCell", + "attrs": {"colwidth": [3]}, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": code_value, + "marks": [{"type": "code"}], + } + ], + } + ], + }, + ], + } + ) + return { "type": "doc", "version": 1, @@ -730,430 +1336,7 @@ class Jira: { "type": "table", "attrs": {"layout": "full-width"}, - "content": [ - { - "type": "tableRow", - "content": [ - { - "type": "tableCell", - "attrs": {"colwidth": [1]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "Check Id", - "marks": [{"type": "strong"}], - } - ], - } - ], - }, - { - "type": "tableCell", - "attrs": {"colwidth": [3]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": check_id, - "marks": [{"type": "code"}], - } - ], - } - ], - }, - ], - }, - { - "type": "tableRow", - "content": [ - { - "type": "tableCell", - "attrs": {"colwidth": [1]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "Check Title", - "marks": [{"type": "strong"}], - } - ], - } - ], - }, - { - "type": "tableCell", - "attrs": {"colwidth": [3]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": check_title, - } - ], - } - ], - }, - ], - }, - { - "type": "tableRow", - "content": [ - { - "type": "tableCell", - "attrs": {"colwidth": [1]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "Severity", - "marks": [{"type": "strong"}], - } - ], - } - ], - }, - { - "type": "tableCell", - "attrs": {"colwidth": [3]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": severity, - } - ], - } - ], - }, - ], - }, - { - "type": "tableRow", - "content": [ - { - "type": "tableCell", - "attrs": {"colwidth": [1]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "Status", - "marks": [{"type": "strong"}], - } - ], - } - ], - }, - { - "type": "tableCell", - "attrs": {"colwidth": [3]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": status, - "marks": [ - {"type": "strong"}, - { - "type": "textColor", - "attrs": { - "color": status_color - }, - }, - ], - } - ], - } - ], - }, - ], - }, - { - "type": "tableRow", - "content": [ - { - "type": "tableCell", - "attrs": {"colwidth": [1]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "Status Extended", - "marks": [{"type": "strong"}], - } - ], - } - ], - }, - { - "type": "tableCell", - "attrs": {"colwidth": [3]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": status_extended, - } - ], - } - ], - }, - ], - }, - { - "type": "tableRow", - "content": [ - { - "type": "tableCell", - "attrs": {"colwidth": [1]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "Provider", - "marks": [{"type": "strong"}], - } - ], - } - ], - }, - { - "type": "tableCell", - "attrs": {"colwidth": [3]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": provider, - "marks": [{"type": "code"}], - } - ], - } - ], - }, - ], - }, - { - "type": "tableRow", - "content": [ - { - "type": "tableCell", - "attrs": {"colwidth": [1]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "Region", - "marks": [{"type": "strong"}], - } - ], - } - ], - }, - { - "type": "tableCell", - "attrs": {"colwidth": [3]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": region, - "marks": [{"type": "code"}], - } - ], - } - ], - }, - ], - }, - { - "type": "tableRow", - "content": [ - { - "type": "tableCell", - "attrs": {"colwidth": [1]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "Resource UID", - "marks": [{"type": "strong"}], - } - ], - } - ], - }, - { - "type": "tableCell", - "attrs": {"colwidth": [3]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": resource_uid, - "marks": [{"type": "code"}], - } - ], - } - ], - }, - ], - }, - { - "type": "tableRow", - "content": [ - { - "type": "tableCell", - "attrs": {"colwidth": [1]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "Resource Name", - "marks": [{"type": "strong"}], - } - ], - } - ], - }, - { - "type": "tableCell", - "attrs": {"colwidth": [3]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": resource_name, - "marks": [{"type": "code"}], - } - ], - } - ], - }, - ], - }, - { - "type": "tableRow", - "content": [ - { - "type": "tableCell", - "attrs": {"colwidth": [1]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "Risk", - "marks": [{"type": "strong"}], - } - ], - } - ], - }, - { - "type": "tableCell", - "attrs": {"colwidth": [3]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": risk, - } - ], - } - ], - }, - ], - }, - { - "type": "tableRow", - "content": [ - { - "type": "tableCell", - "attrs": {"colwidth": [1]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "Recommendation", - "marks": [{"type": "strong"}], - } - ], - } - ], - }, - { - "type": "tableCell", - "attrs": {"colwidth": [3]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": recommendation_text + " ", - }, - { - "type": "text", - "text": recommendation_url, - "marks": [ - { - "type": "link", - "attrs": { - "href": recommendation_url - }, - } - ], - }, - ], - } - ], - }, - ], - }, - ], + "content": table_rows, }, ], } @@ -1177,6 +1360,7 @@ class Jira: - JiraRefreshTokenResponseError: Failed to refresh the access token, response code did not match 200 - JiraCreateIssueError: Failed to create an issue in Jira - JiraSendFindingsResponseError: Failed to send the findings to Jira + - JiraRequiredCustomFieldsError: Jira project requires custom fields that are not supported """ try: access_token = self.get_access_token() @@ -1217,10 +1401,14 @@ class Jira: for finding in findings: status_color = self.get_color_from_status(finding.status.value) + severity_color = self.get_severity_color( + finding.metadata.Severity.value.lower() + ) adf_description = self.get_adf_description( check_id=finding.metadata.CheckID, check_title=finding.metadata.CheckTitle, severity=finding.metadata.Severity.value.upper(), + severity_color=severity_color, status=finding.status.value, status_color=status_color, status_extended=finding.status_extended, @@ -1231,6 +1419,12 @@ class Jira: risk=finding.metadata.Risk, recommendation_text=finding.metadata.Remediation.Recommendation.Text, recommendation_url=finding.metadata.Remediation.Recommendation.Url, + remediation_code_native_iac=finding.metadata.Remediation.Code.NativeIaC, + remediation_code_terraform=finding.metadata.Remediation.Code.Terraform, + remediation_code_cli=finding.metadata.Remediation.Code.CLI, + remediation_code_other=finding.metadata.Remediation.Code.Other, + resource_tags=finding.resource_tags, + compliance=finding.compliance, ) payload = { "fields": { @@ -1248,13 +1442,37 @@ class Jira: ) if response.status_code != 201: - response_error = f"Failed to send finding: {response.status_code} - {response.json()}" + response_json = response.json() + # Check if the error is due to required custom fields + if response.status_code == 400 and "errors" in response_json: + errors = response_json.get("errors", {}) + # Look for custom field errors (fields starting with "customfield_") + custom_field_errors = { + k: v + for k, v in errors.items() + if k.startswith("customfield_") + } + if custom_field_errors: + custom_fields_formatted = ", ".join( + [ + f"'{k}': '{v}'" + for k, v in custom_field_errors.items() + ] + ) + raise JiraRequiredCustomFieldsError( + message=f"Jira project requires custom fields that are not supported: {custom_fields_formatted}", + file=os.path.basename(__file__), + ) + + response_error = f"Failed to send finding: {response.status_code} - {response_json}" logger.warning(response_error) raise JiraSendFindingsResponseError( message=response_error, file=os.path.basename(__file__) ) else: logger.info(f"Finding sent successfully: {response.json()}") + except JiraRequiredCustomFieldsError as custom_fields_error: + raise custom_fields_error except JiraRefreshTokenError as refresh_error: raise refresh_error except JiraRefreshTokenResponseError as response_error: diff --git a/tests/lib/outputs/jira/jira_test.py b/tests/lib/outputs/jira/jira_test.py index e4cc7fbc0b..608dfc47a5 100644 --- a/tests/lib/outputs/jira/jira_test.py +++ b/tests/lib/outputs/jira/jira_test.py @@ -15,6 +15,7 @@ from prowler.lib.outputs.jira.exceptions.exceptions import ( JiraGetProjectsError, JiraNoProjectsError, JiraRefreshTokenError, + JiraRequiredCustomFieldsError, ) from prowler.lib.outputs.jira.jira import Jira @@ -587,6 +588,20 @@ class TestJiraIntegration: finding.metadata.Risk = "risk" finding.metadata.Remediation.Recommendation.Text = "remediation_text" finding.metadata.Remediation.Recommendation.Url = "remediation_url" + finding.metadata.Remediation.Code.NativeIaC = ( + 'resource "aws_s3_bucket" "example" { bucket = "my-bucket" }' + ) + finding.metadata.Remediation.Code.Terraform = ( + "terraform apply -target=aws_s3_bucket.example" + ) + finding.metadata.Remediation.Code.CLI = ( + "aws s3api create-bucket --bucket my-bucket --region us-east-1" + ) + finding.metadata.Remediation.Code.Other = ( + "Manual configuration required in AWS Console" + ) + finding.resource_tags = {"Environment": "Production", "Owner": "SecurityTeam"} + finding.compliance = {"CIS": ["2.1.1", "2.1.2"], "NIST": ["AC-3", "AC-6"]} self.jira_integration.cloud_id = "valid_cloud_id" @@ -594,483 +609,115 @@ class TestJiraIntegration: findings=[finding], project_key="TEST-1", issue_type="Bug" ) + mock_post.assert_called_once() + + call_args = mock_post.call_args + expected_url = ( "https://api.atlassian.com/ex/jira/valid_cloud_id/rest/api/3/issue" ) - expected_json = { - "fields": { - "project": {"key": "TEST-1"}, - "summary": "[Prowler] HIGH - CHECK-1 - resource-1", - "description": { - "type": "doc", - "version": 1, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "Prowler has discovered the following finding:", - } - ], - }, - { - "type": "table", - "attrs": {"layout": "full-width"}, - "content": [ - { - "type": "tableRow", - "content": [ - { - "type": "tableCell", - "attrs": {"colwidth": [1]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "Check Id", - "marks": [ - {"type": "strong"} - ], - } - ], - } - ], - }, - { - "type": "tableCell", - "attrs": {"colwidth": [3]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "CHECK-1", - "marks": [{"type": "code"}], - } - ], - } - ], - }, - ], - }, - { - "type": "tableRow", - "content": [ - { - "type": "tableCell", - "attrs": {"colwidth": [1]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "Check Title", - "marks": [ - {"type": "strong"} - ], - } - ], - } - ], - }, - { - "type": "tableCell", - "attrs": {"colwidth": [3]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "Check Title", - } - ], - } - ], - }, - ], - }, - { - "type": "tableRow", - "content": [ - { - "type": "tableCell", - "attrs": {"colwidth": [1]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "Severity", - "marks": [ - {"type": "strong"} - ], - } - ], - } - ], - }, - { - "type": "tableCell", - "attrs": {"colwidth": [3]}, - "content": [ - { - "type": "paragraph", - "content": [ - {"type": "text", "text": "HIGH"} - ], - } - ], - }, - ], - }, - { - "type": "tableRow", - "content": [ - { - "type": "tableCell", - "attrs": {"colwidth": [1]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "Status", - "marks": [ - {"type": "strong"} - ], - } - ], - } - ], - }, - { - "type": "tableCell", - "attrs": {"colwidth": [3]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "FAIL", - "marks": [ - {"type": "strong"}, - { - "type": "textColor", - "attrs": { - "color": "#FF0000" - }, - }, - ], - } - ], - } - ], - }, - ], - }, - { - "type": "tableRow", - "content": [ - { - "type": "tableCell", - "attrs": {"colwidth": [1]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "Status Extended", - "marks": [ - {"type": "strong"} - ], - } - ], - } - ], - }, - { - "type": "tableCell", - "attrs": {"colwidth": [3]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "status_extended", - } - ], - } - ], - }, - ], - }, - { - "type": "tableRow", - "content": [ - { - "type": "tableCell", - "attrs": {"colwidth": [1]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "Provider", - "marks": [ - {"type": "strong"} - ], - } - ], - } - ], - }, - { - "type": "tableCell", - "attrs": {"colwidth": [3]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "aws", - "marks": [{"type": "code"}], - } - ], - } - ], - }, - ], - }, - { - "type": "tableRow", - "content": [ - { - "type": "tableCell", - "attrs": {"colwidth": [1]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "Region", - "marks": [ - {"type": "strong"} - ], - } - ], - } - ], - }, - { - "type": "tableCell", - "attrs": {"colwidth": [3]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "region", - "marks": [{"type": "code"}], - } - ], - } - ], - }, - ], - }, - { - "type": "tableRow", - "content": [ - { - "type": "tableCell", - "attrs": {"colwidth": [1]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "Resource UID", - "marks": [ - {"type": "strong"} - ], - } - ], - } - ], - }, - { - "type": "tableCell", - "attrs": {"colwidth": [3]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "resource-1", - "marks": [{"type": "code"}], - } - ], - } - ], - }, - ], - }, - { - "type": "tableRow", - "content": [ - { - "type": "tableCell", - "attrs": {"colwidth": [1]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "Resource Name", - "marks": [ - {"type": "strong"} - ], - } - ], - } - ], - }, - { - "type": "tableCell", - "attrs": {"colwidth": [3]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "resource_name", - "marks": [{"type": "code"}], - } - ], - } - ], - }, - ], - }, - { - "type": "tableRow", - "content": [ - { - "type": "tableCell", - "attrs": {"colwidth": [1]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "Risk", - "marks": [ - {"type": "strong"} - ], - } - ], - } - ], - }, - { - "type": "tableCell", - "attrs": {"colwidth": [3]}, - "content": [ - { - "type": "paragraph", - "content": [ - {"type": "text", "text": "risk"} - ], - } - ], - }, - ], - }, - { - "type": "tableRow", - "content": [ - { - "type": "tableCell", - "attrs": {"colwidth": [1]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "Recommendation", - "marks": [ - {"type": "strong"} - ], - } - ], - } - ], - }, - { - "type": "tableCell", - "attrs": {"colwidth": [3]}, - "content": [ - { - "type": "paragraph", - "content": [ - { - "type": "text", - "text": "remediation_text ", - }, - { - "type": "text", - "text": "remediation_url", - "marks": [ - { - "type": "link", - "attrs": { - "href": "remediation_url" - }, - } - ], - }, - ], - } - ], - }, - ], - }, - ], - }, - ], - }, - "issuetype": {"name": "Bug"}, - } - } expected_headers = { "Authorization": "Bearer valid_access_token", "Content-Type": "application/json", } - mock_post.assert_called_once_with( - expected_url, json=expected_json, headers=expected_headers + assert call_args[0][0] == expected_url + assert call_args.kwargs["headers"] == expected_headers + + payload = call_args.kwargs["json"] + assert payload["fields"]["project"]["key"] == "TEST-1" + assert payload["fields"]["summary"] == "[Prowler] HIGH - CHECK-1 - resource-1" + assert payload["fields"]["issuetype"]["name"] == "Bug" + assert payload["fields"]["description"]["type"] == "doc" + + description_content = payload["fields"]["description"]["content"] + + intro_paragraph = description_content[0] + assert intro_paragraph["type"] == "paragraph" + intro_text = intro_paragraph["content"][0] + assert intro_text["type"] == "text" + assert intro_text["text"] == "Prowler has discovered the following finding:" + + table = description_content[1] + assert table["type"] == "table" + + table_rows = table["content"] + row_texts = [] + for row in table_rows: + if row["type"] == "tableRow": + cells = row["content"] + if len(cells) == 2: + key_cell = cells[0]["content"][0]["content"][0]["text"] + + value_content = cells[1]["content"][0]["content"] + if len(value_content) > 1: + value_texts = [] + for content_item in value_content: + if content_item["type"] == "text": + value_texts.append(content_item["text"]) + value_cell = "".join(value_texts) + else: + value_cell = value_content[0]["text"] + + row_texts.append((key_cell, value_cell)) + + expected_keys = [ + "Check Id", + "Check Title", + "Severity", + "Status", + "Status Extended", + "Provider", + "Region", + "Resource UID", + "Resource Name", + "Risk", + "Resource Tags", + "Compliance", + "Recommendation", + "Remediation Native IaC", + "Remediation Terraform", + "Remediation CLI", + "Remediation Other", + ] + + actual_keys = [key for key, _ in row_texts] + + for expected_key in expected_keys: + assert expected_key in actual_keys, f"Missing row key: {expected_key}" + + row_dict = dict(row_texts) + assert row_dict["Check Id"] == "CHECK-1" + assert row_dict["Check Title"] == "Check Title" + assert row_dict["Status"] == "FAIL" + assert row_dict["Severity"] == "HIGH" + assert row_dict["Resource UID"] == "resource-1" + assert row_dict["Resource Name"] == "resource_name" + assert row_dict["Provider"] == "aws" + assert row_dict["Region"] == "region" + assert row_dict["Risk"] == "risk" + assert "remediation_text" in row_dict["Recommendation"] + assert "remediation_url" in row_dict["Recommendation"] + assert ( + row_dict["Remediation Native IaC"] + == 'resource "aws_s3_bucket" "example" { bucket = "my-bucket" }' ) + assert ( + row_dict["Remediation Terraform"] + == "terraform apply -target=aws_s3_bucket.example" + ) + assert ( + row_dict["Remediation CLI"] + == "aws s3api create-bucket --bucket my-bucket --region us-east-1" + ) + assert ( + row_dict["Remediation Other"] + == "Manual configuration required in AWS Console" + ) + assert "Environment=Production" in row_dict["Resource Tags"] + assert "Owner=SecurityTeam" in row_dict["Resource Tags"] + assert "CIS: 2.1.1, 2.1.2" in row_dict["Compliance"] + assert "NIST: AC-3, AC-6" in row_dict["Compliance"] @patch.object(Jira, "get_access_token", return_value="valid_access_token") @patch.object( @@ -1084,6 +731,7 @@ class TestJiraIntegration: # To disable vulture mock_get_available_issue_types = mock_get_available_issue_types mock_get_access_token = mock_get_access_token + mock_post = mock_post with pytest.raises(JiraCreateIssueError): self.jira_integration.send_findings( @@ -1119,6 +767,120 @@ class TestJiraIntegration: findings=[finding], project_key="TEST", issue_type="Bug" ) + @patch.object(Jira, "get_access_token", return_value="valid_access_token") + @patch.object( + Jira, "get_available_issue_types", return_value=["Bug", "Task", "Story"] + ) + @patch.object(Jira, "get_projects", return_value={"TEST-1": "Test Project"}) + @patch("prowler.lib.outputs.jira.jira.requests.post") + def test_send_findings_custom_fields_required_error( + self, + mock_post, + mock_get_projects, + mock_get_available_issue_types, + mock_get_access_token, + ): + """Test that send_findings raises JiraRequiredCustomFieldsError when custom fields are required.""" + # To disable vulture + mock_get_available_issue_types = mock_get_available_issue_types + mock_get_access_token = mock_get_access_token + mock_get_projects = mock_get_projects + + mock_response = MagicMock() + mock_response.status_code = 400 + mock_response.json.return_value = { + "errorMessages": [], + "errors": { + "customfield_10148": "Team is required.", + "customfield_10088": "Component is required.", + }, + } + mock_post.return_value = mock_response + + finding = MagicMock() + finding.status.value = "FAIL" + finding.status_extended = "status_extended" + finding.metadata.Severity.value = "HIGH" + finding.metadata.CheckID = "CHECK-1" + finding.metadata.CheckTitle = "Check Title" + finding.resource_uid = "resource-1" + finding.resource_name = "resource_name" + finding.metadata.Provider = "aws" + finding.region = "region" + finding.metadata.Risk = "risk" + finding.metadata.Remediation.Recommendation.Text = "remediation_text" + finding.metadata.Remediation.Recommendation.Url = "remediation_url" + finding.metadata.Remediation.Code.NativeIaC = "" + finding.metadata.Remediation.Code.Terraform = "" + finding.metadata.Remediation.Code.CLI = "" + finding.metadata.Remediation.Code.Other = "" + finding.resource_tags = {} + finding.compliance = {} + + self.jira_integration.cloud_id = "valid_cloud_id" + + with pytest.raises(JiraRequiredCustomFieldsError): + self.jira_integration.send_findings( + findings=[finding], project_key="TEST-1", issue_type="Bug" + ) + + @patch.object(Jira, "get_access_token", return_value="valid_access_token") + @patch.object( + Jira, "get_available_issue_types", return_value=["Bug", "Task", "Story"] + ) + @patch.object(Jira, "get_projects", return_value={"TEST-1": "Test Project"}) + @patch("prowler.lib.outputs.jira.jira.requests.post") + def test_send_findings_non_custom_field_400_error( + self, + mock_post, + mock_get_projects, + mock_get_available_issue_types, + mock_get_access_token, + ): + """Test that send_findings raises JiraCreateIssueError for non-custom field 400 errors.""" + # To disable vulture + mock_get_available_issue_types = mock_get_available_issue_types + mock_get_access_token = mock_get_access_token + mock_get_projects = mock_get_projects + + mock_response = MagicMock() + mock_response.status_code = 400 + mock_response.json.return_value = { + "errorMessages": [], + "errors": { + "summary": "Summary is required.", + "description": "Description is required.", + }, + } + mock_post.return_value = mock_response + + finding = MagicMock() + finding.status.value = "FAIL" + finding.status_extended = "status_extended" + finding.metadata.Severity.value = "HIGH" + finding.metadata.CheckID = "CHECK-1" + finding.metadata.CheckTitle = "Check Title" + finding.resource_uid = "resource-1" + finding.resource_name = "resource_name" + finding.metadata.Provider = "aws" + finding.region = "region" + finding.metadata.Risk = "risk" + finding.metadata.Remediation.Recommendation.Text = "remediation_text" + finding.metadata.Remediation.Recommendation.Url = "remediation_url" + finding.metadata.Remediation.Code.NativeIaC = "" + finding.metadata.Remediation.Code.Terraform = "" + finding.metadata.Remediation.Code.CLI = "" + finding.metadata.Remediation.Code.Other = "" + finding.resource_tags = {} + finding.compliance = {} + + self.jira_integration.cloud_id = "valid_cloud_id" + + with pytest.raises(JiraCreateIssueError): + self.jira_integration.send_findings( + findings=[finding], project_key="TEST-1", issue_type="Bug" + ) + @pytest.mark.parametrize( "status, expected_color", [("FAIL", "#FF0000"), ("PASS", "#008000"), ("MUTED", "#FFA500")], @@ -1126,3 +888,18 @@ class TestJiraIntegration: def test_get_color_from_status(self, status, expected_color): """Test that get_color_from_status returns the correct color for a status.""" assert self.jira_integration.get_color_from_status(status) == expected_color + + @pytest.mark.parametrize( + "severity, expected_color", + [ + ("critical", "#FF0000"), + ("high", "#FFA500"), + ("medium", "#FFFF00"), + ("low", "#008000"), + ("informational", "#0000FF"), + ("unknown", "#000000"), + ], + ) + def test_get_severity_color(self, severity, expected_color): + """Test that get_severity_color returns the correct color for a severity.""" + assert self.jira_integration.get_severity_color(severity) == expected_color From 8cd90e07dcc8594ac58fb0e2d6b7a519c52840ed Mon Sep 17 00:00:00 2001 From: Chandrapal Badshah Date: Tue, 2 Sep 2025 15:45:48 +0530 Subject: [PATCH 19/32] chore(ui): eslint nextjs files (#8627) Co-authored-by: Chandrapal Badshah <12944530+Chan9390@users.noreply.github.com> --- ui/types/integrations.ts | 60 +++++++++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 23 deletions(-) diff --git a/ui/types/integrations.ts b/ui/types/integrations.ts index a95174cb45..033a57f4b4 100644 --- a/ui/types/integrations.ts +++ b/ui/types/integrations.ts @@ -55,14 +55,16 @@ const validateAwsCredentialsCreate = ( if (!data.aws_access_key_id) { ctx.addIssue({ code: z.ZodIssueCode.custom, - message: "AWS Access Key ID is required when using access and secret key", + message: + "AWS Access Key ID is required when using access and secret key", path: ["aws_access_key_id"], }); } if (!data.aws_secret_access_key) { ctx.addIssue({ code: z.ZodIssueCode.custom, - message: "AWS Secret Access Key is required when using access and secret key", + message: + "AWS Secret Access Key is required when using access and secret key", path: ["aws_secret_access_key"], }); } @@ -78,7 +80,8 @@ const validateAwsCredentialsEdit = (data: any, ctx: z.RefinementCtx) => { if (hasAccessKey && !hasSecretKey) { ctx.addIssue({ code: z.ZodIssueCode.custom, - message: "AWS Secret Access Key is required when providing Access Key ID", + message: + "AWS Secret Access Key is required when providing Access Key ID", path: ["aws_secret_access_key"], }); } @@ -86,7 +89,8 @@ const validateAwsCredentialsEdit = (data: any, ctx: z.RefinementCtx) => { if (hasSecretKey && !hasAccessKey) { ctx.addIssue({ code: z.ZodIssueCode.custom, - message: "AWS Access Key ID is required when providing Secret Access Key", + message: + "AWS Access Key ID is required when providing Secret Access Key", path: ["aws_access_key_id"], }); } @@ -99,8 +103,10 @@ const validateIamRole = ( ctx: z.RefinementCtx, checkShowSection: boolean = true, ) => { - const shouldValidate = checkShowSection ? data.show_role_section === true : true; - + const shouldValidate = checkShowSection + ? data.show_role_section === true + : true; + if (shouldValidate && data.role_arn) { if (data.role_arn.trim() === "") { ctx.addIssue({ @@ -160,9 +166,14 @@ export const s3IntegrationFormSchema = baseS3IntegrationSchema export const editS3IntegrationFormSchema = baseS3IntegrationSchema .extend({ bucket_name: z.string().min(1, "Bucket name is required").optional(), - output_directory: z.string().min(1, "Output directory is required").optional(), + output_directory: z + .string() + .min(1, "Output directory is required") + .optional(), providers: z.array(z.string()).optional(), - credentials_type: z.enum(["aws-sdk-default", "access-secret-key"]).optional(), + credentials_type: z + .enum(["aws-sdk-default", "access-secret-key"]) + .optional(), }) .superRefine((data, ctx) => { validateAwsCredentialsEdit(data, ctx); @@ -201,18 +212,21 @@ export const securityHubIntegrationFormSchema = baseSecurityHubIntegrationSchema } }); -export const editSecurityHubIntegrationFormSchema = baseSecurityHubIntegrationSchema - .extend({ - provider_id: z.string().optional(), - send_only_fails: z.boolean().optional(), - archive_previous_findings: z.boolean().optional(), - use_custom_credentials: z.boolean().optional(), - credentials_type: z.enum(["aws-sdk-default", "access-secret-key"]).optional(), - }) - .superRefine((data, ctx) => { - if (data.use_custom_credentials !== false) { - validateAwsCredentialsEdit(data, ctx); - } - // Always validate role if role_arn is provided - validateIamRole(data, ctx, false); - }); \ No newline at end of file +export const editSecurityHubIntegrationFormSchema = + baseSecurityHubIntegrationSchema + .extend({ + provider_id: z.string().optional(), + send_only_fails: z.boolean().optional(), + archive_previous_findings: z.boolean().optional(), + use_custom_credentials: z.boolean().optional(), + credentials_type: z + .enum(["aws-sdk-default", "access-secret-key"]) + .optional(), + }) + .superRefine((data, ctx) => { + if (data.use_custom_credentials !== false) { + validateAwsCredentialsEdit(data, ctx); + } + // Always validate role if role_arn is provided + validateIamRole(data, ctx, false); + }); From 230a085c76714b155856a03048769774a9bfcccd Mon Sep 17 00:00:00 2001 From: sumit-tft <70506234+sumit-tft@users.noreply.github.com> Date: Tue, 2 Sep 2025 16:03:58 +0530 Subject: [PATCH 20/32] fix(ui): display NoProvidersAdded when no cloud providers are configured (#8626) --- ui/CHANGELOG.md | 3 +++ ui/app/(prowler)/scans/page.tsx | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ui/CHANGELOG.md b/ui/CHANGELOG.md index 0ec9900066..a6ecb2d728 100644 --- a/ui/CHANGELOG.md +++ b/ui/CHANGELOG.md @@ -12,6 +12,9 @@ All notable changes to the **Prowler UI** are documented in this file. - Markdown rendering in finding details page [(#8604)](https://github.com/prowler-cloud/prowler/pull/8604) +### 🐞 Fixed +- Scan page shows NoProvidersAdded when no providers [(#8626)](https://github.com/prowler-cloud/prowler/pull/8626) + ## [1.11.0] (Prowler v5.11.0) ### 🚀 Added diff --git a/ui/app/(prowler)/scans/page.tsx b/ui/app/(prowler)/scans/page.tsx index 68ce8b8e29..623836673c 100644 --- a/ui/app/(prowler)/scans/page.tsx +++ b/ui/app/(prowler)/scans/page.tsx @@ -48,7 +48,8 @@ export default async function Scans({ connected: provider.attributes.connection.connected, })) || []; - const thereIsNoProviders = !providersData?.data; + const thereIsNoProviders = + !providersData?.data || providersData.data.length === 0; const thereIsNoProvidersConnected = providersData?.data?.every( (provider: ProviderProps) => !provider.attributes.connection.connected, From 3ded224a4bc987bb7d870d71d5dedc0f9d605d3b Mon Sep 17 00:00:00 2001 From: Alejandro Bailo <59607668+alejandrobailo@users.noreply.github.com> Date: Tue, 2 Sep 2025 12:35:06 +0200 Subject: [PATCH 21/32] fix: new errors detected through the app (#8629) --- ui/actions/compliances/compliances.ts | 4 ++-- ui/app/(prowler)/compliance/page.tsx | 28 ++++++++++++++++----------- ui/app/(prowler)/lighthouse/page.tsx | 7 +++++++ 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/ui/actions/compliances/compliances.ts b/ui/actions/compliances/compliances.ts index dff6bb5bb0..c29b771984 100644 --- a/ui/actions/compliances/compliances.ts +++ b/ui/actions/compliances/compliances.ts @@ -48,8 +48,8 @@ export const getComplianceOverviewMetadataInfo = async ({ if (sort) url.searchParams.append("sort", sort); Object.entries(filters).forEach(([key, value]) => { - // Define filters to exclude - if (key !== "filter[search]") { + // Define filters to exclude and check for valid values + if (key !== "filter[search]" && value && String(value).trim() !== "") { url.searchParams.append(key, String(value)); } }); diff --git a/ui/app/(prowler)/compliance/page.tsx b/ui/app/(prowler)/compliance/page.tsx index 5a1e7fcca9..e9cd26ac23 100644 --- a/ui/app/(prowler)/compliance/page.tsx +++ b/ui/app/(prowler)/compliance/page.tsx @@ -91,12 +91,14 @@ export default async function Compliance({ } : undefined; - const metadataInfoData = await getComplianceOverviewMetadataInfo({ - query, - filters: { - "filter[scan_id]": selectedScanId, - }, - }); + const metadataInfoData = selectedScanId + ? await getComplianceOverviewMetadataInfo({ + query, + filters: { + "filter[scan_id]": selectedScanId, + }, + }) + : { data: { attributes: { regions: [] } } }; const uniqueRegions = metadataInfoData?.data?.attributes?.regions || []; @@ -140,11 +142,15 @@ const SSRComplianceGrid = async ({ // Extract query from filters const query = (filters["filter[search]"] as string) || ""; - const compliancesData = await getCompliancesOverview({ - scanId, - region: regionFilter, - query, - }); + // Only fetch compliance data if we have a valid scanId + const compliancesData = + scanId && scanId.trim() !== "" + ? await getCompliancesOverview({ + scanId, + region: regionFilter, + query, + }) + : { data: [], errors: [] }; const type = compliancesData?.data?.type; diff --git a/ui/app/(prowler)/lighthouse/page.tsx b/ui/app/(prowler)/lighthouse/page.tsx index 96e5ecbfb7..1bf8551f74 100644 --- a/ui/app/(prowler)/lighthouse/page.tsx +++ b/ui/app/(prowler)/lighthouse/page.tsx @@ -1,3 +1,5 @@ +import { redirect } from "next/navigation"; + import { getLighthouseConfig } from "@/actions/lighthouse/lighthouse"; import { LighthouseIcon } from "@/components/icons/Icons"; import { Chat } from "@/components/lighthouse"; @@ -7,6 +9,11 @@ export default async function AIChatbot() { const lighthouseConfig = await getLighthouseConfig(); const hasConfig = !!lighthouseConfig; + + if (!hasConfig) { + return redirect("/lighthouse/config"); + } + const isActive = lighthouseConfig.is_active ?? false; return ( From fdf45aac51ffd103fa8717bd40dc73e148baf175 Mon Sep 17 00:00:00 2001 From: Pepe Fagoaga Date: Tue, 2 Sep 2025 17:30:40 +0200 Subject: [PATCH 22/32] fix(img): prowler architecture (#8635) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a66868db3b..2fb1b94cf4 100644 --- a/README.md +++ b/README.md @@ -273,7 +273,7 @@ python prowler-cli.py -v - **Prowler API**: A backend service, developed with Django REST Framework, responsible for running Prowler scans and storing the generated results. - **Prowler SDK**: A Python SDK designed to extend the functionality of the Prowler CLI for advanced capabilities. -![Prowler App Architecture](docs/img/prowler-app-architecture.png) +![Prowler App Architecture](docs/products/img/prowler-app-architecture.png) ## Prowler CLI From c9ed7773d23b0f69c0e121cbcc3343e871de2688 Mon Sep 17 00:00:00 2001 From: Hugo Pereira Brito <101209179+HugoPBrito@users.noreply.github.com> Date: Tue, 2 Sep 2025 17:42:21 +0200 Subject: [PATCH 23/32] feat(models): add `AdditionalUrls` field to check metadata (#8590) --- prowler/CHANGELOG.md | 7 + prowler/lib/check/models.py | 22 +- tests/lib/check/models_test.py | 391 +++++++++++++++++++++++++++++++++ 3 files changed, 417 insertions(+), 3 deletions(-) diff --git a/prowler/CHANGELOG.md b/prowler/CHANGELOG.md index fa05248663..484f4cf41c 100644 --- a/prowler/CHANGELOG.md +++ b/prowler/CHANGELOG.md @@ -34,6 +34,13 @@ All notable changes to the **Prowler SDK** are documented in this file. --- +## [v5.12.0] (Prowler UNRELEASED) + +### Added +- `AdditionalUrls` field in CheckMetadata [(#8590)](https://github.com/prowler-cloud/prowler/pull/8590) + +--- + ## [v5.11.0] (Prowler v5.11.0) ### Added diff --git a/prowler/lib/check/models.py b/prowler/lib/check/models.py index de38162cbc..547dc1d94b 100644 --- a/prowler/lib/check/models.py +++ b/prowler/lib/check/models.py @@ -7,7 +7,7 @@ from dataclasses import asdict, dataclass, is_dataclass from enum import Enum from typing import Any, Dict, Optional, Set -from pydantic.v1 import BaseModel, ValidationError, validator +from pydantic.v1 import BaseModel, Field, ValidationError, validator from prowler.config.config import Provider from prowler.lib.check.compliance_models import Compliance @@ -85,6 +85,7 @@ class CheckMetadata(BaseModel): Risk (str): The risk associated with the check. RelatedUrl (str): The URL related to the check. Remediation (Remediation): The remediation steps for the check. + AdditionalUrls (list[str]): Additional URLs related to the check. Defaults to an empty list. Categories (list[str]): The categories of the check. DependsOn (list[str]): The dependencies of the check. RelatedTo (list[str]): The related checks. @@ -97,13 +98,14 @@ class CheckMetadata(BaseModel): valid_severity(severity): Validator function to validate the severity of the check. valid_cli_command(remediation): Validator function to validate the CLI command is not an URL. valid_resource_type(resource_type): Validator function to validate the resource type is not empty. + validate_additional_urls(additional_urls): Validator function to ensure AdditionalUrls contains no duplicates. """ Provider: str CheckID: str CheckTitle: str CheckType: list[str] - CheckAliases: list[str] = [] + CheckAliases: list[str] = Field(default_factory=list) ServiceName: str SubServiceName: str ResourceIdTemplate: str @@ -113,13 +115,14 @@ class CheckMetadata(BaseModel): Risk: str RelatedUrl: str Remediation: Remediation + AdditionalUrls: list[str] = Field(default_factory=list) Categories: list[str] DependsOn: list[str] RelatedTo: list[str] Notes: str # We set the compliance to None to # store the compliance later if supplied - Compliance: Optional[list[Any]] = [] + Compliance: Optional[list[Any]] = Field(default_factory=list) @validator("Categories", each_item=True, pre=True, always=True) def valid_category(value): @@ -178,6 +181,19 @@ class CheckMetadata(BaseModel): return check_id + @validator("AdditionalUrls", pre=True, always=True) + def validate_additional_urls(cls, additional_urls): + if not isinstance(additional_urls, list): + raise ValueError("AdditionalUrls must be a list") + + if any(not url or not url.strip() for url in additional_urls): + raise ValueError("AdditionalUrls cannot contain empty items") + + if len(additional_urls) != len(set(additional_urls)): + raise ValueError("AdditionalUrls cannot contain duplicate items") + + return additional_urls + @staticmethod def get_bulk(provider: str) -> dict[str, "CheckMetadata"]: """ diff --git a/tests/lib/check/models_test.py b/tests/lib/check/models_test.py index 83b294f171..341d696ee3 100644 --- a/tests/lib/check/models_test.py +++ b/tests/lib/check/models_test.py @@ -1,5 +1,8 @@ from unittest import mock +import pytest +from pydantic.v1 import ValidationError + from prowler.lib.check.models import CheckMetadata from tests.lib.check.compliance_check_test import custom_compliance_metadata @@ -325,3 +328,391 @@ class TestCheckMetada: result = CheckMetadata.list(bulk_checks_metadata=bulk_metadata) assert result == set() + + def test_additional_urls_valid_empty_list(self): + """Test AdditionalUrls with valid empty list (default)""" + metadata = CheckMetadata( + Provider="aws", + CheckID="test_check", + CheckTitle="Test Check", + CheckType=["type1"], + ServiceName="test", + SubServiceName="subservice1", + ResourceIdTemplate="template1", + Severity="high", + ResourceType="resource1", + Description="Description 1", + Risk="risk1", + RelatedUrl="url1", + Remediation={ + "Code": { + "CLI": "cli1", + "NativeIaC": "native1", + "Other": "other1", + "Terraform": "terraform1", + }, + "Recommendation": {"Text": "text1", "Url": "url1"}, + }, + Categories=["categoryone"], + DependsOn=["dependency1"], + RelatedTo=["related1"], + Notes="notes1", + AdditionalUrls=[], + Compliance=[], + ) + assert metadata.AdditionalUrls == [] + + def test_additional_urls_valid_with_urls(self): + """Test AdditionalUrls with valid URLs""" + valid_urls = [ + "https://example.com/doc1", + "https://example.com/doc2", + "https://aws.amazon.com/docs", + ] + metadata = CheckMetadata( + Provider="aws", + CheckID="test_check", + CheckTitle="Test Check", + CheckType=["type1"], + ServiceName="test", + SubServiceName="subservice1", + ResourceIdTemplate="template1", + Severity="high", + ResourceType="resource1", + Description="Description 1", + Risk="risk1", + RelatedUrl="url1", + Remediation={ + "Code": { + "CLI": "cli1", + "NativeIaC": "native1", + "Other": "other1", + "Terraform": "terraform1", + }, + "Recommendation": {"Text": "text1", "Url": "url1"}, + }, + Categories=["categoryone"], + DependsOn=["dependency1"], + RelatedTo=["related1"], + Notes="notes1", + AdditionalUrls=valid_urls, + Compliance=[], + ) + assert metadata.AdditionalUrls == valid_urls + + def test_additional_urls_invalid_not_list(self): + """Test AdditionalUrls with non-list value""" + with pytest.raises(ValidationError) as exc_info: + CheckMetadata( + Provider="aws", + CheckID="test_check", + CheckTitle="Test Check", + CheckType=["type1"], + ServiceName="test", + SubServiceName="subservice1", + ResourceIdTemplate="template1", + Severity="high", + ResourceType="resource1", + Description="Description 1", + Risk="risk1", + RelatedUrl="url1", + Remediation={ + "Code": { + "CLI": "cli1", + "NativeIaC": "native1", + "Other": "other1", + "Terraform": "terraform1", + }, + "Recommendation": {"Text": "text1", "Url": "url1"}, + }, + Categories=["categoryone"], + DependsOn=["dependency1"], + RelatedTo=["related1"], + Notes="notes1", + AdditionalUrls="not_a_list", + Compliance=[], + ) + assert "AdditionalUrls must be a list" in str(exc_info.value) + + def test_additional_urls_invalid_empty_items(self): + """Test AdditionalUrls with empty string items""" + with pytest.raises(ValidationError) as exc_info: + CheckMetadata( + Provider="aws", + CheckID="test_check", + CheckTitle="Test Check", + CheckType=["type1"], + ServiceName="test", + SubServiceName="subservice1", + ResourceIdTemplate="template1", + Severity="high", + ResourceType="resource1", + Description="Description 1", + Risk="risk1", + RelatedUrl="url1", + Remediation={ + "Code": { + "CLI": "cli1", + "NativeIaC": "native1", + "Other": "other1", + "Terraform": "terraform1", + }, + "Recommendation": {"Text": "text1", "Url": "url1"}, + }, + Categories=["categoryone"], + DependsOn=["dependency1"], + RelatedTo=["related1"], + Notes="notes1", + AdditionalUrls=["https://example.com", "", "https://example2.com"], + Compliance=[], + ) + assert "AdditionalUrls cannot contain empty items" in str(exc_info.value) + + def test_additional_urls_invalid_whitespace_items(self): + """Test AdditionalUrls with whitespace-only items""" + with pytest.raises(ValidationError) as exc_info: + CheckMetadata( + Provider="aws", + CheckID="test_check", + CheckTitle="Test Check", + CheckType=["type1"], + ServiceName="test", + SubServiceName="subservice1", + ResourceIdTemplate="template1", + Severity="high", + ResourceType="resource1", + Description="Description 1", + Risk="risk1", + RelatedUrl="url1", + Remediation={ + "Code": { + "CLI": "cli1", + "NativeIaC": "native1", + "Other": "other1", + "Terraform": "terraform1", + }, + "Recommendation": {"Text": "text1", "Url": "url1"}, + }, + Categories=["categoryone"], + DependsOn=["dependency1"], + RelatedTo=["related1"], + Notes="notes1", + AdditionalUrls=["https://example.com", " ", "https://example2.com"], + Compliance=[], + ) + assert "AdditionalUrls cannot contain empty items" in str(exc_info.value) + + def test_additional_urls_invalid_duplicates(self): + """Test AdditionalUrls with duplicate items""" + with pytest.raises(ValidationError) as exc_info: + CheckMetadata( + Provider="aws", + CheckID="test_check", + CheckTitle="Test Check", + CheckType=["type1"], + ServiceName="test", + SubServiceName="subservice1", + ResourceIdTemplate="template1", + Severity="high", + ResourceType="resource1", + Description="Description 1", + Risk="risk1", + RelatedUrl="url1", + Remediation={ + "Code": { + "CLI": "cli1", + "NativeIaC": "native1", + "Other": "other1", + "Terraform": "terraform1", + }, + "Recommendation": {"Text": "text1", "Url": "url1"}, + }, + Categories=["categoryone"], + DependsOn=["dependency1"], + RelatedTo=["related1"], + Notes="notes1", + AdditionalUrls=[ + "https://example.com", + "https://example2.com", + "https://example.com", + ], + Compliance=[], + ) + assert "AdditionalUrls cannot contain duplicate items" in str(exc_info.value) + + def test_fields_with_explicit_empty_values(self): + """Test that RelatedUrl and AdditionalUrls can be set to explicit empty values""" + metadata = CheckMetadata( + Provider="aws", + CheckID="test_check_empty_fields", + CheckTitle="Test Check with Empty Fields", + CheckType=["type1"], + ServiceName="test", + SubServiceName="subservice1", + ResourceIdTemplate="template1", + Severity="high", + ResourceType="resource1", + Description="Description 1", + Risk="risk1", + RelatedUrl="", # Explicit empty string + Remediation={ + "Code": { + "CLI": "cli1", + "NativeIaC": "native1", + "Other": "other1", + "Terraform": "terraform1", + }, + "Recommendation": {"Text": "text1", "Url": "url1"}, + }, + Categories=["categoryone"], + DependsOn=["dependency1"], + RelatedTo=["related1"], + Notes="notes1", + AdditionalUrls=[], # Explicit empty list + Compliance=[], + ) + + # Assert that the fields are set to empty values + assert metadata.RelatedUrl == "" + assert metadata.AdditionalUrls == [] + + def test_fields_default_values(self): + """Test that RelatedUrl and AdditionalUrls use proper defaults when not provided""" + metadata = CheckMetadata( + Provider="aws", + CheckID="test_check_defaults", + CheckTitle="Test Check with Default Fields", + CheckType=["type1"], + ServiceName="test", + SubServiceName="subservice1", + ResourceIdTemplate="template1", + Severity="high", + ResourceType="resource1", + Description="Description 1", + Risk="risk1", + RelatedUrl="", + Remediation={ + "Code": { + "CLI": "cli1", + "NativeIaC": "native1", + "Other": "other1", + "Terraform": "terraform1", + }, + "Recommendation": {"Text": "text1", "Url": "url1"}, + }, + Categories=["categoryone"], + DependsOn=["dependency1"], + RelatedTo=["related1"], + Notes="notes1", + # AdditionalUrls not provided - should default to empty list via default_factory + Compliance=[], + ) + + # Assert that the fields use their default values + assert metadata.RelatedUrl == "" # Should default to empty string + assert metadata.AdditionalUrls == [] # Should default to empty list + + def test_related_url_none_fails(self): + """Test that setting RelatedUrl to None raises a ValidationError""" + with pytest.raises(ValidationError) as exc_info: + CheckMetadata( + Provider="aws", + CheckID="test_check_none_related_url", + CheckTitle="Test Check with None RelatedUrl", + CheckType=["type1"], + ServiceName="test", + SubServiceName="subservice1", + ResourceIdTemplate="template1", + Severity="high", + ResourceType="resource1", + Description="Description 1", + Risk="risk1", + RelatedUrl=None, # This should fail + Remediation={ + "Code": { + "CLI": "cli1", + "NativeIaC": "native1", + "Other": "other1", + "Terraform": "terraform1", + }, + "Recommendation": {"Text": "text1", "Url": "url1"}, + }, + Categories=["categoryone"], + DependsOn=["dependency1"], + RelatedTo=["related1"], + Notes="notes1", + AdditionalUrls=[], + Compliance=[], + ) + # Should contain a validation error for RelatedUrl + assert "RelatedUrl" in str(exc_info.value) + + def test_additional_urls_none_fails(self): + """Test that setting AdditionalUrls to None raises a ValidationError""" + with pytest.raises(ValidationError) as exc_info: + CheckMetadata( + Provider="aws", + CheckID="test_check_none_additional_urls", + CheckTitle="Test Check with None AdditionalUrls", + CheckType=["type1"], + ServiceName="test", + SubServiceName="subservice1", + ResourceIdTemplate="template1", + Severity="high", + ResourceType="resource1", + Description="Description 1", + Risk="risk1", + RelatedUrl="https://example.com", + Remediation={ + "Code": { + "CLI": "cli1", + "NativeIaC": "native1", + "Other": "other1", + "Terraform": "terraform1", + }, + "Recommendation": {"Text": "text1", "Url": "url1"}, + }, + Categories=["categoryone"], + DependsOn=["dependency1"], + RelatedTo=["related1"], + Notes="notes1", + AdditionalUrls=None, # This should fail + Compliance=[], + ) + # Should contain the validation error we set in the validator + assert "AdditionalUrls must be a list" in str(exc_info.value) + + def test_additional_urls_invalid_type_fails(self): + """Test that setting AdditionalUrls to non-list value raises a ValidationError""" + with pytest.raises(ValidationError) as exc_info: + CheckMetadata( + Provider="aws", + CheckID="test_check_invalid_additional_urls", + CheckTitle="Test Check with Invalid AdditionalUrls", + CheckType=["type1"], + ServiceName="test", + SubServiceName="subservice1", + ResourceIdTemplate="template1", + Severity="high", + ResourceType="resource1", + Description="Description 1", + Risk="risk1", + RelatedUrl="https://example.com", + Remediation={ + "Code": { + "CLI": "cli1", + "NativeIaC": "native1", + "Other": "other1", + "Terraform": "terraform1", + }, + "Recommendation": {"Text": "text1", "Url": "url1"}, + }, + Categories=["categoryone"], + DependsOn=["dependency1"], + RelatedTo=["related1"], + Notes="notes1", + AdditionalUrls="not_a_list", # This should fail + Compliance=[], + ) + # Should contain the validation error we set in the validator + assert "AdditionalUrls must be a list" in str(exc_info.value) From 987121051ba3b0c18c757ed20033c5e3f6907b3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20Arroba?= <19954079+cesararroba@users.noreply.github.com> Date: Tue, 2 Sep 2025 18:03:42 +0200 Subject: [PATCH 24/32] chore(sdk): comment push readme to dockerhub steps (#8628) --- .../sdk-build-lint-push-containers.yml | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/workflows/sdk-build-lint-push-containers.yml b/.github/workflows/sdk-build-lint-push-containers.yml index e17241eb46..591b07dc50 100644 --- a/.github/workflows/sdk-build-lint-push-containers.yml +++ b/.github/workflows/sdk-build-lint-push-containers.yml @@ -157,21 +157,21 @@ jobs: cache-from: type=gha cache-to: type=gha,mode=max - - name: Push README to Docker Hub (toniblyx) - uses: peter-evans/dockerhub-description@432a30c9e07499fd01da9f8a49f0faf9e0ca5b77 # v4.0.2 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - repository: ${{ env.DOCKER_HUB_REPOSITORY }}/${{ env.IMAGE_NAME }} - readme-filepath: ./README.md - - - name: Push README to Docker Hub (prowlercloud) - uses: peter-evans/dockerhub-description@432a30c9e07499fd01da9f8a49f0faf9e0ca5b77 # v4.0.2 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - repository: ${{ env.PROWLERCLOUD_DOCKERHUB_REPOSITORY }}/${{ env.PROWLERCLOUD_DOCKERHUB_IMAGE }} - readme-filepath: ./README.md +# - name: Push README to Docker Hub (toniblyx) +# uses: peter-evans/dockerhub-description@432a30c9e07499fd01da9f8a49f0faf9e0ca5b77 # v4.0.2 +# with: +# username: ${{ secrets.DOCKERHUB_USERNAME }} +# password: ${{ secrets.DOCKERHUB_TOKEN }} +# repository: ${{ env.DOCKER_HUB_REPOSITORY }}/${{ env.IMAGE_NAME }} +# readme-filepath: ./README.md +# +# - name: Push README to Docker Hub (prowlercloud) +# uses: peter-evans/dockerhub-description@432a30c9e07499fd01da9f8a49f0faf9e0ca5b77 # v4.0.2 +# with: +# username: ${{ secrets.DOCKERHUB_USERNAME }} +# password: ${{ secrets.DOCKERHUB_TOKEN }} +# repository: ${{ env.PROWLERCLOUD_DOCKERHUB_REPOSITORY }}/${{ env.PROWLERCLOUD_DOCKERHUB_IMAGE }} +# readme-filepath: ./README.md dispatch-action: needs: container-build-push From cdf0292bbc294d16270b8195664c70ec9e484e25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20Mart=C3=ADn?= Date: Wed, 3 Sep 2025 10:59:07 +0200 Subject: [PATCH 25/32] feat(jira): add get_metadata (#8630) --- prowler/CHANGELOG.md | 18 +- prowler/lib/outputs/jira/jira.py | 149 ++++++++-- tests/lib/outputs/jira/jira_test.py | 436 +++++++++++++++++++++++++--- 3 files changed, 520 insertions(+), 83 deletions(-) diff --git a/prowler/CHANGELOG.md b/prowler/CHANGELOG.md index 484f4cf41c..1726eabc14 100644 --- a/prowler/CHANGELOG.md +++ b/prowler/CHANGELOG.md @@ -4,23 +4,9 @@ All notable changes to the **Prowler SDK** are documented in this file. ## [v5.12.0] (Prowler UNRELEASED) ### Added - -### Changed - -### Fixed - ---- - -## [v5.11.1] (Prowler UNRELEASED) - -### Fixed - ---- - -## [v5.12.0] (Prowler UNRELEASED) - -### Added +- Get Jira Project's metadata [(#8630)](https://github.com/prowler-cloud/prowler/pull/8630) - Add more fields for the Jira ticket and handle custom fields errors [(#8601)](https://github.com/prowler-cloud/prowler/pull/8601) +- Get Jira projects from test_connection [(#8634)](https://github.com/prowler-cloud/prowler/pull/8634) ### Changed diff --git a/prowler/lib/outputs/jira/jira.py b/prowler/lib/outputs/jira/jira.py index ff3ecf41cc..93ce81f9b0 100644 --- a/prowler/lib/outputs/jira/jira.py +++ b/prowler/lib/outputs/jira/jira.py @@ -1,5 +1,6 @@ import base64 import os +from dataclasses import dataclass from datetime import datetime, timedelta from typing import Dict @@ -35,6 +36,17 @@ from prowler.lib.outputs.jira.exceptions.exceptions import ( from prowler.providers.common.models import Connection +@dataclass +class JiraConnection(Connection): + """ + Represents a Jira connection object. + Attributes: + projects (dict): Dictionary of projects in Jira. + """ + + projects: dict = None + + class Jira: """ Jira class to interact with the Jira API @@ -463,7 +475,7 @@ class Jira: api_token: str = None, domain: str = None, raise_on_exception: bool = True, - ) -> Connection: + ) -> JiraConnection: """Test the connection to Jira Args: @@ -476,7 +488,7 @@ class Jira: - raise_on_exception: Whether to raise an exception or not Returns: - - Connection: The connection object + - JiraConnection: The connection object Raises: - JiraGetCloudIDNoResourcesError: No resources were found in Jira when getting the cloud id @@ -484,6 +496,8 @@ class Jira: - JiraGetCloudIDError: Failed to get the cloud ID from Jira - JiraAuthenticationError: Failed to authenticate - JiraTestConnectionError: Failed to test the connection + - JiraNoProjectsError: No projects found in Jira + - JiraGetProjectsResponseError: Failed to get projects from Jira, response code did not match 200 """ try: jira = Jira( @@ -494,60 +508,51 @@ class Jira: api_token=api_token, domain=domain, ) - access_token = jira.get_access_token() + projects = jira.get_projects() - if not access_token: - return ValueError("Failed to get access token") - - if jira.using_basic_auth: - headers = {"Authorization": f"Basic {access_token}"} - else: - headers = {"Authorization": f"Bearer {access_token}"} - - response = requests.get( - f"https://api.atlassian.com/ex/jira/{jira.cloud_id}/rest/api/3/myself", - headers=headers, - ) - - if response.status_code == 200: - return Connection(is_connected=True) - else: - return Connection(is_connected=False, error=response.json()) - except JiraGetCloudIDNoResourcesError as no_resources_error: + return JiraConnection(is_connected=True, projects=projects) + except JiraNoProjectsError as no_projects_error: logger.error( - f"{no_resources_error.__class__.__name__}[{no_resources_error.__traceback__.tb_lineno}]: {no_resources_error}" + f"{no_projects_error.__class__.__name__}[{no_projects_error.__traceback__.tb_lineno}]: {no_projects_error}" ) if raise_on_exception: - raise no_resources_error - return Connection(error=no_resources_error) + raise no_projects_error + return JiraConnection(error=no_projects_error) except JiraGetCloudIDResponseError as response_error: logger.error( f"{response_error.__class__.__name__}[{response_error.__traceback__.tb_lineno}]: {response_error}" ) if raise_on_exception: raise response_error - return Connection(error=response_error) + return JiraConnection(error=response_error) except JiraGetCloudIDError as cloud_id_error: logger.error( f"{cloud_id_error.__class__.__name__}[{cloud_id_error.__traceback__.tb_lineno}]: {cloud_id_error}" ) if raise_on_exception: raise cloud_id_error - return Connection(error=cloud_id_error) + return JiraConnection(error=cloud_id_error) except JiraAuthenticationError as auth_error: logger.error( f"{auth_error.__class__.__name__}[{auth_error.__traceback__.tb_lineno}]: {auth_error}" ) if raise_on_exception: raise auth_error - return Connection(error=auth_error) + return JiraConnection(error=auth_error) except JiraBasicAuthError as basic_auth_error: logger.error( f"{basic_auth_error.__class__.__name__}[{basic_auth_error.__traceback__.tb_lineno}]: {basic_auth_error}" ) if raise_on_exception: raise basic_auth_error - return Connection(error=basic_auth_error) + return JiraConnection(error=basic_auth_error) + except JiraGetProjectsResponseError as projects_response_error: + logger.error( + f"{projects_response_error.__class__.__name__}[{projects_response_error.__traceback__.tb_lineno}]: {projects_response_error}" + ) + if raise_on_exception: + raise projects_response_error + return JiraConnection(error=projects_response_error) except Exception as error: logger.error(f"Failed to test connection: {error}") if raise_on_exception: @@ -555,7 +560,7 @@ class Jira: message="Failed to test connection on the Jira integration", file=os.path.basename(__file__), ) - return Connection(is_connected=False, error=error) + return JiraConnection(is_connected=False, error=error) def get_projects(self) -> Dict[str, str]: """Get the projects from Jira @@ -682,6 +687,92 @@ class Jira: file=os.path.basename(__file__), ) + def get_metadata(self) -> dict: + """Get the metadata from Jira + + Returns: + - dict: The projects and issue types from Jira as a dictionary, the projects format is {"KEY": {"name": "NAME", "issue_types": ["ISSUE_TYPE_1", "ISSUE_TYPE_2"]}} + """ + try: + access_token = self.get_access_token() + + if not access_token: + return ValueError("Failed to get access token") + + if self._using_basic_auth: + headers = {"Authorization": f"Basic {access_token}"} + else: + headers = {"Authorization": f"Bearer {access_token}"} + + response = requests.get( + f"https://api.atlassian.com/ex/jira/{self.cloud_id}/rest/api/3/project", + headers=headers, + ) + if response.status_code == 200: + projects_data = {} + projects_list = response.json() + if not projects_list: + logger.error("No projects found") + raise JiraNoProjectsError( + message="No projects found in Jira", + file=os.path.basename(__file__), + ) + else: + for project in projects_list: + project_response = requests.get( + f"https://api.atlassian.com/ex/jira/{self.cloud_id}/rest/api/3/issue/createmeta?projectKeys={project['key']}&expand=projects.issuetypes.fields", + headers=headers, + ) + if project_response.status_code == 200: + project_metadata = project_response.json() + if len(project_metadata["projects"]) == 0: + logger.warning( + f"No project metadata found for project {project['key']}, setting empty issue types" + ) + issue_types = [] + else: + issue_types = [ + issue_type["name"] + for issue_type in project_metadata["projects"][0][ + "issuetypes" + ] + ] + else: + raise JiraGetAvailableIssueTypesResponseError( + message="Failed to get available issue types from Jira", + file=os.path.basename(__file__), + ) + projects_data[project["key"]] = { + "name": project["name"], + "issue_types": issue_types, + } + return projects_data + else: + logger.error( + f"Failed to get projects: {response.status_code} - {response.text}" + ) + raise JiraGetProjectsResponseError( + message="Failed to get projects from Jira", + file=os.path.basename(__file__), + ) + except JiraNoProjectsError as no_projects_error: + raise no_projects_error + except JiraGetAvailableIssueTypesResponseError as issue_types_error: + raise JiraGetProjectsError( + message=f"Failed to get projects and issue types from Jira: {issue_types_error}", + file=os.path.basename(__file__), + ) + except JiraRefreshTokenError as refresh_error: + raise refresh_error + except JiraRefreshTokenResponseError as response_error: + raise response_error + except Exception as e: + logger.error(f"Failed to get projects: {e}") + raise JiraGetProjectsError( + message="Failed to get projects from Jira", + file=os.path.basename(__file__), + ) + @staticmethod def get_color_from_status(status: str) -> str: """Get the color from the status diff --git a/tests/lib/outputs/jira/jira_test.py b/tests/lib/outputs/jira/jira_test.py index 608dfc47a5..a9fee84365 100644 --- a/tests/lib/outputs/jira/jira_test.py +++ b/tests/lib/outputs/jira/jira_test.py @@ -13,9 +13,11 @@ from prowler.lib.outputs.jira.exceptions.exceptions import ( JiraGetAvailableIssueTypesError, JiraGetCloudIDError, JiraGetProjectsError, + JiraGetProjectsResponseError, JiraNoProjectsError, JiraRefreshTokenError, JiraRequiredCustomFieldsError, + JiraTestConnectionError, ) from prowler.lib.outputs.jira.jira import Jira @@ -293,25 +295,19 @@ class TestJiraIntegration: with pytest.raises(JiraRefreshTokenError): self.jira_integration.refresh_access_token() - @patch.object(Jira, "get_access_token", return_value="valid_access_token") - @patch.object(Jira, "get_cloud_id", return_value="test_cloud_id") @patch.object(Jira, "get_auth", return_value=None) - @patch("prowler.lib.outputs.jira.jira.requests.get") - def test_test_connection_successful( - self, mock_get, mock_get_cloud_id, mock_get_auth, mock_get_access_token - ): - """Test that a successful connection returns an active Connection object.""" + @patch.object( + Jira, + "get_projects", + return_value={"PROJ1": "Project One", "PROJ2": "Project Two"}, + ) + def test_test_connection_successful(self, mock_get_projects, mock_get_auth): + """Test that a successful connection returns an active Connection object with projects.""" # To disable vulture - mock_get_cloud_id = mock_get_cloud_id + mock_get_projects = mock_get_projects mock_get_auth = mock_get_auth - mock_get_access_token = mock_get_access_token - mock_response = MagicMock() - mock_response.status_code = 200 - mock_response.json.return_value = {"id": "test_user_id"} - mock_get.return_value = mock_response - - connection = self.jira_integration.test_connection( + connection = Jira.test_connection( redirect_uri=self.redirect_uri, client_id=self.client_id, client_secret=self.client_secret, @@ -319,26 +315,23 @@ class TestJiraIntegration: assert connection.is_connected assert connection.error is None + assert connection.projects == {"PROJ1": "Project One", "PROJ2": "Project Two"} - @patch.object(Jira, "get_access_token", return_value="valid_access_token") - @patch.object(Jira, "get_cloud_id", return_value="test_cloud_id") @patch.object(Jira, "get_basic_auth", return_value=None) - @patch("prowler.lib.outputs.jira.jira.requests.get") + @patch.object( + Jira, + "get_projects", + return_value={"PROJ1": "Project One", "PROJ2": "Project Two"}, + ) def test_test_connection_successful_basic_auth( - self, mock_get, mock_get_cloud_id, mock_get_auth, mock_get_access_token + self, mock_get_projects, mock_get_basic_auth ): - """Test that a successful connection returns an active Connection object.""" + """Test that a successful connection returns an active Connection object with projects.""" # To disable vulture - mock_get_cloud_id = mock_get_cloud_id - mock_get_auth = mock_get_auth - mock_get_access_token = mock_get_access_token + mock_get_projects = mock_get_projects + mock_get_basic_auth = mock_get_basic_auth - mock_response = MagicMock() - mock_response.status_code = 200 - mock_response.json.return_value = {"id": "test_user_id"} - mock_get.return_value = mock_response - - connection = self.jira_integration_basic_auth.test_connection( + connection = Jira.test_connection( user_mail=self.user_mail, api_token=self.api_token, domain=self.domain, @@ -346,19 +339,20 @@ class TestJiraIntegration: assert connection.is_connected assert connection.error is None + assert connection.projects == {"PROJ1": "Project One", "PROJ2": "Project Two"} @patch.object( Jira, - "get_access_token", + "get_auth", side_effect=JiraAuthenticationError("Failed to authenticate with Jira"), ) - def test_test_connection_failed(self, mock_get_access_token): + def test_test_connection_failed(self, mock_get_auth): """Test that a failed connection raises JiraAuthenticationError.""" # To disable vulture - mock_get_access_token = mock_get_access_token + mock_get_auth = mock_get_auth with pytest.raises(JiraAuthenticationError): - self.jira_integration.test_connection( + Jira.test_connection( redirect_uri=self.redirect_uri, client_id=self.client_id, client_secret=self.client_secret, @@ -366,21 +360,120 @@ class TestJiraIntegration: @patch.object( Jira, - "get_cloud_id", + "get_basic_auth", side_effect=JiraBasicAuthError("Failed to authenticate with Jira"), ) - def test_test_connection_failed_basic_auth(self, mock_get_access_token): - """Test that a failed connection raises JiraAuthenticationError.""" + def test_test_connection_failed_basic_auth(self, mock_get_basic_auth): + """Test that a failed connection raises JiraBasicAuthError.""" # To disable vulture - mock_get_access_token = mock_get_access_token + mock_get_basic_auth = mock_get_basic_auth with pytest.raises(JiraBasicAuthError): - self.jira_integration_basic_auth.test_connection( + Jira.test_connection( user_mail=self.user_mail, api_token=self.api_token, domain=self.domain, ) + @patch.object(Jira, "get_auth", return_value=None) + @patch.object( + Jira, "get_projects", side_effect=JiraNoProjectsError("No projects found") + ) + def test_test_connection_no_projects_found(self, mock_get_projects, mock_get_auth): + """Test that test_connection raises JiraNoProjectsError when no projects are found.""" + # To disable vulture + mock_get_projects = mock_get_projects + mock_get_auth = mock_get_auth + + with pytest.raises(JiraNoProjectsError): + Jira.test_connection( + redirect_uri=self.redirect_uri, + client_id=self.client_id, + client_secret=self.client_secret, + ) + + @patch.object(Jira, "get_auth", return_value=None) + @patch.object( + Jira, + "get_projects", + side_effect=JiraGetProjectsResponseError("Projects request failed"), + ) + def test_test_connection_projects_request_error( + self, mock_get_projects, mock_get_auth + ): + """Test that test_connection raises JiraGetProjectsResponseError when projects request fails.""" + # To disable vulture + mock_get_projects = mock_get_projects + mock_get_auth = mock_get_auth + + with pytest.raises(JiraGetProjectsResponseError): + Jira.test_connection( + redirect_uri=self.redirect_uri, + client_id=self.client_id, + client_secret=self.client_secret, + ) + + @patch.object(Jira, "get_auth", return_value=None) + @patch.object( + Jira, "get_projects", side_effect=JiraNoProjectsError("No projects found") + ) + def test_test_connection_no_projects_found_no_exception( + self, mock_get_projects, mock_get_auth + ): + """Test that test_connection returns error connection object when no projects found and raise_on_exception=False.""" + # To disable vulture + mock_get_projects = mock_get_projects + mock_get_auth = mock_get_auth + + connection = Jira.test_connection( + redirect_uri=self.redirect_uri, + client_id=self.client_id, + client_secret=self.client_secret, + raise_on_exception=False, + ) + + assert not connection.is_connected + assert isinstance(connection.error, JiraNoProjectsError) + + @patch.object(Jira, "get_auth", return_value=None) + @patch.object( + Jira, + "get_projects", + side_effect=JiraGetProjectsResponseError("Projects request failed"), + ) + def test_test_connection_projects_request_error_no_exception( + self, mock_get_projects, mock_get_auth + ): + """Test that test_connection returns error connection object when projects request fails and raise_on_exception=False.""" + # To disable vulture + mock_get_projects = mock_get_projects + mock_get_auth = mock_get_auth + + connection = Jira.test_connection( + redirect_uri=self.redirect_uri, + client_id=self.client_id, + client_secret=self.client_secret, + raise_on_exception=False, + ) + + assert not connection.is_connected + assert isinstance(connection.error, JiraGetProjectsResponseError) + + @patch.object(Jira, "get_auth", return_value=None) + @patch.object(Jira, "get_projects", side_effect=Exception("Unexpected error")) + def test_test_connection_unexpected_error(self, mock_get_projects, mock_get_auth): + """Test that test_connection raises JiraTestConnectionError on unexpected exceptions.""" + # To disable vulture + mock_get_projects = mock_get_projects + mock_get_auth = mock_get_auth + + with pytest.raises(JiraTestConnectionError): + Jira.test_connection( + redirect_uri=self.redirect_uri, + client_id=self.client_id, + client_secret=self.client_secret, + ) + @patch.object(Jira, "get_access_token", return_value="valid_access_token") @patch.object( Jira, "cloud_id", new_callable=PropertyMock, return_value="test_cloud_id" @@ -903,3 +996,270 @@ class TestJiraIntegration: def test_get_severity_color(self, severity, expected_color): """Test that get_severity_color returns the correct color for a severity.""" assert self.jira_integration.get_severity_color(severity) == expected_color + + @patch.object(Jira, "get_access_token", return_value="valid_access_token") + @patch.object( + Jira, "cloud_id", new_callable=PropertyMock, return_value="test_cloud_id" + ) + @patch("prowler.lib.outputs.jira.jira.requests.get") + def test_get_projects_and_issue_types_successful( + self, mock_get, mock_cloud_id, mock_get_access_token + ): + """Test successful retrieval of metadata associated to projects from Jira.""" + # To disable vulture + mock_cloud_id = mock_cloud_id + mock_get_access_token = mock_get_access_token + + # Mock the projects response + mock_projects_response = MagicMock() + mock_projects_response.status_code = 200 + mock_projects_response.json.return_value = [ + {"key": "PROJ1", "name": "Project One"}, + {"key": "PROJ2", "name": "Project Two"}, + ] + + # Mock the issue types responses + mock_issue_types_response_1 = MagicMock() + mock_issue_types_response_1.status_code = 200 + mock_issue_types_response_1.json.return_value = { + "projects": [ + { + "issuetypes": [ + {"name": "Bug", "id": "1"}, + {"name": "Task", "id": "2"}, + ] + } + ] + } + + mock_issue_types_response_2 = MagicMock() + mock_issue_types_response_2.status_code = 200 + mock_issue_types_response_2.json.return_value = { + "projects": [ + { + "issuetypes": [ + {"name": "Story", "id": "3"}, + {"name": "Epic", "id": "4"}, + ] + } + ] + } + + # Configure side_effect to return different responses for different calls + mock_get.side_effect = [ + mock_projects_response, + mock_issue_types_response_1, + mock_issue_types_response_2, + ] + + jira_metadata = self.jira_integration.get_metadata() + + expected_result = { + "PROJ1": { + "name": "Project One", + "issue_types": ["Bug", "Task"], + }, + "PROJ2": { + "name": "Project Two", + "issue_types": ["Story", "Epic"], + }, + } + + assert jira_metadata == expected_result + + # Verify the correct number of calls were made + assert mock_get.call_count == 3 + + # Verify the URLs called + calls = mock_get.call_args_list + assert ( + calls[0][0][0] + == "https://api.atlassian.com/ex/jira/test_cloud_id/rest/api/3/project" + ) + assert "projectKeys=PROJ1" in calls[1][0][0] + assert "projectKeys=PROJ2" in calls[2][0][0] + + @patch.object(Jira, "get_access_token", return_value="valid_access_token") + @patch.object( + Jira, "cloud_id", new_callable=PropertyMock, return_value="test_cloud_id" + ) + @patch("prowler.lib.outputs.jira.jira.requests.get") + def test_get_projects_and_issue_types_no_projects_found( + self, mock_get, mock_cloud_id, mock_get_access_token + ): + """Test that get_metadata raises JiraNoProjectsError when no projects are found.""" + # To disable vulture + mock_cloud_id = mock_cloud_id + mock_get_access_token = mock_get_access_token + + mock_response = MagicMock() + mock_response.status_code = 200 + mock_response.json.return_value = [] + mock_get.return_value = mock_response + + with pytest.raises(JiraNoProjectsError): + self.jira_integration.get_metadata() + + @patch.object(Jira, "get_access_token", return_value="valid_access_token") + @patch.object( + Jira, "cloud_id", new_callable=PropertyMock, return_value="test_cloud_id" + ) + @patch("prowler.lib.outputs.jira.jira.requests.get") + def test_get_projects_and_issue_types_projects_response_error( + self, mock_get, mock_cloud_id, mock_get_access_token + ): + """Test that get_metadata raises JiraGetProjectsError when projects request fails.""" + # To disable vulture + mock_cloud_id = mock_cloud_id + mock_get_access_token = mock_get_access_token + + mock_response = MagicMock() + mock_response.status_code = 404 + mock_response.text = "Not Found" + mock_get.return_value = mock_response + + with pytest.raises(JiraGetProjectsError): + self.jira_integration.get_metadata() + + @patch.object(Jira, "get_access_token", return_value="valid_access_token") + @patch.object( + Jira, "cloud_id", new_callable=PropertyMock, return_value="test_cloud_id" + ) + @patch("prowler.lib.outputs.jira.jira.requests.get") + def test_get_projects_and_issue_types_issue_types_response_error( + self, mock_get, mock_cloud_id, mock_get_access_token + ): + """Test that get_metadata raises JiraGetProjectsError when issue types request fails.""" + # To disable vulture + mock_cloud_id = mock_cloud_id + mock_get_access_token = mock_get_access_token + + # Mock successful projects response + mock_projects_response = MagicMock() + mock_projects_response.status_code = 200 + mock_projects_response.json.return_value = [ + {"key": "PROJ1", "name": "Project One"} + ] + + # Mock failed issue types response + mock_issue_types_response = MagicMock() + mock_issue_types_response.status_code = 404 + + mock_get.side_effect = [mock_projects_response, mock_issue_types_response] + + with pytest.raises(JiraGetProjectsError): + self.jira_integration.get_metadata() + + @patch.object(Jira, "get_access_token", return_value="valid_access_token") + @patch.object( + Jira, "cloud_id", new_callable=PropertyMock, return_value="test_cloud_id" + ) + @patch("prowler.lib.outputs.jira.jira.requests.get") + def test_get_projects_and_issue_types_no_project_metadata( + self, mock_get, mock_cloud_id, mock_get_access_token + ): + """Test that get_metadata returns empty issue_types when project metadata is empty.""" + # To disable vulture + mock_cloud_id = mock_cloud_id + mock_get_access_token = mock_get_access_token + + # Mock successful projects response + mock_projects_response = MagicMock() + mock_projects_response.status_code = 200 + mock_projects_response.json.return_value = [ + {"key": "PROJ1", "name": "Project One"} + ] + + # Mock issue types response with empty projects list + mock_issue_types_response = MagicMock() + mock_issue_types_response.status_code = 200 + mock_issue_types_response.json.return_value = {"projects": []} + + mock_get.side_effect = [mock_projects_response, mock_issue_types_response] + + projects_and_issue_types = self.jira_integration.get_metadata() + + expected_result = { + "PROJ1": { + "name": "Project One", + "issue_types": [], + } + } + + assert projects_and_issue_types == expected_result + + @patch.object( + Jira, + "get_access_token", + side_effect=JiraRefreshTokenError("Failed to refresh the access token"), + ) + def test_get_projects_and_issue_types_refresh_token_error( + self, mock_get_access_token + ): + """Test that get_metadata raises JiraRefreshTokenError when refreshing the token fails.""" + # To disable vulture + mock_get_access_token = mock_get_access_token + + with pytest.raises(JiraRefreshTokenError): + self.jira_integration.get_metadata() + + @patch.object(Jira, "get_access_token", return_value="valid_access_token") + @patch.object( + Jira, "cloud_id", new_callable=PropertyMock, return_value="test_cloud_id" + ) + @patch("prowler.lib.outputs.jira.jira.requests.get") + def test_get_projects_and_issue_types_mixed_scenarios( + self, mock_get, mock_cloud_id, mock_get_access_token + ): + """Test get_metadata with mixed success and empty metadata scenarios.""" + # To disable vulture + mock_cloud_id = mock_cloud_id + mock_get_access_token = mock_get_access_token + + # Mock projects response with two projects + mock_projects_response = MagicMock() + mock_projects_response.status_code = 200 + mock_projects_response.json.return_value = [ + {"key": "PROJ1", "name": "Project One"}, + {"key": "PROJ2", "name": "Project Two"}, + ] + + # Mock successful issue types response for first project + mock_issue_types_response_1 = MagicMock() + mock_issue_types_response_1.status_code = 200 + mock_issue_types_response_1.json.return_value = { + "projects": [ + { + "issuetypes": [ + {"name": "Bug", "id": "1"}, + {"name": "Task", "id": "2"}, + ] + } + ] + } + + # Mock empty issue types response for second project + mock_issue_types_response_2 = MagicMock() + mock_issue_types_response_2.status_code = 200 + mock_issue_types_response_2.json.return_value = {"projects": []} + + mock_get.side_effect = [ + mock_projects_response, + mock_issue_types_response_1, + mock_issue_types_response_2, + ] + + projects_and_issue_types = self.jira_integration.get_metadata() + + expected_result = { + "PROJ1": { + "name": "Project One", + "issue_types": ["Bug", "Task"], + }, + "PROJ2": { + "name": "Project Two", + "issue_types": [], + }, + } + + assert projects_and_issue_types == expected_result From 3c819f8875f190ac842a3627d098785f7df9474e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20Mart=C3=ADn?= Date: Wed, 3 Sep 2025 12:54:50 +0200 Subject: [PATCH 26/32] chore(changelog): update with latest changes (#8636) --- prowler/CHANGELOG.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/prowler/CHANGELOG.md b/prowler/CHANGELOG.md index 1726eabc14..ba4722b335 100644 --- a/prowler/CHANGELOG.md +++ b/prowler/CHANGELOG.md @@ -7,6 +7,7 @@ All notable changes to the **Prowler SDK** are documented in this file. - Get Jira Project's metadata [(#8630)](https://github.com/prowler-cloud/prowler/pull/8630) - Add more fields for the Jira ticket and handle custom fields errors [(#8601)](https://github.com/prowler-cloud/prowler/pull/8601) - Get Jira projects from test_connection [(#8634)](https://github.com/prowler-cloud/prowler/pull/8634) +- `AdditionalUrls` field in CheckMetadata [(#8590)](https://github.com/prowler-cloud/prowler/pull/8590) ### Changed @@ -20,13 +21,6 @@ All notable changes to the **Prowler SDK** are documented in this file. --- -## [v5.12.0] (Prowler UNRELEASED) - -### Added -- `AdditionalUrls` field in CheckMetadata [(#8590)](https://github.com/prowler-cloud/prowler/pull/8590) - ---- - ## [v5.11.0] (Prowler v5.11.0) ### Added From a3b0bb6d4b328fd17eb6c755aee88149b94b98b9 Mon Sep 17 00:00:00 2001 From: Hugo Pereira Brito <101209179+HugoPBrito@users.noreply.github.com> Date: Wed, 3 Sep 2025 15:49:06 +0200 Subject: [PATCH 27/32] refactor(models): rename `AdditionalUrls` to `AdditionalURLs` (#8639) --- prowler/CHANGELOG.md | 1 + prowler/lib/check/models.py | 14 ++++---- tests/lib/check/models_test.py | 66 +++++++++++++++++----------------- 3 files changed, 41 insertions(+), 40 deletions(-) diff --git a/prowler/CHANGELOG.md b/prowler/CHANGELOG.md index ba4722b335..cd7785d820 100644 --- a/prowler/CHANGELOG.md +++ b/prowler/CHANGELOG.md @@ -12,6 +12,7 @@ All notable changes to the **Prowler SDK** are documented in this file. ### Changed ### Fixed +- Renamed `AdditionalUrls` to `AdditionalURLs` field in CheckMetadata [(#8639)](https://github.com/prowler-cloud/prowler/pull/8639) --- diff --git a/prowler/lib/check/models.py b/prowler/lib/check/models.py index 547dc1d94b..02813edc76 100644 --- a/prowler/lib/check/models.py +++ b/prowler/lib/check/models.py @@ -85,7 +85,7 @@ class CheckMetadata(BaseModel): Risk (str): The risk associated with the check. RelatedUrl (str): The URL related to the check. Remediation (Remediation): The remediation steps for the check. - AdditionalUrls (list[str]): Additional URLs related to the check. Defaults to an empty list. + AdditionalURLs (list[str]): Additional URLs related to the check. Defaults to an empty list. Categories (list[str]): The categories of the check. DependsOn (list[str]): The dependencies of the check. RelatedTo (list[str]): The related checks. @@ -98,7 +98,7 @@ class CheckMetadata(BaseModel): valid_severity(severity): Validator function to validate the severity of the check. valid_cli_command(remediation): Validator function to validate the CLI command is not an URL. valid_resource_type(resource_type): Validator function to validate the resource type is not empty. - validate_additional_urls(additional_urls): Validator function to ensure AdditionalUrls contains no duplicates. + validate_additional_urls(additional_urls): Validator function to ensure AdditionalURLs contains no duplicates. """ Provider: str @@ -115,7 +115,7 @@ class CheckMetadata(BaseModel): Risk: str RelatedUrl: str Remediation: Remediation - AdditionalUrls: list[str] = Field(default_factory=list) + AdditionalURLs: list[str] = Field(default_factory=list) Categories: list[str] DependsOn: list[str] RelatedTo: list[str] @@ -181,16 +181,16 @@ class CheckMetadata(BaseModel): return check_id - @validator("AdditionalUrls", pre=True, always=True) + @validator("AdditionalURLs", pre=True, always=True) def validate_additional_urls(cls, additional_urls): if not isinstance(additional_urls, list): - raise ValueError("AdditionalUrls must be a list") + raise ValueError("AdditionalURLs must be a list") if any(not url or not url.strip() for url in additional_urls): - raise ValueError("AdditionalUrls cannot contain empty items") + raise ValueError("AdditionalURLs cannot contain empty items") if len(additional_urls) != len(set(additional_urls)): - raise ValueError("AdditionalUrls cannot contain duplicate items") + raise ValueError("AdditionalURLs cannot contain duplicate items") return additional_urls diff --git a/tests/lib/check/models_test.py b/tests/lib/check/models_test.py index 341d696ee3..a992da946c 100644 --- a/tests/lib/check/models_test.py +++ b/tests/lib/check/models_test.py @@ -330,7 +330,7 @@ class TestCheckMetada: assert result == set() def test_additional_urls_valid_empty_list(self): - """Test AdditionalUrls with valid empty list (default)""" + """Test AdditionalURLs with valid empty list (default)""" metadata = CheckMetadata( Provider="aws", CheckID="test_check", @@ -357,13 +357,13 @@ class TestCheckMetada: DependsOn=["dependency1"], RelatedTo=["related1"], Notes="notes1", - AdditionalUrls=[], + AdditionalURLs=[], Compliance=[], ) - assert metadata.AdditionalUrls == [] + assert metadata.AdditionalURLs == [] def test_additional_urls_valid_with_urls(self): - """Test AdditionalUrls with valid URLs""" + """Test AdditionalURLs with valid URLs""" valid_urls = [ "https://example.com/doc1", "https://example.com/doc2", @@ -395,13 +395,13 @@ class TestCheckMetada: DependsOn=["dependency1"], RelatedTo=["related1"], Notes="notes1", - AdditionalUrls=valid_urls, + AdditionalURLs=valid_urls, Compliance=[], ) - assert metadata.AdditionalUrls == valid_urls + assert metadata.AdditionalURLs == valid_urls def test_additional_urls_invalid_not_list(self): - """Test AdditionalUrls with non-list value""" + """Test AdditionalURLs with non-list value""" with pytest.raises(ValidationError) as exc_info: CheckMetadata( Provider="aws", @@ -429,13 +429,13 @@ class TestCheckMetada: DependsOn=["dependency1"], RelatedTo=["related1"], Notes="notes1", - AdditionalUrls="not_a_list", + AdditionalURLs="not_a_list", Compliance=[], ) - assert "AdditionalUrls must be a list" in str(exc_info.value) + assert "AdditionalURLs must be a list" in str(exc_info.value) def test_additional_urls_invalid_empty_items(self): - """Test AdditionalUrls with empty string items""" + """Test AdditionalURLs with empty string items""" with pytest.raises(ValidationError) as exc_info: CheckMetadata( Provider="aws", @@ -463,13 +463,13 @@ class TestCheckMetada: DependsOn=["dependency1"], RelatedTo=["related1"], Notes="notes1", - AdditionalUrls=["https://example.com", "", "https://example2.com"], + AdditionalURLs=["https://example.com", "", "https://example2.com"], Compliance=[], ) - assert "AdditionalUrls cannot contain empty items" in str(exc_info.value) + assert "AdditionalURLs cannot contain empty items" in str(exc_info.value) def test_additional_urls_invalid_whitespace_items(self): - """Test AdditionalUrls with whitespace-only items""" + """Test AdditionalURLs with whitespace-only items""" with pytest.raises(ValidationError) as exc_info: CheckMetadata( Provider="aws", @@ -497,13 +497,13 @@ class TestCheckMetada: DependsOn=["dependency1"], RelatedTo=["related1"], Notes="notes1", - AdditionalUrls=["https://example.com", " ", "https://example2.com"], + AdditionalURLs=["https://example.com", " ", "https://example2.com"], Compliance=[], ) - assert "AdditionalUrls cannot contain empty items" in str(exc_info.value) + assert "AdditionalURLs cannot contain empty items" in str(exc_info.value) def test_additional_urls_invalid_duplicates(self): - """Test AdditionalUrls with duplicate items""" + """Test AdditionalURLs with duplicate items""" with pytest.raises(ValidationError) as exc_info: CheckMetadata( Provider="aws", @@ -531,17 +531,17 @@ class TestCheckMetada: DependsOn=["dependency1"], RelatedTo=["related1"], Notes="notes1", - AdditionalUrls=[ + AdditionalURLs=[ "https://example.com", "https://example2.com", "https://example.com", ], Compliance=[], ) - assert "AdditionalUrls cannot contain duplicate items" in str(exc_info.value) + assert "AdditionalURLs cannot contain duplicate items" in str(exc_info.value) def test_fields_with_explicit_empty_values(self): - """Test that RelatedUrl and AdditionalUrls can be set to explicit empty values""" + """Test that RelatedUrl and AdditionalURLs can be set to explicit empty values""" metadata = CheckMetadata( Provider="aws", CheckID="test_check_empty_fields", @@ -568,16 +568,16 @@ class TestCheckMetada: DependsOn=["dependency1"], RelatedTo=["related1"], Notes="notes1", - AdditionalUrls=[], # Explicit empty list + AdditionalURLs=[], # Explicit empty list Compliance=[], ) # Assert that the fields are set to empty values assert metadata.RelatedUrl == "" - assert metadata.AdditionalUrls == [] + assert metadata.AdditionalURLs == [] def test_fields_default_values(self): - """Test that RelatedUrl and AdditionalUrls use proper defaults when not provided""" + """Test that RelatedUrl and AdditionalURLs use proper defaults when not provided""" metadata = CheckMetadata( Provider="aws", CheckID="test_check_defaults", @@ -604,13 +604,13 @@ class TestCheckMetada: DependsOn=["dependency1"], RelatedTo=["related1"], Notes="notes1", - # AdditionalUrls not provided - should default to empty list via default_factory + # AdditionalURLs not provided - should default to empty list via default_factory Compliance=[], ) # Assert that the fields use their default values assert metadata.RelatedUrl == "" # Should default to empty string - assert metadata.AdditionalUrls == [] # Should default to empty list + assert metadata.AdditionalURLs == [] # Should default to empty list def test_related_url_none_fails(self): """Test that setting RelatedUrl to None raises a ValidationError""" @@ -641,19 +641,19 @@ class TestCheckMetada: DependsOn=["dependency1"], RelatedTo=["related1"], Notes="notes1", - AdditionalUrls=[], + AdditionalURLs=[], Compliance=[], ) # Should contain a validation error for RelatedUrl assert "RelatedUrl" in str(exc_info.value) def test_additional_urls_none_fails(self): - """Test that setting AdditionalUrls to None raises a ValidationError""" + """Test that setting AdditionalURLs to None raises a ValidationError""" with pytest.raises(ValidationError) as exc_info: CheckMetadata( Provider="aws", CheckID="test_check_none_additional_urls", - CheckTitle="Test Check with None AdditionalUrls", + CheckTitle="Test Check with None AdditionalURLs", CheckType=["type1"], ServiceName="test", SubServiceName="subservice1", @@ -676,19 +676,19 @@ class TestCheckMetada: DependsOn=["dependency1"], RelatedTo=["related1"], Notes="notes1", - AdditionalUrls=None, # This should fail + AdditionalURLs=None, # This should fail Compliance=[], ) # Should contain the validation error we set in the validator - assert "AdditionalUrls must be a list" in str(exc_info.value) + assert "AdditionalURLs must be a list" in str(exc_info.value) def test_additional_urls_invalid_type_fails(self): - """Test that setting AdditionalUrls to non-list value raises a ValidationError""" + """Test that setting AdditionalURLs to non-list value raises a ValidationError""" with pytest.raises(ValidationError) as exc_info: CheckMetadata( Provider="aws", CheckID="test_check_invalid_additional_urls", - CheckTitle="Test Check with Invalid AdditionalUrls", + CheckTitle="Test Check with Invalid AdditionalURLs", CheckType=["type1"], ServiceName="test", SubServiceName="subservice1", @@ -711,8 +711,8 @@ class TestCheckMetada: DependsOn=["dependency1"], RelatedTo=["related1"], Notes="notes1", - AdditionalUrls="not_a_list", # This should fail + AdditionalURLs="not_a_list", # This should fail Compliance=[], ) # Should contain the validation error we set in the validator - assert "AdditionalUrls must be a list" in str(exc_info.value) + assert "AdditionalURLs must be a list" in str(exc_info.value) From 088a6bcbda262b5ae0c10da42da458d1d605ebf0 Mon Sep 17 00:00:00 2001 From: sumit-tft <70506234+sumit-tft@users.noreply.github.com> Date: Wed, 3 Sep 2025 19:21:14 +0530 Subject: [PATCH 28/32] feat(ui): handle no-permissions on scan page (#8624) Co-authored-by: alejandrobailo --- ui/CHANGELOG.md | 1 + ui/app/(prowler)/scans/page.tsx | 13 ++++++- ui/components/ui/custom/custom-banner.tsx | 47 +++++++++++++++++++++++ 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 ui/components/ui/custom/custom-banner.tsx diff --git a/ui/CHANGELOG.md b/ui/CHANGELOG.md index a6ecb2d728..080d67c917 100644 --- a/ui/CHANGELOG.md +++ b/ui/CHANGELOG.md @@ -7,6 +7,7 @@ All notable changes to the **Prowler UI** are documented in this file. ### 🐞 Added - Handle API responses and errors consistently across the app [(#8621)](https://github.com/prowler-cloud/prowler/pull/8621) +- No-permission message on the scan page [(#8624)](https://github.com/prowler-cloud/prowler/pull/8624) ### 🔄 Changed diff --git a/ui/app/(prowler)/scans/page.tsx b/ui/app/(prowler)/scans/page.tsx index 623836673c..a364f7b494 100644 --- a/ui/app/(prowler)/scans/page.tsx +++ b/ui/app/(prowler)/scans/page.tsx @@ -3,6 +3,7 @@ import { Suspense } from "react"; import { getProviders } from "@/actions/providers"; import { getScans, getScansByState } from "@/actions/scans"; +import { auth } from "@/auth.config"; import { MutedFindingsConfigButton } from "@/components/providers"; import { AutoRefresh, @@ -14,6 +15,7 @@ import { LaunchScanWorkflow } from "@/components/scans/launch-workflow"; import { SkeletonTableScans } from "@/components/scans/table"; import { ColumnGetScans } from "@/components/scans/table/scans"; import { ContentLayout } from "@/components/ui"; +import { CustomBanner } from "@/components/ui/custom/custom-banner"; import { DataTable } from "@/components/ui/table"; import { createProviderDetailsMapping, @@ -26,6 +28,7 @@ export default async function Scans({ }: { searchParams: SearchParamsProps; }) { + const session = await auth(); const filteredParams = { ...searchParams }; delete filteredParams.scanId; const searchParamsKey = JSON.stringify(filteredParams); @@ -55,6 +58,8 @@ export default async function Scans({ (provider: ProviderProps) => !provider.attributes.connection.connected, ); + const hasManageScansPermission = session?.user?.permissions?.manage_scans; + // Get scans data to check for executing scans const scansData = await getScansByState(); @@ -82,7 +87,12 @@ export default async function Scans({ <> - {thereIsNoProvidersConnected ? ( + {!hasManageScansPermission ? ( + + ) : thereIsNoProvidersConnected ? ( <> @@ -91,6 +101,7 @@ export default async function Scans({ ) : ( )} + { + return ( +
+
+
+
+ +

+ {title} +

+
+

{message}

+
+
+ + {buttonLabel} + +
+
+
+ ); +}; From 1fc12952ba93d91c932ed859eee6e18898024820 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20Mart=C3=ADn?= Date: Wed, 3 Sep 2025 16:53:31 +0200 Subject: [PATCH 29/32] feat(jira): add color for manual status (#8642) --- prowler/CHANGELOG.md | 1 + prowler/lib/outputs/jira/jira.py | 3 +++ tests/lib/outputs/jira/jira_test.py | 7 ++++++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/prowler/CHANGELOG.md b/prowler/CHANGELOG.md index cd7785d820..2e30a158e5 100644 --- a/prowler/CHANGELOG.md +++ b/prowler/CHANGELOG.md @@ -8,6 +8,7 @@ All notable changes to the **Prowler SDK** are documented in this file. - Add more fields for the Jira ticket and handle custom fields errors [(#8601)](https://github.com/prowler-cloud/prowler/pull/8601) - Get Jira projects from test_connection [(#8634)](https://github.com/prowler-cloud/prowler/pull/8634) - `AdditionalUrls` field in CheckMetadata [(#8590)](https://github.com/prowler-cloud/prowler/pull/8590) +- Support color for MANUAL finidngs in Jira tickets [(#8642)](https://github.com/prowler-cloud/prowler/pull/8642) ### Changed diff --git a/prowler/lib/outputs/jira/jira.py b/prowler/lib/outputs/jira/jira.py index 93ce81f9b0..dcb18c398b 100644 --- a/prowler/lib/outputs/jira/jira.py +++ b/prowler/lib/outputs/jira/jira.py @@ -789,6 +789,9 @@ class Jira: return "#FF0000" if status == "MUTED": return "#FFA500" + if status == "MANUAL": + return "#FFFF00" + return "#000000" @staticmethod def get_severity_color(severity: str) -> str: diff --git a/tests/lib/outputs/jira/jira_test.py b/tests/lib/outputs/jira/jira_test.py index a9fee84365..ae91769525 100644 --- a/tests/lib/outputs/jira/jira_test.py +++ b/tests/lib/outputs/jira/jira_test.py @@ -976,7 +976,12 @@ class TestJiraIntegration: @pytest.mark.parametrize( "status, expected_color", - [("FAIL", "#FF0000"), ("PASS", "#008000"), ("MUTED", "#FFA500")], + [ + ("FAIL", "#FF0000"), + ("PASS", "#008000"), + ("MUTED", "#FFA500"), + ("MANUAL", "#FFFF00"), + ], ) def test_get_color_from_status(self, status, expected_color): """Test that get_color_from_status returns the correct color for a status.""" From b15e3d339cd30c389787964208fd0e6f5b1ebc62 Mon Sep 17 00:00:00 2001 From: Alejandro Bailo <59607668+alejandrobailo@users.noreply.github.com> Date: Wed, 3 Sep 2025 17:04:51 +0200 Subject: [PATCH 30/32] fix(saml): remove validation call on email domain change (#8638) --- ui/CHANGELOG.md | 1 + ui/components/integrations/saml/saml-config-form.tsx | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/CHANGELOG.md b/ui/CHANGELOG.md index 080d67c917..36642e0428 100644 --- a/ui/CHANGELOG.md +++ b/ui/CHANGELOG.md @@ -15,6 +15,7 @@ All notable changes to the **Prowler UI** are documented in this file. ### 🐞 Fixed - Scan page shows NoProvidersAdded when no providers [(#8626)](https://github.com/prowler-cloud/prowler/pull/8626) +- XML field in SAML configuration form validation [(#8638)](https://github.com/prowler-cloud/prowler/pull/8638) ## [1.11.0] (Prowler v5.11.0) diff --git a/ui/components/integrations/saml/saml-config-form.tsx b/ui/components/integrations/saml/saml-config-form.tsx index ee50353d0b..304b897f67 100644 --- a/ui/components/integrations/saml/saml-config-form.tsx +++ b/ui/components/integrations/saml/saml-config-form.tsx @@ -284,7 +284,6 @@ export const SamlConfigForm = ({ onChange={(e: React.ChangeEvent) => { const newValue = e.target.value; setEmailDomain(newValue); - validateFields(newValue, !!uploadedFile); }} /> From 0463fd0830f5634479ebdb76141a9202f828b010 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20Poyatos?= Date: Wed, 3 Sep 2025 17:24:42 +0200 Subject: [PATCH 31/32] refactor(integrations-jira): Move domain to credentials and retrieve metadata during connection test (#8637) --- api/CHANGELOG.md | 2 +- api/src/backend/api/specs/v1.yaml | 116 +++------- api/src/backend/api/tests/test_utils.py | 102 ++++++++- api/src/backend/api/tests/test_views.py | 214 +++++++++++++++--- api/src/backend/api/utils.py | 34 ++- .../api/v1/serializer_utils/integrations.py | 41 ++-- api/src/backend/api/v1/serializers.py | 42 +++- 7 files changed, 392 insertions(+), 159 deletions(-) diff --git a/api/CHANGELOG.md b/api/CHANGELOG.md index cb8a4e3b17..0694cba39b 100644 --- a/api/CHANGELOG.md +++ b/api/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to the **Prowler API** are documented in this file. ## [1.13.0] (Prowler UNRELEASED) ### Added -- Integration with JIRA, enabling sending findings to a JIRA project [(#8622)](https://github.com/prowler-cloud/prowler/pull/8622) +- Integration with JIRA, enabling sending findings to a JIRA project [(#8622)](https://github.com/prowler-cloud/prowler/pull/8622), [(#8637)](https://github.com/prowler-cloud/prowler/pull/8637) --- diff --git a/api/src/backend/api/specs/v1.yaml b/api/src/backend/api/specs/v1.yaml index 5ff07712a3..21aac9ec79 100644 --- a/api/src/backend/api/specs/v1.yaml +++ b/api/src/backend/api/specs/v1.yaml @@ -9134,23 +9134,10 @@ components: the current execution. - type: object title: JIRA - properties: - project_key: - type: string - description: The JIRA project key where issues will be created - (e.g., 'PROJ', 'SEC'). - issue_types: - type: array - items: - type: string - description: List of JIRA issue types to create for findings. - issue_labels: - type: array - items: - type: string - description: List of labels to apply to created JIRA issues.. - required: - - project_key + description: JIRA integration does not accept any configuration in + the payload. Leave it as an empty JSON object (`{}`). + properties: {} + additionalProperties: false credentials: oneOf: - type: object @@ -9197,17 +9184,17 @@ components: type: string format: email description: The email address of the JIRA user account. - domain: - type: string - description: The JIRA domain/instance URL (e.g., 'your-domain.atlassian.net'). api_token: type: string description: The API token for authentication with JIRA. This can be generated from your Atlassian account settings. + domain: + type: string + description: The JIRA domain/instance URL (e.g., 'your-domain.atlassian.net'). required: - user_mail - - domain - api_token + - domain writeOnly: true required: - integration_type @@ -9331,23 +9318,10 @@ components: in the current execution. - type: object title: JIRA - properties: - project_key: - type: string - description: The JIRA project key where issues will be created - (e.g., 'PROJ', 'SEC'). - issue_types: - type: array - items: - type: string - description: List of JIRA issue types to create for findings. - issue_labels: - type: array - items: - type: string - description: List of labels to apply to created JIRA issues.. - required: - - project_key + description: JIRA integration does not accept any configuration + in the payload. Leave it as an empty JSON object (`{}`). + properties: {} + additionalProperties: false credentials: oneOf: - type: object @@ -9395,17 +9369,17 @@ components: type: string format: email description: The email address of the JIRA user account. - domain: - type: string - description: The JIRA domain/instance URL (e.g., 'your-domain.atlassian.net'). api_token: type: string description: The API token for authentication with JIRA. This can be generated from your Atlassian account settings. + domain: + type: string + description: The JIRA domain/instance URL (e.g., 'your-domain.atlassian.net'). required: - user_mail - - domain - api_token + - domain writeOnly: true required: - integration_type @@ -9544,23 +9518,10 @@ components: the current execution. - type: object title: JIRA - properties: - project_key: - type: string - description: The JIRA project key where issues will be created - (e.g., 'PROJ', 'SEC'). - issue_types: - type: array - items: - type: string - description: List of JIRA issue types to create for findings. - issue_labels: - type: array - items: - type: string - description: List of labels to apply to created JIRA issues.. - required: - - project_key + description: JIRA integration does not accept any configuration in + the payload. Leave it as an empty JSON object (`{}`). + properties: {} + additionalProperties: false credentials: oneOf: - type: object @@ -9607,17 +9568,17 @@ components: type: string format: email description: The email address of the JIRA user account. - domain: - type: string - description: The JIRA domain/instance URL (e.g., 'your-domain.atlassian.net'). api_token: type: string description: The API token for authentication with JIRA. This can be generated from your Atlassian account settings. + domain: + type: string + description: The JIRA domain/instance URL (e.g., 'your-domain.atlassian.net'). required: - user_mail - - domain - api_token + - domain writeOnly: true relationships: type: object @@ -10986,23 +10947,10 @@ components: in the current execution. - type: object title: JIRA - properties: - project_key: - type: string - description: The JIRA project key where issues will be created - (e.g., 'PROJ', 'SEC'). - issue_types: - type: array - items: - type: string - description: List of JIRA issue types to create for findings. - issue_labels: - type: array - items: - type: string - description: List of labels to apply to created JIRA issues.. - required: - - project_key + description: JIRA integration does not accept any configuration + in the payload. Leave it as an empty JSON object (`{}`). + properties: {} + additionalProperties: false credentials: oneOf: - type: object @@ -11050,17 +10998,17 @@ components: type: string format: email description: The email address of the JIRA user account. - domain: - type: string - description: The JIRA domain/instance URL (e.g., 'your-domain.atlassian.net'). api_token: type: string description: The API token for authentication with JIRA. This can be generated from your Atlassian account settings. + domain: + type: string + description: The JIRA domain/instance URL (e.g., 'your-domain.atlassian.net'). required: - user_mail - - domain - api_token + - domain writeOnly: true relationships: type: object diff --git a/api/src/backend/api/tests/test_utils.py b/api/src/backend/api/tests/test_utils.py index 853bb58ddb..8d7c3801e0 100644 --- a/api/src/backend/api/tests/test_utils.py +++ b/api/src/backend/api/tests/test_utils.py @@ -503,28 +503,38 @@ class TestProwlerIntegrationConnectionTest: assert integration.configuration["regions"]["ap-south-1"] is False integration.save.assert_called_once() + @patch("api.utils.rls_transaction") @patch("api.utils.Jira") - def test_jira_connection_success_basic_auth(self, mock_jira_class): + def test_jira_connection_success_basic_auth( + self, mock_jira_class, mock_rls_transaction + ): integration = MagicMock() integration.integration_type = Integration.IntegrationChoices.JIRA + integration.tenant_id = "test-tenant-id" integration.credentials = { "user_mail": "test@example.com", "api_token": "test_api_token", - } - integration.configuration = { "domain": "example.atlassian.net", } + integration.configuration = {} + # Mock successful JIRA connection with projects mock_connection = MagicMock() mock_connection.is_connected = True mock_connection.error = None + mock_connection.projects = {"PROJ1": "Project 1", "PROJ2": "Project 2"} mock_jira_class.test_connection.return_value = mock_connection + # Mock rls_transaction context manager + mock_rls_transaction.return_value.__enter__ = MagicMock() + mock_rls_transaction.return_value.__exit__ = MagicMock() + result = prowler_integration_connection_test(integration) assert result.is_connected is True assert result.error is None + # Verify JIRA connection was called with correct parameters including domain from credentials mock_jira_class.test_connection.assert_called_once_with( user_mail="test@example.com", api_token="test_api_token", @@ -532,32 +542,112 @@ class TestProwlerIntegrationConnectionTest: raise_on_exception=False, ) + # Verify rls_transaction was called with correct tenant_id + mock_rls_transaction.assert_called_once_with("test-tenant-id") + + # Verify projects were saved to integration configuration + assert integration.configuration["projects"] == { + "PROJ1": "Project 1", + "PROJ2": "Project 2", + } + + # Verify integration.save() was called + integration.save.assert_called_once() + + @patch("api.utils.rls_transaction") @patch("api.utils.Jira") - def test_jira_connection_failure_invalid_credentials(self, mock_jira_class): + def test_jira_connection_failure_invalid_credentials( + self, mock_jira_class, mock_rls_transaction + ): integration = MagicMock() integration.integration_type = Integration.IntegrationChoices.JIRA + integration.tenant_id = "test-tenant-id" integration.credentials = { "user_mail": "invalid@example.com", "api_token": "invalid_token", - } - integration.configuration = { "domain": "invalid.atlassian.net", } + integration.configuration = {} # Mock failed JIRA connection mock_connection = MagicMock() mock_connection.is_connected = False mock_connection.error = Exception("Authentication failed: Invalid credentials") + mock_connection.projects = {} # Empty projects when connection fails mock_jira_class.test_connection.return_value = mock_connection + # Mock rls_transaction context manager + mock_rls_transaction.return_value.__enter__ = MagicMock() + mock_rls_transaction.return_value.__exit__ = MagicMock() + result = prowler_integration_connection_test(integration) assert result.is_connected is False assert "Authentication failed: Invalid credentials" in str(result.error) + # Verify JIRA connection was called with correct parameters mock_jira_class.test_connection.assert_called_once_with( user_mail="invalid@example.com", api_token="invalid_token", domain="invalid.atlassian.net", raise_on_exception=False, ) + + # Verify rls_transaction was called even on failure + mock_rls_transaction.assert_called_once_with("test-tenant-id") + + # Verify empty projects dict was saved to integration configuration + assert integration.configuration["projects"] == {} + + # Verify integration.save() was called even on connection failure + integration.save.assert_called_once() + + @patch("api.utils.rls_transaction") + @patch("api.utils.Jira") + def test_jira_connection_projects_update_with_existing_configuration( + self, mock_jira_class, mock_rls_transaction + ): + """Test that projects are properly updated when integration already has configuration data""" + integration = MagicMock() + integration.integration_type = Integration.IntegrationChoices.JIRA + integration.tenant_id = "test-tenant-id" + integration.credentials = { + "user_mail": "test@example.com", + "api_token": "test_api_token", + "domain": "example.atlassian.net", + } + integration.configuration = { + "issue_types": ["Bug", "Task"], # Existing configuration + "projects": {"OLD_PROJ": "Old Project"}, # Will be overwritten + } + + # Mock successful JIRA connection with new projects + mock_connection = MagicMock() + mock_connection.is_connected = True + mock_connection.error = None + mock_connection.projects = { + "NEW_PROJ1": "New Project 1", + "NEW_PROJ2": "New Project 2", + } + mock_jira_class.test_connection.return_value = mock_connection + + # Mock rls_transaction context manager + mock_rls_transaction.return_value.__enter__ = MagicMock() + mock_rls_transaction.return_value.__exit__ = MagicMock() + + result = prowler_integration_connection_test(integration) + + assert result.is_connected is True + assert result.error is None + + # Verify projects were updated (old projects replaced with new ones) + assert integration.configuration["projects"] == { + "NEW_PROJ1": "New Project 1", + "NEW_PROJ2": "New Project 2", + } + + # Verify other configuration fields were preserved + assert integration.configuration["issue_types"] == ["Bug", "Task"] + + # Verify integration.save() was called + integration.save.assert_called_once() diff --git a/api/src/backend/api/tests/test_views.py b/api/src/backend/api/tests/test_views.py index 2e3fb0afcc..1aaf6224a8 100644 --- a/api/src/backend/api/tests/test_views.py +++ b/api/src/backend/api/tests/test_views.py @@ -5660,18 +5660,6 @@ class TestIntegrationViewSet: }, {}, ), - # JIRA - ( - Integration.IntegrationChoices.JIRA, - { - "project_key": "JIRA", - "domain": "prowlerdomain", - }, - { - "api_token": "this-is-an-api-token-for-jira-that-works-for-sure", - "user_mail": "testing@prowler.com", - }, - ), ], ) def test_integrations_create_valid( @@ -5720,6 +5708,47 @@ class TestIntegrationViewSet: == data["data"]["relationships"]["providers"]["data"][0]["id"] ) + def test_integrations_create_valid_jira( + self, + authenticated_client, + ): + """Jira integrations are special""" + data = { + "data": { + "type": "integrations", + "attributes": { + "integration_type": Integration.IntegrationChoices.JIRA, + "configuration": {}, + "credentials": { + "domain": "prowlerdomain", + "api_token": "this-is-an-api-token-for-jira-that-works-for-sure", + "user_mail": "testing@prowler.com", + }, + "enabled": True, + }, + } + } + response = authenticated_client.post( + reverse("integration-list"), + data=json.dumps(data), + content_type="application/vnd.api+json", + ) + assert response.status_code == status.HTTP_201_CREATED + assert Integration.objects.count() == 1 + integration = Integration.objects.first() + integration_configuration = response.json()["data"]["attributes"][ + "configuration" + ] + assert "projects" in integration_configuration + assert "issue_types" in integration_configuration + assert "domain" in integration_configuration + assert integration.enabled == data["data"]["attributes"]["enabled"] + assert ( + integration.integration_type + == data["data"]["attributes"]["integration_type"] + ) + assert "credentials" not in response.json()["data"]["attributes"] + def test_integrations_create_valid_relationships( self, authenticated_client, @@ -5822,31 +5851,37 @@ class TestIntegrationViewSet: { "integration_type": "jira", "configuration": { - "project_key": "JIRA", + "projects": ["JIRA"], }, - "credentials": {}, + "credentials": {"domain": "prowlerdomain"}, }, - "required", - "domain", + "invalid", + "configuration", ), ( { "integration_type": "jira", - "configuration": { - "project_key": "JIRA", + "credentialss": { "domain": "prowlerdomain", + "api_token": "api-token", + "user_mail": "test@prowler.com", }, }, "required", + "configuration", + ), + ( + { + "integration_type": "jira", + "configuration": {}, + }, + "required", "credentials", ), ( { "integration_type": "jira", - "configuration": { - "project_key": "JIRA", - "domain": "prowlerdomain", - }, + "configuration": {}, "credentials": {"api_token": "api-token"}, }, "invalid", @@ -6093,32 +6128,21 @@ class TestIntegrationViewSet: == "/data/attributes/configuration" ) - def test_integrations_create_duplicate_jira( - self, authenticated_client, providers_fixture - ): - provider = providers_fixture[0] - + def test_integrations_create_duplicate_jira(self, authenticated_client): # Create first JIRA integration data = { "data": { "type": "integrations", "attributes": { "integration_type": Integration.IntegrationChoices.JIRA, - "configuration": { - "project_key": "TEST", - "domain": "test.atlassian.net", - }, + "configuration": {}, "credentials": { "user_mail": "test@example.com", "api_token": "test-api-token", + "domain": "prowlerdomain", }, "enabled": True, }, - "relationships": { - "providers": { - "data": [{"type": "providers", "id": str(provider.id)}] - } - }, } } @@ -6145,6 +6169,124 @@ class TestIntegrationViewSet: == "/data/attributes/configuration" ) + def test_integrations_update_jira_configuration_readonly( + self, authenticated_client + ): + # Create JIRA integration first + create_data = { + "data": { + "type": "integrations", + "attributes": { + "integration_type": Integration.IntegrationChoices.JIRA, + "configuration": {}, + "credentials": { + "user_mail": "test@example.com", + "api_token": "test-api-token", + "domain": "initial-domain", + }, + "enabled": True, + }, + } + } + + # Create the integration + response = authenticated_client.post( + reverse("integration-list"), + data=json.dumps(create_data), + content_type="application/vnd.api+json", + ) + assert response.status_code == status.HTTP_201_CREATED + integration_id = response.json()["data"]["id"] + + # Attempt to update configuration - should be ignored/not allowed + update_data = { + "data": { + "type": "integrations", + "id": integration_id, + "attributes": { + "configuration": { + "projects": {"NEW_PROJECT": "New Project"}, + "issue_types": ["Epic", "Story"], + "domain": "malicious-domain", + } + }, + } + } + + response = authenticated_client.patch( + reverse("integration-detail", kwargs={"pk": integration_id}), + data=json.dumps(update_data), + content_type="application/vnd.api+json", + ) + assert response.status_code == status.HTTP_400_BAD_REQUEST + + def test_integrations_update_jira_credentials_domain_reflects_in_configuration( + self, authenticated_client + ): + # Create JIRA integration first + create_data = { + "data": { + "type": "integrations", + "attributes": { + "integration_type": Integration.IntegrationChoices.JIRA, + "configuration": {}, + "credentials": { + "user_mail": "test@example.com", + "api_token": "test-api-token", + "domain": "original-domain", + }, + "enabled": True, + }, + } + } + + # Create the integration + response = authenticated_client.post( + reverse("integration-list"), + data=json.dumps(create_data), + content_type="application/vnd.api+json", + ) + assert response.status_code == status.HTTP_201_CREATED + integration_id = response.json()["data"]["id"] + + # Verify initial domain in configuration + initial_integration = response.json()["data"] + assert ( + initial_integration["attributes"]["configuration"]["domain"] + == "original-domain" + ) + + # Update credentials with new domain + update_data = { + "data": { + "type": "integrations", + "id": integration_id, + "attributes": { + "credentials": { + "user_mail": "updated@example.com", + "api_token": "updated-api-token", + "domain": "updated-domain", + } + }, + } + } + + response = authenticated_client.patch( + reverse("integration-detail", kwargs={"pk": integration_id}), + data=json.dumps(update_data), + content_type="application/vnd.api+json", + ) + assert response.status_code == status.HTTP_200_OK + + # Verify the new domain is reflected in configuration + updated_integration = response.json()["data"] + configuration = updated_integration["attributes"]["configuration"] + assert configuration["domain"] == "updated-domain" + + # Verify other configuration fields are preserved + assert "projects" in configuration + assert "issue_types" in configuration + @pytest.mark.django_db class TestSAMLTokenValidation: diff --git a/api/src/backend/api/utils.py b/api/src/backend/api/utils.py index 1901c7972a..4bab4ce2d4 100644 --- a/api/src/backend/api/utils.py +++ b/api/src/backend/api/utils.py @@ -6,10 +6,11 @@ from django.db.models import Subquery from rest_framework.exceptions import NotFound, ValidationError from api.db_router import MainRouter +from api.db_utils import rls_transaction from api.exceptions import InvitationTokenExpiredException from api.models import Integration, Invitation, Processor, Provider, Resource from api.v1.serializers import FindingMetadataSerializer -from prowler.lib.outputs.jira.jira import Jira +from prowler.lib.outputs.jira.jira import Jira, JiraBasicAuthError, JiraNoProjectsError from prowler.providers.aws.aws_provider import AwsProvider from prowler.providers.aws.lib.s3.s3 import S3 from prowler.providers.aws.lib.security_hub.security_hub import SecurityHub @@ -238,11 +239,15 @@ def prowler_integration_connection_test(integration: Integration) -> Connection: return connection elif integration.integration_type == Integration.IntegrationChoices.JIRA: - return Jira.test_connection( + jira_connection = Jira.test_connection( **integration.credentials, - domain=integration.configuration["domain"], raise_on_exception=False, ) + project_keys = jira_connection.projects if jira_connection.is_connected else {} + with rls_transaction(str(integration.tenant_id)): + integration.configuration["projects"] = project_keys + integration.save() + return jira_connection elif integration.integration_type == Integration.IntegrationChoices.SLACK: pass else: @@ -342,3 +347,26 @@ def get_findings_metadata_no_aggregations(tenant_id: str, filtered_queryset): serializer.is_valid(raise_exception=True) return serializer.data + + +def initialize_prowler_integration(integration: Integration) -> Jira: + # TODO Refactor other integrations to use this function + if integration.integration_type == Integration.IntegrationChoices.JIRA: + try: + return Jira( + **integration.credentials, domain=integration.configuration["domain"] + ) + except JiraBasicAuthError as jira_auth_error: + with rls_transaction(str(integration.tenant_id)): + integration.connected = False + integration.connection_last_checked_at = datetime.now(tz=timezone.utc) + integration.save() + raise jira_auth_error + + +def get_jira_integration_metadata(jira_integration: Integration) -> dict: + prowler_jira = initialize_prowler_integration(jira_integration) + try: + return prowler_jira.get_jira_metadata() + except JiraNoProjectsError: + return {} diff --git a/api/src/backend/api/v1/serializer_utils/integrations.py b/api/src/backend/api/v1/serializer_utils/integrations.py index 2d443ddfec..b63eaaa66c 100644 --- a/api/src/backend/api/v1/serializer_utils/integrations.py +++ b/api/src/backend/api/v1/serializer_utils/integrations.py @@ -68,10 +68,11 @@ class SecurityHubConfigSerializer(BaseValidateSerializer): class JiraConfigSerializer(BaseValidateSerializer): - project_key = serializers.CharField(required=True) - domain = serializers.CharField(required=True) - issue_types = serializers.ListField(required=False, child=serializers.CharField()) - issue_labels = serializers.ListField(required=False, child=serializers.CharField()) + domain = serializers.CharField(read_only=True) + issue_types = serializers.ListField( + read_only=True, child=serializers.CharField(), default=["Task", "Bug"] + ) + projects = serializers.DictField(read_only=True) class Meta: resource_name = "integrations" @@ -95,6 +96,7 @@ class AWSCredentialSerializer(BaseValidateSerializer): class JiraCredentialSerializer(BaseValidateSerializer): user_mail = serializers.EmailField(required=True) api_token = serializers.CharField(required=True) + domain = serializers.CharField(required=True) class Meta: resource_name = "integrations" @@ -165,8 +167,12 @@ class JiraCredentialSerializer(BaseValidateSerializer): "description": "The API token for authentication with JIRA. This can be generated from your " "Atlassian account settings.", }, + "domain": { + "type": "string", + "description": "The JIRA domain/instance URL (e.g., 'your-domain.atlassian.net').", + }, }, - "required": ["user_mail", "api_token"], + "required": ["user_mail", "api_token", "domain"], }, ] } @@ -218,27 +224,10 @@ class IntegrationCredentialField(serializers.JSONField): { "type": "object", "title": "JIRA", - "properties": { - "project_key": { - "type": "string", - "description": "The JIRA project key where issues will be created (e.g., 'PROJ', 'SEC').", - }, - "domain": { - "type": "string", - "description": "The JIRA domain/instance URL (e.g., 'your-domain.atlassian.net').", - }, - "issue_types": { - "type": "array", - "items": {"type": "string"}, - "description": "List of JIRA issue types to create for findings.", - }, - "issue_labels": { - "type": "array", - "items": {"type": "string"}, - "description": "List of labels to apply to created JIRA issues..", - }, - }, - "required": ["project_key", "domain"], + "description": "JIRA integration does not accept any configuration in the payload. Leave it as an " + "empty JSON object (`{}`).", + "properties": {}, + "additionalProperties": False, }, ] } diff --git a/api/src/backend/api/v1/serializers.py b/api/src/backend/api/v1/serializers.py index ec97c2719d..27c4180afb 100644 --- a/api/src/backend/api/v1/serializers.py +++ b/api/src/backend/api/v1/serializers.py @@ -1972,8 +1972,7 @@ class BaseWriteIntegrationSerializer(BaseWriteSerializer): integration_type == Integration.IntegrationChoices.JIRA and Integration.objects.filter( configuration__contains={ - "domain": attrs.get("configuration").get("domain"), - "project_key": attrs.get("configuration").get("project_key"), + "domain": attrs.get("configuration").get("domain") } ).exists() ): @@ -2038,7 +2037,28 @@ class BaseWriteIntegrationSerializer(BaseWriteSerializer): config_serializer = SecurityHubConfigSerializer credentials_serializers = [AWSCredentialSerializer] elif integration_type == Integration.IntegrationChoices.JIRA: + if providers: + raise serializers.ValidationError( + { + "providers": "Relationship field is not accepted. This integration applies to all providers." + } + ) + if configuration: + raise serializers.ValidationError( + { + "configuration": "This integration does not support custom configuration." + } + ) config_serializer = JiraConfigSerializer + # Create non-editable configuration for JIRA integration + default_jira_issue_types = ["Task", "Bug"] + configuration.update( + { + "projects": {}, + "issue_types": default_jira_issue_types, + "domain": credentials.get("domain"), + } + ) credentials_serializers = [JiraCredentialSerializer] else: raise serializers.ValidationError( @@ -2103,6 +2123,10 @@ class IntegrationSerializer(RLSSerializer): for provider in representation["providers"] if provider["id"] in allowed_provider_ids ] + if instance.integration_type == Integration.IntegrationChoices.JIRA: + representation["configuration"].update( + {"domain": instance.credentials.get("domain")} + ) return representation @@ -2203,7 +2227,10 @@ class IntegrationUpdateSerializer(BaseWriteIntegrationSerializer): def validate(self, attrs): integration_type = self.instance.integration_type providers = attrs.get("providers") - configuration = attrs.get("configuration") or self.instance.configuration + if integration_type != Integration.IntegrationChoices.JIRA: + configuration = attrs.get("configuration") or self.instance.configuration + else: + configuration = attrs.get("configuration", {}) credentials = attrs.get("credentials") or self.instance.credentials self.validate_integration_data( @@ -2233,6 +2260,15 @@ class IntegrationUpdateSerializer(BaseWriteIntegrationSerializer): return super().update(instance, validated_data) + def to_representation(self, instance): + representation = super().to_representation(instance) + # Ensure JIRA integrations show updated domain in configuration from credentials + if instance.integration_type == Integration.IntegrationChoices.JIRA: + representation["configuration"].update( + {"domain": instance.credentials.get("domain")} + ) + return representation + # Processors From 79450d6977c53b087e0497ea02aad73c63ff7093 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20Mart=C3=ADn?= Date: Wed, 3 Sep 2025 17:52:09 +0200 Subject: [PATCH 32/32] fix(securityhub): resolve TypeError from Python3.9 (#8619) Co-authored-by: Hugo Pereira Brito <101209179+HugoPBrito@users.noreply.github.com> --- prowler/CHANGELOG.md | 1 + .../aws/lib/security_hub/security_hub.py | 4 +- .../aws/lib/security_hub/security_hub_test.py | 164 ++++++++++++++++++ 3 files changed, 167 insertions(+), 2 deletions(-) diff --git a/prowler/CHANGELOG.md b/prowler/CHANGELOG.md index 2e30a158e5..4c8b6996e1 100644 --- a/prowler/CHANGELOG.md +++ b/prowler/CHANGELOG.md @@ -20,6 +20,7 @@ All notable changes to the **Prowler SDK** are documented in this file. ## [v5.11.1] (Prowler UNRELEASED) ### Fixed +- TypeError from Python 3.9 in Security Hub module by updating type annotations [(#8619)](https://github.com/prowler-cloud/prowler/pull/8619) --- diff --git a/prowler/providers/aws/lib/security_hub/security_hub.py b/prowler/providers/aws/lib/security_hub/security_hub.py index b2809b25a4..5dcd0b199c 100644 --- a/prowler/providers/aws/lib/security_hub/security_hub.py +++ b/prowler/providers/aws/lib/security_hub/security_hub.py @@ -1,7 +1,7 @@ import os from concurrent.futures import ThreadPoolExecutor, as_completed from dataclasses import dataclass -from typing import Optional +from typing import Optional, Union from boto3 import Session from botocore.client import ClientError @@ -219,7 +219,7 @@ class SecurityHub: session: Session, aws_account_id: str, aws_partition: str, - ) -> tuple[str, Session | None]: + ) -> tuple[str, Union[Session, None]]: """ Check if Security Hub is enabled in a specific region and if Prowler integration is active. diff --git a/tests/providers/aws/lib/security_hub/security_hub_test.py b/tests/providers/aws/lib/security_hub/security_hub_test.py index 17dec4505c..0ee74a4c30 100644 --- a/tests/providers/aws/lib/security_hub/security_hub_test.py +++ b/tests/providers/aws/lib/security_hub/security_hub_test.py @@ -1283,3 +1283,167 @@ class TestSecurityHub: assert connection.error is None assert len(connection.enabled_regions) == 1 assert len(connection.disabled_regions) == 1 + + # Tests for _check_region_security_hub static method + @patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call) + def test_check_region_security_hub_success(self): + # Test successful security hub check + mock_session = session.Session(region_name=AWS_REGION_EU_WEST_1) + + region, client = SecurityHub._check_region_security_hub( + region=AWS_REGION_EU_WEST_1, + session=mock_session, + aws_account_id=AWS_ACCOUNT_NUMBER, + aws_partition=AWS_COMMERCIAL_PARTITION, + ) + + assert region == AWS_REGION_EU_WEST_1 + assert client is not None + assert hasattr(client, "_make_api_call") + + def test_check_region_security_hub_invalid_access_exception(self, caplog): + caplog.set_level(WARNING) + + with patch("boto3.Session.client") as mock_client: + error_message = ( + f"Account {AWS_ACCOUNT_NUMBER} is not subscribed to AWS Security Hub" + ) + error_code = "InvalidAccessException" + error_response = { + "Error": { + "Code": error_code, + "Message": error_message, + } + } + operation_name = "DescribeHub" + mock_client.side_effect = ClientError(error_response, operation_name) + + mock_session = session.Session(region_name=AWS_REGION_EU_WEST_1) + + region, client = SecurityHub._check_region_security_hub( + region=AWS_REGION_EU_WEST_1, + session=mock_session, + aws_account_id=AWS_ACCOUNT_NUMBER, + aws_partition=AWS_COMMERCIAL_PARTITION, + ) + + assert region == AWS_REGION_EU_WEST_1 + assert client is None + + # Check that warning was logged for InvalidAccessException + log_pattern = re.compile( + r"ClientError -- \[\d+\]: An error occurred \({error_code}\) when calling the {operation_name} operation: {error_message}".format( + error_code=re.escape(error_code), + operation_name=re.escape(operation_name), + error_message=re.escape(error_message), + ) + ) + assert any( + log_pattern.match(record.message) for record in caplog.records + ), "Expected log message not found" + + def test_check_region_security_hub_prowler_integration_not_enabled(self, caplog): + from logging import INFO + + caplog.set_level(INFO) + + with patch("boto3.Session.client") as mock_client: + mock_security_hub_client = mock_client.return_value + mock_security_hub_client.describe_hub.return_value = {} + mock_security_hub_client.list_enabled_products_for_import.return_value = { + "ProductSubscriptions": [] + } + + mock_session = session.Session(region_name=AWS_REGION_EU_WEST_1) + + region, client = SecurityHub._check_region_security_hub( + region=AWS_REGION_EU_WEST_1, + session=mock_session, + aws_account_id=AWS_ACCOUNT_NUMBER, + aws_partition=AWS_COMMERCIAL_PARTITION, + ) + + assert region == AWS_REGION_EU_WEST_1 + assert client is None + + # Check that warning was logged for missing Prowler integration + assert caplog.record_tuples == [ + ( + "root", + INFO, + f"Checking if the prowler/prowler is enabled in the {AWS_REGION_EU_WEST_1} region.", + ), + ( + "root", + WARNING, + f"Security Hub is enabled in {AWS_REGION_EU_WEST_1} but Prowler integration does not accept findings. More info: https://docs.prowler.cloud/en/latest/tutorials/aws/securityhub/", + ), + ] + + def test_check_region_security_hub_other_client_error(self, caplog): + caplog.set_level(WARNING) + + with patch("boto3.Session.client") as mock_client: + error_message = "Some other error" + error_code = "SomeOtherException" + error_response = { + "Error": { + "Code": error_code, + "Message": error_message, + } + } + operation_name = "DescribeHub" + mock_client.side_effect = ClientError(error_response, operation_name) + + mock_session = session.Session(region_name=AWS_REGION_EU_WEST_1) + + region, client = SecurityHub._check_region_security_hub( + region=AWS_REGION_EU_WEST_1, + session=mock_session, + aws_account_id=AWS_ACCOUNT_NUMBER, + aws_partition=AWS_COMMERCIAL_PARTITION, + ) + + assert region == AWS_REGION_EU_WEST_1 + assert client is None + + # Check that error was logged for other ClientError + log_pattern = re.compile( + r"ClientError -- \[\d+\]: An error occurred \({error_code}\) when calling the {operation_name} operation: {error_message}".format( + error_code=re.escape(error_code), + operation_name=re.escape(operation_name), + error_message=re.escape(error_message), + ) + ) + assert any( + log_pattern.match(record.message) for record in caplog.records + ), "Expected log message not found" + + def test_check_region_security_hub_generic_exception(self, caplog): + caplog.set_level(WARNING) + + with patch("boto3.Session.client") as mock_client: + error_message = "Generic exception occurred" + mock_client.side_effect = Exception(error_message) + + mock_session = session.Session(region_name=AWS_REGION_EU_WEST_1) + + region, client = SecurityHub._check_region_security_hub( + region=AWS_REGION_EU_WEST_1, + session=mock_session, + aws_account_id=AWS_ACCOUNT_NUMBER, + aws_partition=AWS_COMMERCIAL_PARTITION, + ) + + assert region == AWS_REGION_EU_WEST_1 + assert client is None + + # Check that error was logged for generic exception + log_pattern = re.compile( + r"Exception -- \[\d+\]: {error_message}".format( + error_message=re.escape(error_message), + ) + ) + assert any( + log_pattern.match(record.message) for record in caplog.records + ), "Expected log message not found"

CutgJ=d& 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 4fo}7^5_-eMB8Ytna808` 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%0A-3-D4y)@DM+KJJU(Gjqb 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%0DQfr69VxV9|~3e)8$s-goRYZ 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 literal 0 HcmV?d00001 diff --git a/docs/tutorials/img/security-hub/integrations-tab.png b/docs/tutorials/img/security-hub/integrations-tab.png new file mode 100644 index 0000000000000000000000000000000000000000..9d11cae33a0c148dfa0f52cefdf8ef7bb4e7e13b GIT binary patch literal 378347 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%0DKZ^=y4RNIx%w~D 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