From 82bacef7c7a3ac975b6b9634d544c736d35a087a Mon Sep 17 00:00:00 2001 From: Prowler Bot Date: Mon, 3 Nov 2025 15:10:28 +0100 Subject: [PATCH 01/37] feat(aws): Update regions for AWS services (#9140) Co-authored-by: prowler-bot <179230569+prowler-bot@users.noreply.github.com> --- .../providers/aws/aws_regions_by_service.json | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/prowler/providers/aws/aws_regions_by_service.json b/prowler/providers/aws/aws_regions_by_service.json index 745e36d648..6969414824 100644 --- a/prowler/providers/aws/aws_regions_by_service.json +++ b/prowler/providers/aws/aws_regions_by_service.json @@ -2988,6 +2988,7 @@ "ap-southeast-3", "ap-southeast-4", "ap-southeast-5", + "ap-southeast-6", "ap-southeast-7", "ca-central-1", "ca-west-1", @@ -4574,6 +4575,25 @@ "aws-us-gov": [] } }, + "evs": { + "regions": { + "aws": [ + "ap-northeast-1", + "ap-south-1", + "ap-southeast-1", + "ap-southeast-2", + "ca-central-1", + "eu-central-1", + "eu-west-1", + "eu-west-2", + "us-east-1", + "us-east-2", + "us-west-2" + ], + "aws-cn": [], + "aws-us-gov": [] + } + }, "fargate": { "regions": { "aws": [ From a564d6a04e3e4dfae7cc85719930715b82684819 Mon Sep 17 00:00:00 2001 From: JDeep <132117873+JDeep1234@users.noreply.github.com> Date: Mon, 3 Nov 2025 20:04:08 +0530 Subject: [PATCH 02/37] feat(compliance): Add HIPAA compliance framework for GCP (#8955) Co-authored-by: pedrooot --- README.md | 2 +- dashboard/compliance/hipaa_gcp.py | 25 ++ prowler/CHANGELOG.md | 1 + prowler/compliance/gcp/hipaa_gcp.json | 415 ++++++++++++++++++++++++++ 4 files changed, 442 insertions(+), 1 deletion(-) create mode 100644 dashboard/compliance/hipaa_gcp.py create mode 100644 prowler/compliance/gcp/hipaa_gcp.json diff --git a/README.md b/README.md index baf226ec89..6c9110f441 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ prowler dashboard | 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) | Support | Stage | Interface | |---|---|---|---|---|---|---|---| | AWS | 576 | 82 | 38 | 10 | Official | Stable | UI, API, CLI | -| GCP | 79 | 13 | 11 | 3 | Official | Stable | UI, API, CLI | +| GCP | 79 | 13 | 12 | 3 | Official | Stable | UI, API, CLI | | Azure | 162 | 19 | 12 | 4 | Official | Stable | UI, API, CLI | | Kubernetes | 83 | 7 | 5 | 7 | Official | Stable | UI, API, CLI | | GitHub | 17 | 2 | 1 | 0 | Official | Stable | UI, API, CLI | diff --git a/dashboard/compliance/hipaa_gcp.py b/dashboard/compliance/hipaa_gcp.py new file mode 100644 index 0000000000..b0a8eb6582 --- /dev/null +++ b/dashboard/compliance/hipaa_gcp.py @@ -0,0 +1,25 @@ +import warnings + +from dashboard.common_methods import get_section_containers_format3 + +warnings.filterwarnings("ignore") + + +def get_table(data): + + aux = data[ + [ + "REQUIREMENTS_ID", + "REQUIREMENTS_ATTRIBUTES_SECTION", + "REQUIREMENTS_DESCRIPTION", + "CHECKID", + "STATUS", + "REGION", + "ACCOUNTID", + "RESOURCEID", + ] + ].copy() + + return get_section_containers_format3( + aux, "REQUIREMENTS_ATTRIBUTES_SECTION", "REQUIREMENTS_ID" + ) diff --git a/prowler/CHANGELOG.md b/prowler/CHANGELOG.md index 7f3f8b946f..beda5db547 100644 --- a/prowler/CHANGELOG.md +++ b/prowler/CHANGELOG.md @@ -13,6 +13,7 @@ All notable changes to the **Prowler SDK** are documented in this file. - `cloudstorage_bucket_logging_enabled` check for GCP provider [(#9091)](https://github.com/prowler-cloud/prowler/pull/9091) - C5 compliance framework for Azure provider [(#9081)](https://github.com/prowler-cloud/prowler/pull/9081) - C5 compliance framework for the GCP provider [(#9097)](https://github.com/prowler-cloud/prowler/pull/9097) +- HIPAA compliance framework for the GCP provider [(#8955)](https://github.com/prowler-cloud/prowler/pull/8955) ### Changed - Update AWS Direct Connect service metadata to new format [(#8855)](https://github.com/prowler-cloud/prowler/pull/8855) diff --git a/prowler/compliance/gcp/hipaa_gcp.json b/prowler/compliance/gcp/hipaa_gcp.json new file mode 100644 index 0000000000..6bacc72e9e --- /dev/null +++ b/prowler/compliance/gcp/hipaa_gcp.json @@ -0,0 +1,415 @@ +{ + "Framework": "HIPAA", + "Name": "HIPAA compliance framework for GCP", + "Version": "", + "Provider": "GCP", + "Description": "The Health Insurance Portability and Accountability Act of 1996 (HIPAA) is legislation that helps US workers to retain health insurance coverage when they change or lose jobs. The legislation also seeks to encourage electronic health records to improve the efficiency and quality of the US healthcare system through improved information sharing. This framework maps HIPAA requirements to Google Cloud Platform (GCP) security best practices.", + "Requirements": [ + { + "Id": "164_308_a_1_ii_a", + "Name": "164.308(a)(1)(ii)(A) Risk analysis", + "Description": "Conduct an accurate and thorough assessment of the potential risks and vulnerabilities to the confidentiality, integrity, and availability of electronic protected health information held by the covered entity or business associate.", + "Attributes": [ + { + "ItemId": "164_308_a_1_ii_a", + "Section": "164.308 Administrative Safeguards", + "Service": "gcp" + } + ], + "Checks": [ + "iam_cloud_asset_inventory_enabled", + "securitycenter_security_health_analytics_enabled", + "essentialcontacts_security_contacts_configured" + ] + }, + { + "Id": "164_308_a_1_ii_b", + "Name": "164.308(a)(1)(ii)(B) Risk Management", + "Description": "Implement security measures sufficient to reduce risks and vulnerabilities to a reasonable and appropriate level to comply with 164.306(a): Ensure the confidentiality, integrity, and availability of all electronic protected health information the covered entity or business associate creates, receives, maintains, or transmits.", + "Attributes": [ + { + "ItemId": "164_308_a_1_ii_b", + "Section": "164.308 Administrative Safeguards", + "Service": "gcp" + } + ], + "Checks": [ + "cloudstorage_bucket_encryption", + "cloudstorage_bucket_public_access", + "cloudstorage_bucket_uniform_access", + "cloudsql_instance_automatic_backups_enabled", + "cloudsql_instance_encryption_enabled", + "cloudsql_instance_public_access", + "compute_instance_public_ip", + "compute_disk_encryption_enabled", + "compute_firewall_rdp_access_from_internet_restricted", + "compute_firewall_ssh_access_from_internet_restricted", + "compute_network_legacy_network_not_used", + "gke_cluster_master_authorized_networks_enabled", + "gke_cluster_private_cluster_enabled", + "iam_sa_no_administrative_privileges", + "iam_no_service_roles_at_project_level", + "bigquery_dataset_public_access", + "bigquery_dataset_cmek_encryption", + "kms_key_rotation_enabled" + ] + }, + { + "Id": "164_308_a_1_ii_d", + "Name": "164.308(a)(1)(ii)(D) Information system activity review", + "Description": "Implement procedures to regularly review records of information system activity, such as audit logs, access reports, and security incident tracking reports.", + "Attributes": [ + { + "ItemId": "164_308_a_1_ii_d", + "Section": "164.308 Administrative Safeguards", + "Service": "gcp" + } + ], + "Checks": [ + "logging_sink_created", + "logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled", + "logging_log_metric_filter_and_alert_for_project_ownership_changes_enabled", + "logging_log_metric_filter_and_alert_for_custom_role_changes_enabled", + "logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled", + "logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled", + "logging_log_metric_filter_and_alert_for_vpc_firewall_rule_changes_enabled", + "logging_log_metric_filter_and_alert_for_bucket_permission_changes_enabled", + "logging_log_metric_filter_and_alert_for_sql_instance_configuration_changes_enabled" + ] + }, + { + "Id": "164_308_a_3_i", + "Name": "164.308(a)(3)(i) Workforce security", + "Description": "Implement policies and procedures to ensure that all members of its workforce have appropriate access to electronic protected health information.", + "Attributes": [ + { + "ItemId": "164_308_a_3_i", + "Section": "164.308 Administrative Safeguards", + "Service": "gcp" + } + ], + "Checks": [ + "iam_sa_no_administrative_privileges", + "iam_no_service_roles_at_project_level", + "iam_role_kms_enforce_separation_of_duties", + "iam_role_sa_enforce_separation_of_duties", + "iam_sa_no_user_managed_keys", + "iam_sa_user_managed_key_unused" + ] + }, + { + "Id": "164_308_a_4_i", + "Name": "164.308(a)(4)(i) Information access management", + "Description": "Implement policies and procedures for authorizing access to electronic protected health information that are consistent with the applicable requirements of subpart E of this part.", + "Attributes": [ + { + "ItemId": "164_308_a_4_i", + "Section": "164.308 Administrative Safeguards", + "Service": "gcp" + } + ], + "Checks": [ + "iam_account_access_approval_enabled", + "iam_sa_no_administrative_privileges", + "iam_no_service_roles_at_project_level", + "iam_organization_essential_contacts_configured", + "cloudstorage_bucket_public_access", + "cloudsql_instance_public_access", + "bigquery_dataset_public_access" + ] + }, + { + "Id": "164_308_a_5_ii_c", + "Name": "164.308(a)(5)(ii)(C) Log-in monitoring", + "Description": "Procedures for monitoring log-in attempts and reporting discrepancies.", + "Attributes": [ + { + "ItemId": "164_308_a_5_ii_c", + "Section": "164.308 Administrative Safeguards", + "Service": "gcp" + } + ], + "Checks": [ + "logging_sink_created", + "logging_log_metric_filter_and_alert_for_project_ownership_changes_enabled", + "logging_log_metric_filter_and_alert_for_custom_role_changes_enabled" + ] + }, + { + "Id": "164_308_a_6_ii", + "Name": "164.308(a)(6)(ii) Response and reporting", + "Description": "Identify and respond to suspected or known security incidents; mitigate, to the extent practicable, harmful effects of security incidents that are known to the covered entity or business associate; and document security incidents and their outcomes.", + "Attributes": [ + { + "ItemId": "164_308_a_6_ii", + "Section": "164.308 Administrative Safeguards", + "Service": "gcp" + } + ], + "Checks": [ + "securitycenter_security_health_analytics_enabled", + "essentialcontacts_security_contacts_configured", + "logging_sink_created" + ] + }, + { + "Id": "164_308_a_7_i", + "Name": "164.308(a)(7)(i) Contingency plan", + "Description": "Establish (and implement as needed) policies and procedures for responding to an emergency or other occurrence (for example, fire, vandalism, system failure, and natural disaster) that damages systems that contain electronic protected health information.", + "Attributes": [ + { + "ItemId": "164_308_a_7_i", + "Section": "164.308 Administrative Safeguards", + "Service": "gcp" + } + ], + "Checks": [ + "cloudsql_instance_automatic_backups_enabled", + "compute_disk_snapshot_encryption_enabled", + "gke_cluster_stackdriver_logging_enabled" + ] + }, + { + "Id": "164_308_a_7_ii_a", + "Name": "164.308(a)(7)(ii)(A) Data backup plan", + "Description": "Establish and implement procedures to create and maintain retrievable exact copies of electronic protected health information.", + "Attributes": [ + { + "ItemId": "164_308_a_7_ii_a", + "Section": "164.308 Administrative Safeguards", + "Service": "gcp" + } + ], + "Checks": [ + "cloudsql_instance_automatic_backups_enabled", + "cloudstorage_bucket_object_versioning", + "compute_disk_snapshot_encryption_enabled" + ] + }, + { + "Id": "164_308_a_7_ii_b", + "Name": "164.308(a)(7)(ii)(B) Disaster recovery plan", + "Description": "Establish (and implement as needed) procedures to restore any loss of data.", + "Attributes": [ + { + "ItemId": "164_308_a_7_ii_b", + "Section": "164.308 Administrative Safeguards", + "Service": "gcp" + } + ], + "Checks": [ + "cloudsql_instance_automatic_backups_enabled", + "cloudsql_instance_point_in_time_recovery_enabled", + "cloudstorage_bucket_object_versioning" + ] + }, + { + "Id": "164_310_a_1", + "Name": "164.310(a)(1) Facility access controls", + "Description": "Implement policies and procedures to limit physical access to its electronic information systems and the facility or facilities in which they are housed, while ensuring that properly authorized access is allowed.", + "Attributes": [ + { + "ItemId": "164_310_a_1", + "Section": "164.310 Physical Safeguards", + "Service": "gcp" + } + ], + "Checks": [ + "compute_instance_public_ip", + "compute_firewall_rdp_access_from_internet_restricted", + "compute_firewall_ssh_access_from_internet_restricted", + "gke_cluster_private_cluster_enabled" + ] + }, + { + "Id": "164_310_d_1", + "Name": "164.310(d)(1) Device and media controls", + "Description": "Implement policies and procedures that govern the receipt and removal of hardware and electronic media that contain electronic protected health information into and out of a facility, and the movement of these items within the facility.", + "Attributes": [ + { + "ItemId": "164_310_d_1", + "Section": "164.310 Physical Safeguards", + "Service": "gcp" + } + ], + "Checks": [ + "compute_disk_encryption_enabled", + "compute_disk_snapshot_encryption_enabled", + "cloudstorage_bucket_encryption" + ] + }, + { + "Id": "164_312_a_1", + "Name": "164.312(a)(1) Access control", + "Description": "Implement technical policies and procedures for electronic information systems that maintain electronic protected health information to allow access only to those persons or software programs that have been granted access rights as specified in 164.308(a)(4).", + "Attributes": [ + { + "ItemId": "164_312_a_1", + "Section": "164.312 Technical Safeguards", + "Service": "gcp" + } + ], + "Checks": [ + "iam_sa_no_administrative_privileges", + "iam_no_service_roles_at_project_level", + "iam_account_access_approval_enabled", + "cloudstorage_bucket_public_access", + "cloudstorage_bucket_uniform_access", + "cloudsql_instance_public_access", + "bigquery_dataset_public_access", + "compute_instance_public_ip", + "gke_cluster_private_cluster_enabled" + ] + }, + { + "Id": "164_312_a_2_i", + "Name": "164.312(a)(2)(i) Unique user identification", + "Description": "Assign a unique name and/or number for identifying and tracking user identity.", + "Attributes": [ + { + "ItemId": "164_312_a_2_i", + "Section": "164.312 Technical Safeguards", + "Service": "gcp" + } + ], + "Checks": [ + "iam_sa_no_user_managed_keys", + "iam_sa_user_managed_key_unused" + ] + }, + { + "Id": "164_312_a_2_iv", + "Name": "164.312(a)(2)(iv) Encryption and decryption", + "Description": "Implement a mechanism to encrypt and decrypt electronic protected health information.", + "Attributes": [ + { + "ItemId": "164_312_a_2_iv", + "Section": "164.312 Technical Safeguards", + "Service": "gcp" + } + ], + "Checks": [ + "cloudstorage_bucket_encryption", + "cloudsql_instance_encryption_enabled", + "compute_disk_encryption_enabled", + "compute_disk_snapshot_encryption_enabled", + "bigquery_dataset_cmek_encryption", + "kms_key_rotation_enabled" + ] + }, + { + "Id": "164_312_b", + "Name": "164.312(b) Audit controls", + "Description": "Implement hardware, software, and/or procedural mechanisms that record and examine activity in information systems that contain or use electronic protected health information.", + "Attributes": [ + { + "ItemId": "164_312_b", + "Section": "164.312 Technical Safeguards", + "Service": "gcp" + } + ], + "Checks": [ + "logging_sink_created", + "logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled", + "logging_log_metric_filter_and_alert_for_project_ownership_changes_enabled", + "logging_log_metric_filter_and_alert_for_custom_role_changes_enabled", + "logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled", + "logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled", + "logging_log_metric_filter_and_alert_for_vpc_firewall_rule_changes_enabled", + "logging_log_metric_filter_and_alert_for_bucket_permission_changes_enabled", + "logging_log_metric_filter_and_alert_for_sql_instance_configuration_changes_enabled", + "gke_cluster_stackdriver_logging_enabled" + ] + }, + { + "Id": "164_312_c_1", + "Name": "164.312(c)(1) Integrity", + "Description": "Implement policies and procedures to protect electronic protected health information from improper alteration or destruction.", + "Attributes": [ + { + "ItemId": "164_312_c_1", + "Section": "164.312 Technical Safeguards", + "Service": "gcp" + } + ], + "Checks": [ + "cloudstorage_bucket_object_versioning", + "cloudsql_instance_automatic_backups_enabled", + "cloudsql_instance_point_in_time_recovery_enabled", + "kms_key_rotation_enabled" + ] + }, + { + "Id": "164_312_d", + "Name": "164.312(d) Person or entity authentication", + "Description": "Implement procedures to verify that a person or entity seeking access to electronic protected health information is the one claimed.", + "Attributes": [ + { + "ItemId": "164_312_d", + "Section": "164.312 Technical Safeguards", + "Service": "gcp" + } + ], + "Checks": [ + "iam_account_access_approval_enabled", + "iam_sa_no_user_managed_keys" + ] + }, + { + "Id": "164_312_e_1", + "Name": "164.312(e)(1) Transmission security", + "Description": "Implement technical security measures to guard against unauthorized access to electronic protected health information that is being transmitted over an electronic communications network.", + "Attributes": [ + { + "ItemId": "164_312_e_1", + "Section": "164.312 Technical Safeguards", + "Service": "gcp" + } + ], + "Checks": [ + "cloudstorage_bucket_encryption", + "compute_firewall_rdp_access_from_internet_restricted", + "compute_firewall_ssh_access_from_internet_restricted", + "cloudsql_instance_ssl_required", + "gke_cluster_master_authorized_networks_enabled" + ] + }, + { + "Id": "164_312_e_2_i", + "Name": "164.312(e)(2)(i) Integrity controls", + "Description": "Implement security measures to ensure that electronically transmitted electronic protected health information is not improperly modified without detection until disposed of.", + "Attributes": [ + { + "ItemId": "164_312_e_2_i", + "Section": "164.312 Technical Safeguards", + "Service": "gcp" + } + ], + "Checks": [ + "cloudstorage_bucket_object_versioning", + "cloudsql_instance_automatic_backups_enabled", + "logging_sink_created" + ] + }, + { + "Id": "164_312_e_2_ii", + "Name": "164.312(e)(2)(ii) Encryption", + "Description": "Implement a mechanism to encrypt electronic protected health information whenever deemed appropriate.", + "Attributes": [ + { + "ItemId": "164_312_e_2_ii", + "Section": "164.312 Technical Safeguards", + "Service": "gcp" + } + ], + "Checks": [ + "cloudstorage_bucket_encryption", + "cloudsql_instance_encryption_enabled", + "compute_disk_encryption_enabled", + "bigquery_dataset_cmek_encryption", + "kms_key_rotation_enabled", + "cloudsql_instance_ssl_required" + ] + } + ] +} From 000b48b49228ce80e879f1debb603bde7f282f83 Mon Sep 17 00:00:00 2001 From: Alejandro Bailo <59607668+alejandrobailo@users.noreply.github.com> Date: Mon, 3 Nov 2025 16:01:11 +0100 Subject: [PATCH 03/37] feat(ui): add Customer Support link to sidebar (#9143) --- ui/CHANGELOG.md | 1 + ui/lib/menu-list.ts | 12 +++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/ui/CHANGELOG.md b/ui/CHANGELOG.md index 325b7ee876..9ff46abb81 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 - RSS feeds support [(#9109)](https://github.com/prowler-cloud/prowler/pull/9109) +- Customer Support menu item [(#9143)](https://github.com/prowler-cloud/prowler/pull/9143) ### 🔄 Changed diff --git a/ui/lib/menu-list.ts b/ui/lib/menu-list.ts index e2e83f0951..c2f7ff6f34 100644 --- a/ui/lib/menu-list.ts +++ b/ui/lib/menu-list.ts @@ -5,6 +5,7 @@ import { Group, LayoutGrid, Mail, + MessageCircleQuestion, Puzzle, Settings, ShieldCheck, @@ -25,7 +26,6 @@ import { APIdocIcon, AWSIcon, AzureIcon, - CircleHelpIcon, DocIcon, GCPIcon, GithubIcon, @@ -250,11 +250,17 @@ export const getMenuList = ({ label: "API reference", icon: APIdocIcon, }, + { + href: "https://customer.support.prowler.com/servicedesk/customer/portal/9/create/102", + target: "_blank", + label: "Customer Support", + icon: MessageCircleQuestion, + }, { href: "https://github.com/prowler-cloud/prowler/issues", target: "_blank", - label: "Support", - icon: CircleHelpIcon, + label: "Community Support", + icon: GithubIcon, }, ], defaultOpen: false, From 8b0b9cad32a9153cc704487e5f84f66d679b3217 Mon Sep 17 00:00:00 2001 From: Rakan Farhouda Date: Mon, 3 Nov 2025 18:09:41 +0300 Subject: [PATCH 04/37] fix(aws): update logger import in to use the correct module (#9138) --- prowler/providers/aws/services/account/account_service.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prowler/providers/aws/services/account/account_service.py b/prowler/providers/aws/services/account/account_service.py index 08000112ca..2ea4217b17 100644 --- a/prowler/providers/aws/services/account/account_service.py +++ b/prowler/providers/aws/services/account/account_service.py @@ -1,9 +1,9 @@ from typing import Optional -from venv import logger from botocore.client import ClientError from pydantic.v1 import BaseModel +from prowler.lib.logger import logger from prowler.providers.aws.lib.service.service import AWSService From 61a66f2bbfb5bbce20c344a351c21b9a4414afde Mon Sep 17 00:00:00 2001 From: Hugo Pereira Brito <101209179+HugoPBrito@users.noreply.github.com> Date: Mon, 3 Nov 2025 17:31:18 +0100 Subject: [PATCH 05/37] fix(aws): `firehose_stream_encrypted_at_rest` description and logic (#9142) --- prowler/CHANGELOG.md | 1 + ...ose_stream_encrypted_at_rest.metadata.json | 2 +- .../firehose_stream_encrypted_at_rest.py | 31 ++-- .../firehose_stream_encrypted_at_rest_test.py | 147 +++++++++++++++++- 4 files changed, 159 insertions(+), 22 deletions(-) diff --git a/prowler/CHANGELOG.md b/prowler/CHANGELOG.md index beda5db547..de74f598a6 100644 --- a/prowler/CHANGELOG.md +++ b/prowler/CHANGELOG.md @@ -43,6 +43,7 @@ All notable changes to the **Prowler SDK** are documented in this file. - Fix `ec2_instance_with_outdated_ami` check to handle None AMIs [(#9046)](https://github.com/prowler-cloud/prowler/pull/9046) - Handle timestamp when transforming compliance findings in CCC [(#9042)](https://github.com/prowler-cloud/prowler/pull/9042) - Update `resource_id` for admincenter service and avoid unnecessary msgraph requests [(#9019)](https://github.com/prowler-cloud/prowler/pull/9019) +- Fix `firehose_stream_encrypted_at_rest` description and findings clarity [(#9142)](https://github.com/prowler-cloud/prowler/pull/9142) --- diff --git a/prowler/providers/aws/services/firehose/firehose_stream_encrypted_at_rest/firehose_stream_encrypted_at_rest.metadata.json b/prowler/providers/aws/services/firehose/firehose_stream_encrypted_at_rest/firehose_stream_encrypted_at_rest.metadata.json index f2887dd121..4aff28188c 100644 --- a/prowler/providers/aws/services/firehose/firehose_stream_encrypted_at_rest/firehose_stream_encrypted_at_rest.metadata.json +++ b/prowler/providers/aws/services/firehose/firehose_stream_encrypted_at_rest/firehose_stream_encrypted_at_rest.metadata.json @@ -13,7 +13,7 @@ "ResourceIdTemplate": "", "Severity": "medium", "ResourceType": "AwsKinesisStream", - "Description": "**Amazon Data Firehose** delivery streams use **server-side encryption at rest** with AWS KMS. For `DirectPut` or database sources, the stream must have KMS encryption enabled. When the source is **Kinesis Data Streams**, the source's encryption is considered. For **MSK** sources, encryption at rest is always applied by AWS.", + "Description": "**Amazon Data Firehose** delivery streams must enable **server-side encryption at rest** with AWS KMS regardless of the source type. Encryption of upstream sources such as **Kinesis Data Streams** or **MSK** does not replace the need to protect the delivery stream itself.", "Risk": "Unencrypted Firehose data at rest can be read if storage or backups are accessed, harming **confidentiality** and **integrity**. Disk-level access, snapshots, or misconfigured destinations enable data exfiltration or tampering. Lacking KMS-backed controls also reduces key rotation, segregation of duties, and auditability.", "RelatedUrl": "", "AdditionalURLs": [ diff --git a/prowler/providers/aws/services/firehose/firehose_stream_encrypted_at_rest/firehose_stream_encrypted_at_rest.py b/prowler/providers/aws/services/firehose/firehose_stream_encrypted_at_rest/firehose_stream_encrypted_at_rest.py index 21ca07a920..6245e4b5b7 100644 --- a/prowler/providers/aws/services/firehose/firehose_stream_encrypted_at_rest/firehose_stream_encrypted_at_rest.py +++ b/prowler/providers/aws/services/firehose/firehose_stream_encrypted_at_rest/firehose_stream_encrypted_at_rest.py @@ -26,23 +26,27 @@ class firehose_stream_encrypted_at_rest(Check): for stream in firehose_client.delivery_streams.values(): report = Check_Report_AWS(metadata=self.metadata(), resource=stream) report.status = "FAIL" - report.status_extended = f"Firehose Stream {stream.name} does not have at rest encryption enabled or the source stream is not encrypted." + report.status_extended = f"Firehose Stream {stream.name} does not have at rest encryption enabled." - # Encrypted Kinesis Stream source - if stream.delivery_stream_type == "KinesisStreamAsSource": - source_stream = kinesis_client.streams.get( - stream.source.kinesis_stream.kinesis_stream_arn - ) + if stream.kms_encryption == EncryptionStatus.ENABLED: + report.status = "PASS" + report.status_extended = f"Firehose Stream {stream.name} does have at rest encryption enabled." + + elif stream.delivery_stream_type == "KinesisStreamAsSource": + source_stream_arn = stream.source.kinesis_stream.kinesis_stream_arn + source_stream = kinesis_client.streams.get(source_stream_arn, None) if source_stream: - if source_stream.encrypted_at_rest != EncryptionType.NONE: - report.status = "PASS" - report.status_extended = f"Firehose Stream {stream.name} does not have at rest encryption enabled but the source stream {source_stream.name} has at rest encryption enabled." + if source_stream.encrypted_at_rest == EncryptionType.KMS: + report.status_extended = f"Firehose Stream {stream.name} does not have at rest encryption enabled even though source stream {source_stream.name} has at rest encryption enabled." + else: + report.status_extended = f"Firehose Stream {stream.name} does not have at rest encryption enabled and the source stream {source_stream.name} is not encrypted at rest." + else: + report.status_extended = f"Firehose Stream {stream.name} does not have at rest encryption enabled and the referenced source stream could not be found." - # MSK source - check if the MSK cluster has encryption at rest with CMK elif stream.delivery_stream_type == "MSKAsSource": msk_cluster_arn = stream.source.msk.msk_cluster_arn + msk_cluster = None if msk_cluster_arn: - msk_cluster = None for cluster in kafka_client.clusters.values(): if cluster.arn == msk_cluster_arn: msk_cluster = cluster @@ -59,11 +63,6 @@ class firehose_stream_encrypted_at_rest(Check): else: report.status_extended = f"Firehose Stream {stream.name} uses MSK source which always has encryption at rest enabled by AWS." - # Check if the stream has encryption enabled directly (DirectPut or DatabaseAsSource cases) - elif stream.kms_encryption == EncryptionStatus.ENABLED: - report.status = "PASS" - report.status_extended = f"Firehose Stream {stream.name} does have at rest encryption enabled." - findings.append(report) return findings diff --git a/tests/providers/aws/services/firehose/firehose_stream_encrypted_at_rest/firehose_stream_encrypted_at_rest_test.py b/tests/providers/aws/services/firehose/firehose_stream_encrypted_at_rest/firehose_stream_encrypted_at_rest_test.py index 621ecc2457..8fb4f94980 100644 --- a/tests/providers/aws/services/firehose/firehose_stream_encrypted_at_rest/firehose_stream_encrypted_at_rest_test.py +++ b/tests/providers/aws/services/firehose/firehose_stream_encrypted_at_rest/firehose_stream_encrypted_at_rest_test.py @@ -198,7 +198,7 @@ class Test_firehose_stream_encrypted_at_rest: assert result[0].status == "FAIL" assert ( result[0].status_extended - == f"Firehose Stream {stream_name} does not have at rest encryption enabled or the source stream is not encrypted." + == f"Firehose Stream {stream_name} does not have at rest encryption enabled." ) @mock_aws @@ -253,7 +253,7 @@ class Test_firehose_stream_encrypted_at_rest: assert result[0].status == "FAIL" assert ( result[0].status_extended - == f"Firehose Stream {stream_name} does not have at rest encryption enabled or the source stream is not encrypted." + == f"Firehose Stream {stream_name} does not have at rest encryption enabled." ) @mock_aws @@ -319,12 +319,149 @@ class Test_firehose_stream_encrypted_at_rest: result = check.execute() assert len(result) == 1 - assert result[0].status == "PASS" + assert result[0].status == "FAIL" assert ( result[0].status_extended - == f"Firehose Stream {stream_name} does not have at rest encryption enabled but the source stream test-kinesis-stream has at rest encryption enabled." + == f"Firehose Stream {stream_name} does not have at rest encryption enabled even though source stream test-kinesis-stream has at rest encryption enabled." ) + @mock_aws + def test_stream_kinesis_source_encrypted_firehose_encryption_enabled(self): + # Generate Kinesis client + kinesis_client = client("kinesis", region_name=AWS_REGION_EU_WEST_1) + kinesis_client.create_stream( + StreamName="test-kinesis-stream", + ShardCount=1, + ) + + kinesis_stream_arn = f"arn:aws:kinesis:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:stream/test-kinesis-stream" + + # Enable encryption on the Kinesis stream + kinesis_client.start_stream_encryption( + StreamName="test-kinesis-stream", + EncryptionType="KMS", + KeyId=f"arn:aws:kms:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:key/test-kms-key-id", + ) + + # Generate Firehose client + firehose = client("firehose", region_name=AWS_REGION_EU_WEST_1) + delivery_stream = firehose.create_delivery_stream( + DeliveryStreamName="test-delivery-stream", + DeliveryStreamType="KinesisStreamAsSource", + KinesisStreamSourceConfiguration={ + "KinesisStreamARN": kinesis_stream_arn, + "RoleARN": "arn:aws:iam::012345678901:role/firehose-role", + }, + S3DestinationConfiguration={ + "RoleARN": "arn:aws:iam::012345678901:role/firehose-role", + "BucketARN": "arn:aws:s3:::test-bucket", + "Prefix": "", + "BufferingHints": {"IntervalInSeconds": 300, "SizeInMBs": 5}, + "CompressionFormat": "UNCOMPRESSED", + }, + ) + stream_name = delivery_stream["DeliveryStreamARN"].split("/")[-1] + + firehose.start_delivery_stream_encryption( + DeliveryStreamName=stream_name, + DeliveryStreamEncryptionConfigurationInput={ + "KeyType": "AWS_OWNED_CMK", + }, + ) + + from prowler.providers.aws.services.firehose.firehose_service import Firehose + from prowler.providers.aws.services.kinesis.kinesis_service import Kinesis + + aws_provider = set_mocked_aws_provider([AWS_REGION_EU_WEST_1]) + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=aws_provider, + ), + mock.patch( + "prowler.providers.aws.services.firehose.firehose_stream_encrypted_at_rest.firehose_stream_encrypted_at_rest.firehose_client", + new=Firehose(aws_provider), + ), + mock.patch( + "prowler.providers.aws.services.firehose.firehose_stream_encrypted_at_rest.firehose_stream_encrypted_at_rest.kinesis_client", + new=Kinesis(aws_provider), + ), + ): + from prowler.providers.aws.services.firehose.firehose_stream_encrypted_at_rest.firehose_stream_encrypted_at_rest import ( + firehose_stream_encrypted_at_rest, + ) + + check = firehose_stream_encrypted_at_rest() + result = check.execute() + + assert len(result) == 1 + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Firehose Stream {stream_name} does have at rest encryption enabled." + ) + + @mock_aws + def test_stream_kinesis_source_not_encrypted(self): + # Generate Kinesis client + kinesis_client = client("kinesis", region_name=AWS_REGION_EU_WEST_1) + kinesis_client.create_stream( + StreamName="test-kinesis-stream", + ShardCount=1, + ) + kinesis_stream_arn = f"arn:aws:kinesis:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:stream/test-kinesis-stream" + + # Generate Firehose client + firehose_client = client("firehose", region_name=AWS_REGION_EU_WEST_1) + delivery_stream = firehose_client.create_delivery_stream( + DeliveryStreamName="test-delivery-stream", + DeliveryStreamType="KinesisStreamAsSource", + KinesisStreamSourceConfiguration={ + "KinesisStreamARN": kinesis_stream_arn, + "RoleARN": "arn:aws:iam::012345678901:role/firehose-role", + }, + S3DestinationConfiguration={ + "RoleARN": "arn:aws:iam::012345678901:role/firehose-role", + "BucketARN": "arn:aws:s3:::test-bucket", + "Prefix": "", + "BufferingHints": {"IntervalInSeconds": 300, "SizeInMBs": 5}, + "CompressionFormat": "UNCOMPRESSED", + }, + ) + stream_name = delivery_stream["DeliveryStreamARN"].split("/")[-1] + + from prowler.providers.aws.services.firehose.firehose_service import Firehose + from prowler.providers.aws.services.kinesis.kinesis_service import Kinesis + + aws_provider = set_mocked_aws_provider([AWS_REGION_EU_WEST_1]) + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=aws_provider, + ), + mock.patch( + "prowler.providers.aws.services.firehose.firehose_stream_encrypted_at_rest.firehose_stream_encrypted_at_rest.firehose_client", + new=Firehose(aws_provider), + ), + mock.patch( + "prowler.providers.aws.services.firehose.firehose_stream_encrypted_at_rest.firehose_stream_encrypted_at_rest.kinesis_client", + new=Kinesis(aws_provider), + ), + ): + from prowler.providers.aws.services.firehose.firehose_stream_encrypted_at_rest.firehose_stream_encrypted_at_rest import ( + firehose_stream_encrypted_at_rest, + ) + + check = firehose_stream_encrypted_at_rest() + result = check.execute() + + assert len(result) == 1 + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Firehose Stream {stream_name} does not have at rest encryption enabled and the source stream test-kinesis-stream is not encrypted at rest." + ) + @mock_aws def test_stream_kinesis_source_not_found(self): """Test case when Kinesis source stream is not found - should handle None gracefully""" @@ -377,5 +514,5 @@ class Test_firehose_stream_encrypted_at_rest: assert result[0].status == "FAIL" assert ( result[0].status_extended - == f"Firehose Stream {stream_name} does not have at rest encryption enabled or the source stream is not encrypted." + == f"Firehose Stream {stream_name} does not have at rest encryption enabled and the referenced source stream could not be found." ) From 601495166c17b8da4fe6d11e758b97170173b226 Mon Sep 17 00:00:00 2001 From: Andoni Alonso <14891798+andoniaf@users.noreply.github.com> Date: Tue, 4 Nov 2025 10:01:58 +0100 Subject: [PATCH 06/37] feat(iac): add IaC to Prowler App (#8751) --- api/CHANGELOG.md | 1 + api/Dockerfile | 21 ++ .../api/migrations/0054_iac_provider.py | 35 +++ api/src/backend/api/models.py | 14 ++ api/src/backend/api/specs/v1.yaml | 85 +++++++ api/src/backend/api/tests/test_views.py | 37 +++ api/src/backend/api/utils.py | 41 ++- .../api/v1/serializer_utils/providers.py | 15 ++ api/src/backend/api/v1/serializers.py | 10 + api/src/backend/tasks/jobs/export.py | 4 + docs/introduction.mdx | 2 +- prowler/CHANGELOG.md | 5 + prowler/__main__.py | 6 + prowler/lib/outputs/finding.py | 19 +- prowler/lib/scan/scan.py | 129 ++++++++-- prowler/providers/iac/iac_provider.py | 233 +++++++++++++++--- tests/lib/scan/scan_test.py | 46 +++- tests/providers/iac/iac_provider_test.py | 87 +++++-- ui/CHANGELOG.md | 4 +- ui/actions/providers/providers.ts | 18 ++ .../components/accounts-selector.tsx | 2 + .../components/provider-type-selector.tsx | 9 + .../filters/custom-provider-inputs.tsx | 10 + .../filters/custom-select-provider.tsx | 5 + .../providers-badge/iac-provider-badge.tsx | 44 ++++ ui/components/icons/providers-badge/index.ts | 1 + .../provider-overview/provider-overview.tsx | 4 + .../providers/enhanced-provider-selector.tsx | 1 + .../providers/radio-group-provider.tsx | 7 + .../workflow/forms/base-credentials-form.tsx | 7 + .../workflow/forms/connect-account-form.tsx | 5 + .../via-credentials/iac-credentials-form.tsx | 33 +++ .../workflow/forms/via-credentials/index.ts | 1 + .../ui/entities/get-provider-logo.tsx | 5 + ui/lib/external-urls.ts | 5 + .../build-crendentials.ts | 18 ++ .../provider-credential-fields.ts | 6 + ui/types/components.ts | 7 + ui/types/formSchemas.ts | 48 ++-- ui/types/providers.ts | 1 + 40 files changed, 903 insertions(+), 128 deletions(-) create mode 100644 api/src/backend/api/migrations/0054_iac_provider.py create mode 100644 ui/components/icons/providers-badge/iac-provider-badge.tsx create mode 100644 ui/components/providers/workflow/forms/via-credentials/iac-credentials-form.tsx diff --git a/api/CHANGELOG.md b/api/CHANGELOG.md index 8b36cb94a1..5fcf573805 100644 --- a/api/CHANGELOG.md +++ b/api/CHANGELOG.md @@ -5,6 +5,7 @@ All notable changes to the **Prowler API** are documented in this file. ## [1.15.0] (Prowler UNRELEASED) ### Added +- IaC (Infrastructure as Code) provider support for remote repositories [(#8751)](https://github.com/prowler-cloud/prowler/pull/8751) - Extend `GET /api/v1/providers` with provider-type filters and optional pagination disable to support the new Overview filters [(#8975)](https://github.com/prowler-cloud/prowler/pull/8975) - New endpoint to retrieve the number of providers grouped by provider type [(#8975)](https://github.com/prowler-cloud/prowler/pull/8975) - Support for configuring multiple LLM providers [(#8772)](https://github.com/prowler-cloud/prowler/pull/8772) diff --git a/api/Dockerfile b/api/Dockerfile index a3cfb21782..2d7883a957 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -5,6 +5,9 @@ LABEL maintainer="https://github.com/prowler-cloud/api" ARG POWERSHELL_VERSION=7.5.0 ENV POWERSHELL_VERSION=${POWERSHELL_VERSION} +ARG TRIVY_VERSION=0.66.0 +ENV TRIVY_VERSION=${TRIVY_VERSION} + # hadolint ignore=DL3008 RUN apt-get update && apt-get install -y --no-install-recommends \ wget \ @@ -36,6 +39,24 @@ RUN ARCH=$(uname -m) && \ ln -s /opt/microsoft/powershell/7/pwsh /usr/bin/pwsh && \ rm /tmp/powershell.tar.gz +# Install Trivy for IaC scanning +RUN ARCH=$(uname -m) && \ + if [ "$ARCH" = "x86_64" ]; then \ + TRIVY_ARCH="Linux-64bit" ; \ + elif [ "$ARCH" = "aarch64" ]; then \ + TRIVY_ARCH="Linux-ARM64" ; \ + else \ + echo "Unsupported architecture for Trivy: $ARCH" && exit 1 ; \ + fi && \ + wget --progress=dot:giga "https://github.com/aquasecurity/trivy/releases/download/v${TRIVY_VERSION}/trivy_${TRIVY_VERSION}_${TRIVY_ARCH}.tar.gz" -O /tmp/trivy.tar.gz && \ + tar zxf /tmp/trivy.tar.gz -C /tmp && \ + mv /tmp/trivy /usr/local/bin/trivy && \ + chmod +x /usr/local/bin/trivy && \ + rm /tmp/trivy.tar.gz && \ + # Create trivy cache directory with proper permissions + mkdir -p /tmp/.cache/trivy && \ + chmod 777 /tmp/.cache/trivy + # Add prowler user RUN addgroup --gid 1000 prowler && \ adduser --uid 1000 --gid 1000 --disabled-password --gecos "" prowler diff --git a/api/src/backend/api/migrations/0054_iac_provider.py b/api/src/backend/api/migrations/0054_iac_provider.py new file mode 100644 index 0000000000..3ba456b0cf --- /dev/null +++ b/api/src/backend/api/migrations/0054_iac_provider.py @@ -0,0 +1,35 @@ +# Generated by Django 5.1.10 on 2025-09-09 09:25 + +from django.db import migrations + +import api.db_utils + + +class Migration(migrations.Migration): + dependencies = [ + ("api", "0053_lighthouse_bedrock_openai_compatible"), + ] + + operations = [ + migrations.AlterField( + model_name="provider", + name="provider", + field=api.db_utils.ProviderEnumField( + choices=[ + ("aws", "AWS"), + ("azure", "Azure"), + ("gcp", "GCP"), + ("kubernetes", "Kubernetes"), + ("m365", "M365"), + ("github", "GitHub"), + ("oci", "Oracle Cloud Infrastructure"), + ("iac", "IaC"), + ], + default="aws", + ), + ), + migrations.RunSQL( + "ALTER TYPE provider ADD VALUE IF NOT EXISTS 'iac';", + reverse_sql=migrations.RunSQL.noop, + ), + ] diff --git a/api/src/backend/api/models.py b/api/src/backend/api/models.py index 3a0f1e9df2..43b6d7ae5c 100644 --- a/api/src/backend/api/models.py +++ b/api/src/backend/api/models.py @@ -284,6 +284,7 @@ class Provider(RowLevelSecurityProtectedModel): KUBERNETES = "kubernetes", _("Kubernetes") M365 = "m365", _("M365") GITHUB = "github", _("GitHub") + IAC = "iac", _("IaC") OCI = "oci", _("Oracle Cloud Infrastructure") @staticmethod @@ -355,6 +356,19 @@ class Provider(RowLevelSecurityProtectedModel): pointer="/data/attributes/uid", ) + @staticmethod + def validate_iac_uid(value): + # Validate that it's a valid repository URL (git URL format) + if not re.match( + r"^(https?://|git@|ssh://)[^\s/]+[^\s]*\.git$|^(https?://)[^\s/]+[^\s]*$", + value, + ): + raise ModelValidationError( + detail="IaC provider ID must be a valid repository URL (e.g., https://github.com/user/repo or https://github.com/user/repo.git).", + code="iac-uid", + pointer="/data/attributes/uid", + ) + @staticmethod def validate_oci_uid(value): if not re.match( diff --git a/api/src/backend/api/specs/v1.yaml b/api/src/backend/api/specs/v1.yaml index 958e176472..d40a46f66e 100644 --- a/api/src/backend/api/specs/v1.yaml +++ b/api/src/backend/api/specs/v1.yaml @@ -875,6 +875,7 @@ paths: - azure - gcp - github + - iac - kubernetes - m365 - oci @@ -885,6 +886,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] @@ -910,6 +912,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure explode: false style: form @@ -1406,6 +1409,7 @@ paths: - azure - gcp - github + - iac - kubernetes - m365 - oci @@ -1416,6 +1420,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] @@ -1441,6 +1446,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure explode: false style: form @@ -1845,6 +1851,7 @@ paths: - azure - gcp - github + - iac - kubernetes - m365 - oci @@ -1855,6 +1862,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] @@ -1880,6 +1888,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure explode: false style: form @@ -2282,6 +2291,7 @@ paths: - azure - gcp - github + - iac - kubernetes - m365 - oci @@ -2292,6 +2302,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] @@ -2317,6 +2328,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure explode: false style: form @@ -2707,6 +2719,7 @@ paths: - azure - gcp - github + - iac - kubernetes - m365 - oci @@ -2717,6 +2730,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] @@ -2742,6 +2756,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure explode: false style: form @@ -4536,6 +4551,7 @@ paths: - azure - gcp - github + - iac - kubernetes - m365 - oci @@ -4546,6 +4562,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] @@ -4571,6 +4588,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure explode: false style: form @@ -4717,6 +4735,7 @@ paths: - azure - gcp - github + - iac - kubernetes - m365 - oci @@ -4727,6 +4746,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] @@ -4752,6 +4772,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure explode: false style: form @@ -4964,6 +4985,7 @@ paths: - azure - gcp - github + - iac - kubernetes - m365 - oci @@ -4974,6 +4996,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] @@ -4999,6 +5022,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure explode: false style: form @@ -5691,6 +5715,7 @@ paths: - azure - gcp - github + - iac - kubernetes - m365 - oci @@ -5701,6 +5726,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure - in: query name: filter[provider__in] @@ -6378,6 +6404,7 @@ paths: - azure - gcp - github + - iac - kubernetes - m365 - oci @@ -6388,6 +6415,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] @@ -6413,6 +6441,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure explode: false style: form @@ -6747,6 +6776,7 @@ paths: - azure - gcp - github + - iac - kubernetes - m365 - oci @@ -6757,6 +6787,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] @@ -6782,6 +6813,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure explode: false style: form @@ -7017,6 +7049,7 @@ paths: - azure - gcp - github + - iac - kubernetes - m365 - oci @@ -7027,6 +7060,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] @@ -7052,6 +7086,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure explode: false style: form @@ -7293,6 +7328,7 @@ paths: - azure - gcp - github + - iac - kubernetes - m365 - oci @@ -7303,6 +7339,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] @@ -7328,6 +7365,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure explode: false style: form @@ -8132,6 +8170,7 @@ paths: - azure - gcp - github + - iac - kubernetes - m365 - oci @@ -8142,6 +8181,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] @@ -8167,6 +8207,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `iac` - IaC * `oci` - Oracle Cloud Infrastructure explode: false style: form @@ -14201,6 +14242,17 @@ components: required: - github_app_id - github_app_key + - type: object + title: IaC Repository Credentials + properties: + repository_url: + type: string + description: Repository URL to scan for IaC files. + access_token: + type: string + description: Optional access token for private repositories. + required: + - repository_url - type: object title: Oracle Cloud Infrastructure (OCI) API Key Credentials properties: @@ -16127,6 +16179,17 @@ components: required: - github_app_id - github_app_key + - type: object + title: IaC Repository Credentials + properties: + repository_url: + type: string + description: Repository URL to scan for IaC files. + access_token: + type: string + description: Optional access token for private repositories. + required: + - repository_url - type: object title: Oracle Cloud Infrastructure (OCI) API Key Credentials properties: @@ -16427,6 +16490,17 @@ components: required: - github_app_id - github_app_key + - type: object + title: IaC Repository Credentials + properties: + repository_url: + type: string + description: Repository URL to scan for IaC files. + access_token: + type: string + description: Optional access token for private repositories. + required: + - repository_url - type: object title: Oracle Cloud Infrastructure (OCI) API Key Credentials properties: @@ -16745,6 +16819,17 @@ components: required: - github_app_id - github_app_key + - type: object + title: IaC Repository Credentials + properties: + repository_url: + type: string + description: Repository URL to scan for IaC files. + access_token: + type: string + description: Optional access token for private repositories. + required: + - repository_url - type: object title: Oracle Cloud Infrastructure (OCI) API Key Credentials properties: diff --git a/api/src/backend/api/tests/test_views.py b/api/src/backend/api/tests/test_views.py index 97e6002e00..40835efee7 100644 --- a/api/src/backend/api/tests/test_views.py +++ b/api/src/backend/api/tests/test_views.py @@ -1143,6 +1143,16 @@ class TestProviderViewSet: "uid": "a12345678901234567890123456789012345678", "alias": "Long Username", }, + { + "provider": "iac", + "uid": "https://github.com/user/repo.git", + "alias": "Git Repo", + }, + { + "provider": "iac", + "uid": "https://gitlab.com/user/project", + "alias": "GitLab Repo", + }, ] ), ) @@ -1292,6 +1302,33 @@ class TestProviderViewSet: "github-uid", "uid", ), + ( + { + "provider": "iac", + "uid": "not-a-url", + "alias": "test", + }, + "iac-uid", + "uid", + ), + ( + { + "provider": "iac", + "uid": "ftp://invalid-protocol.com/repo", + "alias": "test", + }, + "iac-uid", + "uid", + ), + ( + { + "provider": "iac", + "uid": "http://", + "alias": "test", + }, + "iac-uid", + "uid", + ), ] ), ) diff --git a/api/src/backend/api/utils.py b/api/src/backend/api/utils.py index 0675c64d74..024c7581d7 100644 --- a/api/src/backend/api/utils.py +++ b/api/src/backend/api/utils.py @@ -18,6 +18,7 @@ from prowler.providers.azure.azure_provider import AzureProvider from prowler.providers.common.models import Connection from prowler.providers.gcp.gcp_provider import GcpProvider from prowler.providers.github.github_provider import GithubProvider +from prowler.providers.iac.iac_provider import IacProvider from prowler.providers.kubernetes.kubernetes_provider import KubernetesProvider from prowler.providers.m365.m365_provider import M365Provider from prowler.providers.oraclecloud.oci_provider import OciProvider @@ -66,6 +67,7 @@ def return_prowler_provider( | AzureProvider | GcpProvider | GithubProvider + | IacProvider | KubernetesProvider | M365Provider | OciProvider @@ -76,7 +78,7 @@ def return_prowler_provider( provider (Provider): The provider object containing the provider type and associated secrets. Returns: - AwsProvider | AzureProvider | GcpProvider | GithubProvider | KubernetesProvider | M365Provider | OciProvider: The corresponding provider class. + AwsProvider | AzureProvider | GcpProvider | GithubProvider | IacProvider | KubernetesProvider | M365Provider | OciProvider: The corresponding provider class. Raises: ValueError: If the provider type specified in `provider.provider` is not supported. @@ -94,6 +96,8 @@ def return_prowler_provider( prowler_provider = M365Provider case Provider.ProviderChoices.GITHUB.value: prowler_provider = GithubProvider + case Provider.ProviderChoices.IAC.value: + prowler_provider = IacProvider case Provider.ProviderChoices.OCI.value: prowler_provider = OciProvider case _: @@ -132,6 +136,16 @@ def get_prowler_provider_kwargs( **prowler_provider_kwargs, "organizations": [provider.uid], } + elif provider.provider == Provider.ProviderChoices.IAC.value: + # For IaC provider, uid contains the repository URL + # Extract the access token if present in the secret + prowler_provider_kwargs = { + "scan_repository_url": provider.uid, + } + if "access_token" in provider.secret.secret: + prowler_provider_kwargs["oauth_app_token"] = provider.secret.secret[ + "access_token" + ] if mutelist_processor: mutelist_content = mutelist_processor.configuration.get("Mutelist", {}) @@ -149,6 +163,7 @@ def initialize_prowler_provider( | AzureProvider | GcpProvider | GithubProvider + | IacProvider | KubernetesProvider | M365Provider | OciProvider @@ -160,8 +175,8 @@ def initialize_prowler_provider( mutelist_processor (Processor): The mutelist processor object containing the mutelist configuration. Returns: - AwsProvider | AzureProvider | GcpProvider | GithubProvider | KubernetesProvider | M365Provider | OciProvider: An instance of the corresponding provider class - (`AwsProvider`, `AzureProvider`, `GcpProvider`, `GithubProvider`, `KubernetesProvider`, `M365Provider` or `OciProvider`) initialized with the + AwsProvider | AzureProvider | GcpProvider | GithubProvider | IacProvider | KubernetesProvider | M365Provider | OciProvider: An instance of the corresponding provider class + (`AwsProvider`, `AzureProvider`, `GcpProvider`, `GithubProvider`, `IacProvider`, `KubernetesProvider`, `M365Provider` or `OciProvider`) initialized with the provider's secrets. """ prowler_provider = return_prowler_provider(provider) @@ -185,9 +200,23 @@ def prowler_provider_connection_test(provider: Provider) -> Connection: except Provider.secret.RelatedObjectDoesNotExist as secret_error: return Connection(is_connected=False, error=secret_error) - return prowler_provider.test_connection( - **prowler_provider_kwargs, provider_id=provider.uid, raise_on_exception=False - ) + # For IaC provider, construct the kwargs properly for test_connection + if provider.provider == Provider.ProviderChoices.IAC.value: + # Don't pass repository_url from secret, use scan_repository_url with the UID + iac_test_kwargs = { + "scan_repository_url": provider.uid, + "raise_on_exception": False, + } + # Add access_token if present in the secret + if "access_token" in prowler_provider_kwargs: + iac_test_kwargs["access_token"] = prowler_provider_kwargs["access_token"] + return prowler_provider.test_connection(**iac_test_kwargs) + else: + return prowler_provider.test_connection( + **prowler_provider_kwargs, + provider_id=provider.uid, + raise_on_exception=False, + ) def prowler_integration_connection_test(integration: Integration) -> Connection: diff --git a/api/src/backend/api/v1/serializer_utils/providers.py b/api/src/backend/api/v1/serializer_utils/providers.py index 8a47865fbd..1965a16cb5 100644 --- a/api/src/backend/api/v1/serializer_utils/providers.py +++ b/api/src/backend/api/v1/serializer_utils/providers.py @@ -239,6 +239,21 @@ from rest_framework_json_api import serializers }, "required": ["github_app_id", "github_app_key"], }, + { + "type": "object", + "title": "IaC Repository Credentials", + "properties": { + "repository_url": { + "type": "string", + "description": "Repository URL to scan for IaC files.", + }, + "access_token": { + "type": "string", + "description": "Optional access token for private repositories.", + }, + }, + "required": ["repository_url"], + }, { "type": "object", "title": "Oracle Cloud Infrastructure (OCI) API Key Credentials", diff --git a/api/src/backend/api/v1/serializers.py b/api/src/backend/api/v1/serializers.py index 1af474e6de..0dd0fb53b5 100644 --- a/api/src/backend/api/v1/serializers.py +++ b/api/src/backend/api/v1/serializers.py @@ -1362,6 +1362,8 @@ class BaseWriteProviderSecretSerializer(BaseWriteSerializer): serializer = GCPProviderSecret(data=secret) elif provider_type == Provider.ProviderChoices.GITHUB.value: serializer = GithubProviderSecret(data=secret) + elif provider_type == Provider.ProviderChoices.IAC.value: + serializer = IacProviderSecret(data=secret) elif provider_type == Provider.ProviderChoices.KUBERNETES.value: serializer = KubernetesProviderSecret(data=secret) elif provider_type == Provider.ProviderChoices.M365.value: @@ -1481,6 +1483,14 @@ class GithubProviderSecret(serializers.Serializer): resource_name = "provider-secrets" +class IacProviderSecret(serializers.Serializer): + repository_url = serializers.CharField() + access_token = serializers.CharField(required=False) + + class Meta: + resource_name = "provider-secrets" + + class OracleCloudProviderSecret(serializers.Serializer): user = serializers.CharField() fingerprint = serializers.CharField() diff --git a/api/src/backend/tasks/jobs/export.py b/api/src/backend/tasks/jobs/export.py index b207285676..66319ec7eb 100644 --- a/api/src/backend/tasks/jobs/export.py +++ b/api/src/backend/tasks/jobs/export.py @@ -113,6 +113,10 @@ COMPLIANCE_CLASS_MAP = { "github": [ (lambda name: name.startswith("cis_"), GithubCIS), ], + "iac": [ + # IaC provider doesn't have specific compliance frameworks yet + # Trivy handles its own compliance checks + ], "oci": [ (lambda name: name.startswith("cis_"), OCICIS), ], diff --git a/docs/introduction.mdx b/docs/introduction.mdx index 7c9bb623d0..aa56177351 100644 --- a/docs/introduction.mdx +++ b/docs/introduction.mdx @@ -32,7 +32,7 @@ The supported providers right now are: | [M365](/user-guide/providers/microsoft365/getting-started-m365) | Official | UI, API, CLI | | [Github](/user-guide/providers/github/getting-started-github) | Official | UI, API, CLI | | [Oracle Cloud](/user-guide/providers/oci/getting-started-oci) | Official | UI, API, CLI | -| [Infra as Code](/user-guide/providers/iac/getting-started-iac) | Official | CLI | +| [Infra as Code](/user-guide/providers/iac/getting-started-iac) | Official | UI, API, CLI | | [MongoDB Atlas](/user-guide/providers/mongodbatlas/getting-started-mongodbatlas) | Official | CLI | | [LLM](/user-guide/providers/llm/getting-started-llm) | Official | CLI | | **NHN** | Unofficial | CLI | diff --git a/prowler/CHANGELOG.md b/prowler/CHANGELOG.md index de74f598a6..a7c31bdc1f 100644 --- a/prowler/CHANGELOG.md +++ b/prowler/CHANGELOG.md @@ -47,6 +47,11 @@ All notable changes to the **Prowler SDK** are documented in this file. --- +### Changed +- Adapt IaC provider to be used in the Prowler App [(#8751)](https://github.com/prowler-cloud/prowler/pull/8751) + +--- + ## [v5.13.0] (Prowler v5.13.0) ### Added diff --git a/prowler/__main__.py b/prowler/__main__.py index 10a4ad7e21..7d578a7c6a 100644 --- a/prowler/__main__.py +++ b/prowler/__main__.py @@ -359,6 +359,12 @@ def prowler(): else: # Original behavior for IAC or non-verbose LLM findings = global_provider.run() + # Note: IaC doesn't support granular progress tracking since Trivy runs as a black box + # and returns all findings at once. Progress tracking would just be 0% → 100%. + + # Filter findings by status if specified + if hasattr(args, "status") and args.status: + findings = [f for f in findings if f.status in args.status] # Report findings for verbose output report(findings, global_provider, output_options) elif len(checks_to_execute): diff --git a/prowler/lib/outputs/finding.py b/prowler/lib/outputs/finding.py index 6d3807a46e..1a558fd11d 100644 --- a/prowler/lib/outputs/finding.py +++ b/prowler/lib/outputs/finding.py @@ -309,10 +309,17 @@ class Finding(BaseModel): output_data["auth_method"] = provider.auth_method output_data["account_uid"] = "iac" output_data["account_name"] = "iac" - output_data["resource_name"] = check_output.resource_name - output_data["resource_uid"] = check_output.resource_name - output_data["region"] = check_output.resource_line_range - output_data["resource_line_range"] = check_output.resource_line_range + output_data["resource_name"] = getattr( + check_output, "resource_name", "" + ) + output_data["resource_uid"] = getattr(check_output, "resource_name", "") + # For IaC, resource_line_range only exists on CheckReportIAC, not on Finding objects + output_data["region"] = getattr( + check_output, "resource_line_range", "file" + ) + output_data["resource_line_range"] = getattr( + check_output, "resource_line_range", "" + ) output_data["framework"] = check_output.check_metadata.ServiceName elif provider.type == "llm": @@ -407,6 +414,10 @@ class Finding(BaseModel): finding.subscription = list(provider.identity.subscriptions.keys())[0] elif provider.type == "gcp": finding.project_id = list(provider.projects.keys())[0] + elif provider.type == "iac": + # For IaC, we don't have resource_line_range in the Finding model + # It would need to be extracted from the resource metadata if needed + finding.resource_line_range = "" # Set empty for compatibility elif provider.type == "oci": finding.compartment_id = getattr(finding, "compartment_id", "") diff --git a/prowler/lib/scan/scan.py b/prowler/lib/scan/scan.py index 8afe993f10..062ea80738 100644 --- a/prowler/lib/scan/scan.py +++ b/prowler/lib/scan/scan.py @@ -1,4 +1,5 @@ import datetime +from datetime import timezone from types import SimpleNamespace from typing import Generator @@ -25,6 +26,7 @@ from prowler.lib.scan.exceptions.exceptions import ( ) from prowler.providers.common.models import Audit_Metadata, ProviderOutputOptions from prowler.providers.common.provider import Provider +from prowler.providers.iac.iac_provider import IacProvider class Scan: @@ -90,15 +92,25 @@ class Scan: except ValueError: raise ScanInvalidStatusError(f"Invalid status provided: {s}.") - # Load bulk compliance frameworks - self._bulk_compliance_frameworks = Compliance.get_bulk(provider.type) - - # Get bulk checks metadata for the provider - self._bulk_checks_metadata = CheckMetadata.get_bulk(provider.type) - # Complete checks metadata with the compliance framework specification - self._bulk_checks_metadata = update_checks_metadata_with_compliance( - self._bulk_compliance_frameworks, self._bulk_checks_metadata - ) + # Special setup for IaC provider - override inputs to work with traditional flow + if provider.type == "iac": + # IaC doesn't use traditional Prowler checks, so clear all input parameters + # to avoid validation errors and let it flow through the normal logic + checks = None + services = None + excluded_checks = None + excluded_services = None + self._bulk_checks_metadata = {} + self._bulk_compliance_frameworks = {} + else: + # Load bulk compliance frameworks + self._bulk_compliance_frameworks = Compliance.get_bulk(provider.type) + # Get bulk checks metadata for the provider + self._bulk_checks_metadata = CheckMetadata.get_bulk(provider.type) + # Complete checks metadata with the compliance framework specification + self._bulk_checks_metadata = update_checks_metadata_with_compliance( + self._bulk_compliance_frameworks, self._bulk_checks_metadata + ) # Create a list of valid categories valid_categories = set() @@ -148,19 +160,22 @@ class Scan: ) # Load checks to execute - self._checks_to_execute = sorted( - load_checks_to_execute( - bulk_checks_metadata=self._bulk_checks_metadata, - bulk_compliance_frameworks=self._bulk_compliance_frameworks, - check_list=checks, - service_list=services, - compliance_frameworks=compliances, - categories=categories, - severities=severities, - provider=provider.type, - checks_file=None, + if provider.type == "iac": + self._checks_to_execute = ["iac_scan"] # Dummy check name for IaC + else: + self._checks_to_execute = sorted( + load_checks_to_execute( + bulk_checks_metadata=self._bulk_checks_metadata, + bulk_compliance_frameworks=self._bulk_compliance_frameworks, + check_list=checks, + service_list=services, + compliance_frameworks=compliances, + categories=categories, + severities=severities, + provider=provider.type, + checks_file=None, + ) ) - ) # Exclude checks if excluded_checks: @@ -184,9 +199,13 @@ class Scan: self._number_of_checks_to_execute = len(self._checks_to_execute) - service_checks_to_execute = get_service_checks_to_execute( - self._checks_to_execute - ) + # Set up service-based checks tracking + if provider.type == "iac": + service_checks_to_execute = {"iac": set(["iac_scan"])} + else: + service_checks_to_execute = get_service_checks_to_execute( + self._checks_to_execute + ) service_checks_completed = dict() self._service_checks_to_execute = service_checks_to_execute @@ -245,6 +264,9 @@ class Scan: Exception: If any other error occurs during the execution of a check. """ try: + # Initialize check_name for error handling + check_name = None + # Using SimpleNamespace to create a mocked object arguments = SimpleNamespace() @@ -266,6 +288,64 @@ class Scan: start_time = datetime.datetime.now() + # Special handling for IaC provider + if self._provider.type == "iac": + # IaC provider doesn't use regular checks, it runs Trivy directly + if isinstance(self._provider, IacProvider): + logger.info("Running IaC scan with Trivy...") + # Run the IaC scan + iac_reports = self._provider.run() + + # Convert IaC reports to Finding objects + findings = [] + + for report in iac_reports: + # Generate unique UID for the finding + finding_uid = f"{report.check_metadata.CheckID}-{report.resource_name}-{report.resource_line_range}" + + # Convert status string to Status enum + status_enum = ( + Status.FAIL if report.status == "FAIL" else Status.PASS + ) + if report.muted: + status_enum = Status.MUTED + + finding = Finding( + auth_method="Repository", # IaC uses repository as auth method + timestamp=datetime.datetime.now(timezone.utc), + account_uid=self._provider.scan_repository_url or "local", + account_name="IaC Repository", + metadata=report.check_metadata, # Pass the CheckMetadata object directly + uid=finding_uid, + status=status_enum, + status_extended=report.status_extended, + muted=report.muted, + resource_uid=report.resource_name, # For IaC, the file path is the UID + resource_metadata=report.resource, # The raw finding dict + resource_name=report.resource_name, + resource_details=report.resource_details, + resource_tags={}, # IaC doesn't have resource tags + region="global", # IaC doesn't have regions + compliance={}, # IaC doesn't have compliance mappings yet + raw=report.resource, # The raw finding dict + ) + findings.append(finding) + + # Filter the findings by the status + if self._status: + findings = [f for f in findings if f.status in self._status] + + # Update progress and yield findings + self._number_of_checks_completed = 1 + self._number_of_checks_to_execute = 1 + + yield (100.0, findings) + + # Calculate duration + end_time = datetime.datetime.now() + self._duration = int((end_time - start_time).total_seconds()) + return + for check_name in checks_to_execute: try: # Recover service from check name @@ -349,6 +429,7 @@ class Scan: # Update the scan duration when all checks are completed self._duration = int((datetime.datetime.now() - start_time).total_seconds()) except Exception as error: + check_name = check_name or "Scan error" logger.error( f"{check_name} - {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" ) diff --git a/prowler/providers/iac/iac_provider.py b/prowler/providers/iac/iac_provider.py index 4e658c7849..15e9cda176 100644 --- a/prowler/providers/iac/iac_provider.py +++ b/prowler/providers/iac/iac_provider.py @@ -1,10 +1,11 @@ import json +import re import shutil import subprocess import sys import tempfile from os import environ -from typing import List +from typing import Generator, List from alive_progress import alive_bar from colorama import Fore, Style @@ -17,7 +18,7 @@ from prowler.config.config import ( from prowler.lib.check.models import CheckReportIAC from prowler.lib.logger import logger from prowler.lib.utils.utils import print_boxes -from prowler.providers.common.models import Audit_Metadata +from prowler.providers.common.models import Audit_Metadata, Connection from prowler.providers.common.provider import Provider @@ -173,7 +174,7 @@ class IacProvider(Provider): "Severity": finding["Severity"], "ResourceType": "iac", "Description": finding_description, - "Risk": "", + "Risk": "This provider has not defined a risk for this check.", "RelatedUrl": finding.get("PrimaryURL", ""), "Remediation": { "Code": { @@ -242,20 +243,39 @@ class IacProvider(Provider): logger.info( f"Cloning repository {original_url} into {temporary_directory}..." ) - with alive_bar( - ctrl_c=False, - bar="blocks", - spinner="classic", - stats=False, - enrich_print=False, - ) as bar: - try: - bar.title = f"-> Cloning {original_url}..." + + # Check if we're in an environment with a TTY + # Celery workers and other non-interactive environments don't have TTY + # and cannot use the alive_bar + try: + if sys.stdout.isatty(): + with alive_bar( + ctrl_c=False, + bar="blocks", + spinner="classic", + stats=False, + enrich_print=False, + ) as bar: + try: + bar.title = f"-> Cloning {original_url}..." + porcelain.clone( + repository_url, temporary_directory, depth=1 + ) + bar.title = "-> Repository cloned successfully!" + except Exception as clone_error: + bar.title = "-> Cloning failed!" + raise clone_error + else: + # No TTY, just clone without progress bar + logger.info(f"Cloning {original_url}...") porcelain.clone(repository_url, temporary_directory, depth=1) - bar.title = "-> Repository cloned successfully!" - except Exception as clone_error: - bar.title = "-> Cloning failed!" - raise clone_error + logger.info("Repository cloned successfully!") + except (AttributeError, OSError): + # Fallback if isatty() check fails + logger.info(f"Cloning {original_url}...") + porcelain.clone(repository_url, temporary_directory, depth=1) + logger.info("Repository cloned successfully!") + return temporary_directory except Exception as error: logger.critical( @@ -275,7 +295,10 @@ class IacProvider(Provider): scan_dir = self.scan_path try: - reports = self.run_scan(scan_dir, self.scanners, self.exclude_path) + # Collect all batches from the generator + reports = [] + for batch in self.run_scan(scan_dir, self.scanners, self.exclude_path): + reports.extend(batch) finally: if temp_dir: logger.info(f"Removing temporary directory {temp_dir}...") @@ -285,7 +308,7 @@ class IacProvider(Provider): def run_scan( self, directory: str, scanners: list[str], exclude_path: list[str] - ) -> List[CheckReportIAC]: + ) -> Generator[List[CheckReportIAC], None, None]: try: logger.info(f"Running IaC scan on {directory} ...") trivy_command = [ @@ -302,25 +325,47 @@ class IacProvider(Provider): ] if exclude_path: trivy_command.extend(["--skip-dirs", ",".join(exclude_path)]) - with alive_bar( - ctrl_c=False, - bar="blocks", - spinner="classic", - stats=False, - enrich_print=False, - ) as bar: - try: - bar.title = f"-> Running IaC scan on {directory} ..." - # Run Trivy with JSON output + + # Check if we're in an environment with a TTY + try: + if sys.stdout.isatty(): + with alive_bar( + ctrl_c=False, + bar="blocks", + spinner="classic", + stats=False, + enrich_print=False, + ) as bar: + try: + bar.title = f"-> Running IaC scan on {directory} ..." + # Run Trivy with JSON output + process = subprocess.run( + trivy_command, + capture_output=True, + text=True, + ) + bar.title = "-> Scan completed!" + except Exception as error: + bar.title = "-> Scan failed!" + raise error + else: + # No TTY, just run without progress bar + logger.info(f"Running Trivy scan on {directory}...") process = subprocess.run( trivy_command, capture_output=True, text=True, ) - bar.title = "-> Scan completed!" - except Exception as error: - bar.title = "-> Scan failed!" - raise error + logger.info("Trivy scan completed!") + except (AttributeError, OSError): + # Fallback if isatty() check fails + logger.info(f"Running Trivy scan on {directory}...") + process = subprocess.run( + trivy_command, + capture_output=True, + text=True, + ) + logger.info("Trivy scan completed!") # Log Trivy's stderr output with preserved log levels if process.stderr: for line in process.stderr.strip().split("\n"): @@ -354,14 +399,15 @@ class IacProvider(Provider): if not output: logger.warning("No findings returned from Trivy scan") - return [] + return except Exception as error: logger.critical( f"{error.__class__.__name__}:{error.__traceback__.tb_lineno} -- {error}" ) sys.exit(1) - reports = [] + batch = [] + batch_size = 100 # Process all trivy findings for finding in output: @@ -371,27 +417,44 @@ class IacProvider(Provider): report = self._process_finding( misconfiguration, finding["Target"], finding["Type"] ) - reports.append(report) + batch.append(report) + if len(batch) >= batch_size: + yield batch + batch = [] + # Process Vulnerabilities for vulnerability in finding.get("Vulnerabilities", []): report = self._process_finding( vulnerability, finding["Target"], finding["Type"] ) - reports.append(report) + batch.append(report) + if len(batch) >= batch_size: + yield batch + batch = [] + # Process Secrets for secret in finding.get("Secrets", []): report = self._process_finding( secret, finding["Target"], finding["Class"] ) - reports.append(report) + batch.append(report) + if len(batch) >= batch_size: + yield batch + batch = [] + # Process Licenses for license in finding.get("Licenses", []): report = self._process_finding( license, finding["Target"], finding["Type"] ) - reports.append(report) + batch.append(report) + if len(batch) >= batch_size: + yield batch + batch = [] - return reports + # Yield any remaining findings in the last batch + if batch: + yield batch except Exception as error: if "No such file or directory: 'trivy'" in str(error): @@ -434,3 +497,95 @@ class IacProvider(Provider): ) print_boxes(report_lines, report_title) + + @staticmethod + def test_connection( + scan_repository_url: str = None, + oauth_app_token: str = None, + access_token: str = None, + raise_on_exception: bool = True, + provider_id: str = None, + ) -> "Connection": + """Test connection to IaC repository. + + Test the connection to the IaC repository using the provided credentials. + + Args: + scan_repository_url (str): Repository URL to scan. + oauth_app_token (str): OAuth App token for authentication. + access_token (str): Access token for authentication (alias for oauth_app_token). + raise_on_exception (bool): Flag indicating whether to raise an exception if the connection fails. + provider_id (str): The provider ID, in this case it's the repository URL. + + Returns: + Connection: Connection object with success status or error information. + + Raises: + Exception: If failed to test the connection to the repository. + + Examples: + >>> IacProvider.test_connection(scan_repository_url="https://github.com/user/repo") + Connection(is_connected=True) + """ + try: + # If provider_id is provided and scan_repository_url is not, use provider_id as the repository URL + if provider_id and not scan_repository_url: + scan_repository_url = provider_id + + # Handle both oauth_app_token and access_token parameters + if access_token and not oauth_app_token: + oauth_app_token = access_token + + if not scan_repository_url: + return Connection( + is_connected=False, error="Repository URL is required" + ) + + # Try to clone the repository to test the connection + with tempfile.TemporaryDirectory(): + try: + if oauth_app_token: + # If token is provided, use it for authentication + # Extract the domain and path from the URL + url_pattern = r"(https?://)([^/]+)/(.+)" + match = re.match(url_pattern, scan_repository_url) + if match: + protocol, domain, path = match.groups() + # Construct URL with token + auth_url = f"{protocol}x-access-token:{oauth_app_token}@{domain}/{path}" + else: + auth_url = scan_repository_url + else: + # Public repository + auth_url = scan_repository_url + + # Use dulwich to test the connection + porcelain.ls_remote(auth_url) + + return Connection(is_connected=True) + + except Exception as e: + error_msg = str(e) + if "authentication" in error_msg.lower() or "401" in error_msg: + return Connection( + is_connected=False, + error="Authentication failed. Please check your access token.", + ) + elif "404" in error_msg or "not found" in error_msg.lower(): + return Connection( + is_connected=False, + error="Repository not found or not accessible.", + ) + else: + return Connection( + is_connected=False, + error=f"Failed to connect to repository: {error_msg}", + ) + + except Exception as error: + if raise_on_exception: + raise + return Connection( + is_connected=False, + error=f"Unexpected error testing connection: {str(error)}", + ) diff --git a/tests/lib/scan/scan_test.py b/tests/lib/scan/scan_test.py index 1699902e12..e6ff948ed7 100644 --- a/tests/lib/scan/scan_test.py +++ b/tests/lib/scan/scan_test.py @@ -260,16 +260,24 @@ class TestScan: assert scan.get_completed_services() == set() assert scan.get_completed_checks() == set() - @patch("importlib.import_module") + @patch("prowler.lib.scan.scan.load_checks_to_execute") + @patch("prowler.lib.scan.scan.update_checks_metadata_with_compliance") + @patch("prowler.lib.scan.scan.Compliance.get_bulk") + @patch("prowler.lib.scan.scan.CheckMetadata.get_bulk") + @patch("prowler.lib.scan.scan.import_check") def test_scan( - mock_import_module, + self, + mock_import_check, + mock_get_bulk, + mock_compliance_get_bulk, + mock_update_checks_metadata, + mock_load_checks, mock_global_provider, mock_execute, mock_logger, - mock_generate_output, - mock_recover_checks_from_provider, - mock_load_check_metadata, ): + from prowler.lib.check.models import Severity + mock_check_class = MagicMock() mock_check_instance = mock_check_class.return_value mock_check_instance.Provider = "aws" @@ -277,23 +285,39 @@ class TestScan: mock_check_instance.CheckTitle = "Check if IAM Access Analyzer is enabled" mock_check_instance.Categories = [] - mock_import_module.return_value = MagicMock( + mock_import_check.return_value = MagicMock( accessanalyzer_enabled=mock_check_class ) checks_to_execute = {"accessanalyzer_enabled"} custom_checks_metadata = {} - mock_global_provider.type = "aws" + + # Mock CheckMetadata + mock_metadata = MagicMock() + mock_metadata.CheckID = "accessanalyzer_enabled" + mock_metadata.ResourceType = "AWS::IAM::AccessAnalyzer" + mock_metadata.Categories = [] + mock_metadata.CheckAliases = [] + mock_metadata.Severity = Severity.medium + mock_metadata.Compliance = [] + + bulk_checks_metadata = {"accessanalyzer_enabled": mock_metadata} + mock_get_bulk.return_value = bulk_checks_metadata + + # Mock update_checks_metadata_with_compliance to return the same metadata + mock_update_checks_metadata.return_value = bulk_checks_metadata + + # Mock Compliance frameworks + mock_compliance_get_bulk.return_value = {} + + # Mock load_checks_to_execute to return the checks + mock_load_checks.return_value = ["accessanalyzer_enabled"] scan = Scan(mock_global_provider, checks=checks_to_execute) - mock_load_check_metadata.assert_called_once() - mock_recover_checks_from_provider.assert_called_once_with("aws") results = list(scan.scan(custom_checks_metadata)) - assert mock_generate_output.call_count == 1 * len(mock_execute.side_effect()) assert mock_execute.call_count == 1 assert len(results) == 1 - assert results[0][1] == mock_execute.side_effect() assert results[0][0] == 100.0 assert scan.progress == 100.0 # Since the scan is mocked, the duration will always be 0 for now diff --git a/tests/providers/iac/iac_provider_test.py b/tests/providers/iac/iac_provider_test.py index 7f89ff7a49..8fb6fc48f9 100644 --- a/tests/providers/iac/iac_provider_test.py +++ b/tests/providers/iac/iac_provider_test.py @@ -86,9 +86,12 @@ class TestIacProvider: stdout=get_sample_trivy_json_output(), stderr="" ) - reports = provider.run_scan( + # Collect all batches from the generator + reports = [] + for batch in provider.run_scan( "/test/directory", ["vuln", "misconfig", "secret"], [] - ) + ): + reports.extend(batch) # Should have 3 misconfigurations from the sample output assert len(reports) == 3 @@ -124,9 +127,11 @@ class TestIacProvider: stdout=get_empty_trivy_output(), stderr="" ) - reports = provider.run_scan( + reports = [] + for batch in provider.run_scan( "/test/directory", ["vuln", "misconfig", "secret"], [] - ) + ): + reports.extend(batch) assert len(reports) == 0 def test_provider_run_local_scan(self): @@ -200,7 +205,9 @@ class TestIacProvider: ) with pytest.raises(SystemExit) as excinfo: - provider.run_scan("/test/directory", ["all"], []) + # Consume the generator + for _ in provider.run_scan("/test/directory", ["all"], []): + pass assert excinfo.value.code == 1 @@ -212,7 +219,11 @@ class TestIacProvider: mock_subprocess.return_value = MagicMock(stdout="null", stderr="") with pytest.raises(SystemExit) as exc_info: - provider.run_scan("/test/directory", ["vuln", "misconfig", "secret"], []) + # Consume the generator + for _ in provider.run_scan( + "/test/directory", ["vuln", "misconfig", "secret"], [] + ): + pass assert exc_info.value.code == 1 def test_iac_provider_process_finding_dockerfile(self): @@ -264,9 +275,11 @@ class TestIacProvider: stdout=json.dumps(sample_output), stderr="" ) - result = provider.run_scan( + result = [] + for batch in provider.run_scan( "/test/directory", ["vuln", "misconfig", "secret"], [] - ) + ): + result.extend(batch) # Verify results assert len(result) == 2 @@ -299,9 +312,11 @@ class TestIacProvider: stdout=json.dumps(sample_output), stderr="" ) - result = provider.run_scan( + result = [] + for batch in provider.run_scan( "/test/directory", ["vuln", "misconfig", "secret"], ["exclude/path"] - ) + ): + result.extend(batch) # Verify results assert len(result) == 1 @@ -318,9 +333,11 @@ class TestIacProvider: stdout=json.dumps({"Results": []}), stderr="" ) - result = provider.run_scan( + result = [] + for batch in provider.run_scan( "/test/directory", ["vuln", "misconfig", "secret"], [] - ) + ): + result.extend(batch) # Verify results assert len(result) == 0 @@ -356,9 +373,11 @@ class TestIacProvider: stdout=json.dumps(sample_output), stderr="" ) - result = provider.run_scan( + result = [] + for batch in provider.run_scan( "/test/directory", ["vuln", "misconfig", "secret"], [] - ) + ): + result.extend(batch) # Verify results assert len(result) == 2 @@ -377,7 +396,11 @@ class TestIacProvider: mock_subprocess.side_effect = Exception("Test exception") with pytest.raises(SystemExit) as exc_info: - provider.run_scan("/test/directory", ["vuln", "misconfig", "secret"], []) + # Consume the generator + for _ in provider.run_scan( + "/test/directory", ["vuln", "misconfig", "secret"], [] + ): + pass assert exc_info.value.code == 1 @@ -405,7 +428,9 @@ class TestIacProvider: # Test with specific scanners scanners = ["vuln", "misconfig", "secret"] - result = provider.run_scan("/test/directory", scanners, []) + result = [] + for batch in provider.run_scan("/test/directory", scanners, []): + result.extend(batch) # Verify subprocess was called with correct scanners mock_subprocess.assert_called_once_with( @@ -453,9 +478,11 @@ class TestIacProvider: # Test with exclude paths exclude_paths = ["node_modules", ".git", "vendor"] - result = provider.run_scan( + result = [] + for batch in provider.run_scan( "/test/directory", ["vuln", "misconfig", "secret"], exclude_paths - ) + ): + result.extend(batch) # Verify subprocess was called with correct exclude paths expected_command = [ @@ -510,9 +537,12 @@ class TestIacProvider: stdout=json.dumps(sample_output), stderr="" ) - result = provider.run_scan( + # Consume the generator to get all batches + result = [] + for batch in provider.run_scan( "/test/directory", ["vuln", "misconfig", "secret"], [] - ) + ): + result.extend(batch) # Verify results assert len(result) == 5 # 5 misconfigurations @@ -536,9 +566,12 @@ class TestIacProvider: stdout=json.dumps({"Results": []}), stderr="" ) - result = provider.run_scan( + # Consume the generator to get all batches + result = [] + for batch in provider.run_scan( "/test/directory", ["vuln", "misconfig", "secret"], [] - ) + ): + result.extend(batch) # Verify results assert len(result) == 0 @@ -592,9 +625,12 @@ class TestIacProvider: stdout=json.dumps(sample_output), stderr="" ) - result = provider.run_scan( + # Consume the generator to get all batches + result = [] + for batch in provider.run_scan( "/test/directory", ["vuln", "misconfig", "secret"], [] - ) + ): + result.extend(batch) # Verify results assert ( @@ -615,7 +651,8 @@ class TestIacProvider: ) with patch.object(provider, "run_scan") as mock_run_scan: - mock_run_scan.return_value = [] + # Mock should return a generator (empty in this case) + mock_run_scan.return_value = iter([]) provider.run() mock_run_scan.assert_called_once_with( diff --git a/ui/CHANGELOG.md b/ui/CHANGELOG.md index 9ff46abb81..e81eef512f 100644 --- a/ui/CHANGELOG.md +++ b/ui/CHANGELOG.md @@ -8,6 +8,7 @@ All notable changes to the **Prowler UI** are documented in this file. - RSS feeds support [(#9109)](https://github.com/prowler-cloud/prowler/pull/9109) - Customer Support menu item [(#9143)](https://github.com/prowler-cloud/prowler/pull/9143) +- IaC (Infrastructure as Code) provider support for scanning remote repositories [(#8751)](https://github.com/prowler-cloud/prowler/pull/8751) ### 🔄 Changed @@ -20,7 +21,6 @@ All notable changes to the **Prowler UI** are documented in this file. ### 🔄 Changed - Upgrade React to version 19.2.0 [(#9039)](https://github.com/prowler-cloud/prowler/pull/9039) -- Add support for Oracle Cloud Infrastructure (OCI) provider [(#8984)](https://github.com/prowler-cloud/prowler/pull/8984) --- @@ -87,6 +87,8 @@ All notable changes to the **Prowler UI** are documented in this file. - Field-level email validation message [(#8698)](https://github.com/prowler-cloud/prowler/pull/8698) - POST method on auth form [(#8699)](https://github.com/prowler-cloud/prowler/pull/8699) +--- + ## [1.12.0] (Prowler v5.12.0) ### 🚀 Added diff --git a/ui/actions/providers/providers.ts b/ui/actions/providers/providers.ts index dce72229bd..08e708b19f 100644 --- a/ui/actions/providers/providers.ts +++ b/ui/actions/providers/providers.ts @@ -139,6 +139,24 @@ export const addCredentialsProvider = async (formData: FormData) => { ) as string | undefined; try { + // For IaC provider, fetch the provider data to get the repository URL from uid + if (providerType === "iac") { + const providerUrl = new URL(`${apiBaseUrl}/providers/${providerId}`); + const providerResponse = await fetch(providerUrl.toString(), { + headers: await getAuthHeaders({ contentType: false }), + }); + + if (providerResponse.ok) { + const providerData = await providerResponse.json(); + const providerUid = providerData?.data?.attributes?.uid; + + // Add the repository URL to formData using the provider's uid + if (providerUid) { + formData.append(ProviderCredentialFields.REPOSITORY_URL, providerUid); + } + } + } + const { secretType, secret } = buildSecretConfig( formData, providerType, diff --git a/ui/app/(prowler)/new-overview/components/accounts-selector.tsx b/ui/app/(prowler)/new-overview/components/accounts-selector.tsx index e68edf56ea..2d20ace068 100644 --- a/ui/app/(prowler)/new-overview/components/accounts-selector.tsx +++ b/ui/app/(prowler)/new-overview/components/accounts-selector.tsx @@ -8,6 +8,7 @@ import { AzureProviderBadge, GCPProviderBadge, GitHubProviderBadge, + IacProviderBadge, KS8ProviderBadge, M365ProviderBadge, OracleCloudProviderBadge, @@ -28,6 +29,7 @@ const PROVIDER_ICON: Record = { kubernetes: , m365: , github: , + iac: , oci: , }; diff --git a/ui/app/(prowler)/new-overview/components/provider-type-selector.tsx b/ui/app/(prowler)/new-overview/components/provider-type-selector.tsx index aa1f36dace..8329a13282 100644 --- a/ui/app/(prowler)/new-overview/components/provider-type-selector.tsx +++ b/ui/app/(prowler)/new-overview/components/provider-type-selector.tsx @@ -42,6 +42,11 @@ const GitHubProviderBadge = lazy(() => default: m.GitHubProviderBadge, })), ); +const IacProviderBadge = lazy(() => + import("@/components/icons/providers-badge").then((m) => ({ + default: m.IacProviderBadge, + })), +); const OracleCloudProviderBadge = lazy(() => import("@/components/icons/providers-badge").then((m) => ({ default: m.OracleCloudProviderBadge, @@ -82,6 +87,10 @@ const PROVIDER_DATA: Record< label: "GitHub", icon: GitHubProviderBadge, }, + iac: { + label: "Infrastructure as Code", + icon: IacProviderBadge, + }, oci: { label: "Oracle Cloud Infrastructure", icon: OracleCloudProviderBadge, diff --git a/ui/components/filters/custom-provider-inputs.tsx b/ui/components/filters/custom-provider-inputs.tsx index 6a2c5cb078..1ca770157c 100644 --- a/ui/components/filters/custom-provider-inputs.tsx +++ b/ui/components/filters/custom-provider-inputs.tsx @@ -5,6 +5,7 @@ import { AzureProviderBadge, GCPProviderBadge, GitHubProviderBadge, + IacProviderBadge, KS8ProviderBadge, M365ProviderBadge, OracleCloudProviderBadge, @@ -64,6 +65,15 @@ export const CustomProviderInputGitHub = () => { ); }; +export const CustomProviderInputIac = () => { + return ( +
+ +

Infrastructure as Code

+
+ ); +}; + export const CustomProviderInputOracleCloud = () => { return (
diff --git a/ui/components/filters/custom-select-provider.tsx b/ui/components/filters/custom-select-provider.tsx index c72830a2a8..e2958110ab 100644 --- a/ui/components/filters/custom-select-provider.tsx +++ b/ui/components/filters/custom-select-provider.tsx @@ -11,6 +11,7 @@ import { CustomProviderInputAzure, CustomProviderInputGCP, CustomProviderInputGitHub, + CustomProviderInputIac, CustomProviderInputKubernetes, CustomProviderInputM365, CustomProviderInputOracleCloud, @@ -44,6 +45,10 @@ const providerDisplayData: Record< label: "GitHub", component: , }, + iac: { + label: "Infrastructure as Code", + component: , + }, oci: { label: "Oracle Cloud Infrastructure", component: , diff --git a/ui/components/icons/providers-badge/iac-provider-badge.tsx b/ui/components/icons/providers-badge/iac-provider-badge.tsx new file mode 100644 index 0000000000..9a701606ed --- /dev/null +++ b/ui/components/icons/providers-badge/iac-provider-badge.tsx @@ -0,0 +1,44 @@ +import * as React from "react"; + +import { IconSvgProps } from "@/types"; + +export const IacProviderBadge: React.FC = ({ + size, + width, + height, + ...props +}) => ( + +); diff --git a/ui/components/icons/providers-badge/index.ts b/ui/components/icons/providers-badge/index.ts index b143c27d6c..924aa1b6b8 100644 --- a/ui/components/icons/providers-badge/index.ts +++ b/ui/components/icons/providers-badge/index.ts @@ -2,6 +2,7 @@ export * from "./aws-provider-badge"; export * from "./azure-provider-badge"; export * from "./gcp-provider-badge"; export * from "./github-provider-badge"; +export * from "./iac-provider-badge"; export * from "./ks8-provider-badge"; export * from "./m365-provider-badge"; export * from "./oraclecloud-provider-badge"; diff --git a/ui/components/overview/provider-overview/provider-overview.tsx b/ui/components/overview/provider-overview/provider-overview.tsx index fdbd4a81cc..03dbeb744c 100644 --- a/ui/components/overview/provider-overview/provider-overview.tsx +++ b/ui/components/overview/provider-overview/provider-overview.tsx @@ -8,6 +8,7 @@ import { AzureProviderBadge, GCPProviderBadge, GitHubProviderBadge, + IacProviderBadge, KS8ProviderBadge, M365ProviderBadge, OracleCloudProviderBadge, @@ -38,6 +39,8 @@ export const ProvidersOverview = ({ return ; case "github": return ; + case "iac": + return ; case "oci": return ; default: @@ -52,6 +55,7 @@ export const ProvidersOverview = ({ gcp: "GCP", kubernetes: "Kubernetes", github: "GitHub", + iac: "IaC", oci: "OCI", }; diff --git a/ui/components/providers/enhanced-provider-selector.tsx b/ui/components/providers/enhanced-provider-selector.tsx index 66c07f9a34..cd1453c3bf 100644 --- a/ui/components/providers/enhanced-provider-selector.tsx +++ b/ui/components/providers/enhanced-provider-selector.tsx @@ -17,6 +17,7 @@ const providerTypeLabels: Record = { m365: "Microsoft 365", kubernetes: "Kubernetes", github: "GitHub", + iac: "Infrastructure as Code", oci: "Oracle Cloud Infrastructure", }; diff --git a/ui/components/providers/radio-group-provider.tsx b/ui/components/providers/radio-group-provider.tsx index 7ebfec2a91..c507823593 100644 --- a/ui/components/providers/radio-group-provider.tsx +++ b/ui/components/providers/radio-group-provider.tsx @@ -12,6 +12,7 @@ import { AzureProviderBadge, GCPProviderBadge, GitHubProviderBadge, + IacProviderBadge, KS8ProviderBadge, M365ProviderBadge, OracleCloudProviderBadge, @@ -79,6 +80,12 @@ export const RadioGroupProvider: React.FC = ({ GitHub
+ +
+ + Infrastructure as Code +
+
)} + {providerType === "iac" && ( + } + /> + )} {providerType === "oci" && ( } diff --git a/ui/components/providers/workflow/forms/connect-account-form.tsx b/ui/components/providers/workflow/forms/connect-account-form.tsx index f9bf6bafeb..5fbdb48692 100644 --- a/ui/components/providers/workflow/forms/connect-account-form.tsx +++ b/ui/components/providers/workflow/forms/connect-account-form.tsx @@ -51,6 +51,11 @@ const getProviderFieldDetails = (providerType?: ProviderType) => { label: "Username", placeholder: "e.g. your-github-username", }; + case "iac": + return { + label: "Repository URL", + placeholder: "e.g. https://github.com/user/repo", + }; case "oci": return { label: "Tenancy OCID", diff --git a/ui/components/providers/workflow/forms/via-credentials/iac-credentials-form.tsx b/ui/components/providers/workflow/forms/via-credentials/iac-credentials-form.tsx new file mode 100644 index 0000000000..e44ea30a1c --- /dev/null +++ b/ui/components/providers/workflow/forms/via-credentials/iac-credentials-form.tsx @@ -0,0 +1,33 @@ +import { Control } from "react-hook-form"; + +import { CustomInput } from "@/components/ui/custom"; +import { IacCredentials } from "@/types"; + +export const IacCredentialsForm = ({ + control, +}: { + control: Control; +}) => { + return ( + <> +
+
+ Connect via Repository +
+
+ Provide an access token if the repository is private (optional). +
+
+ + + ); +}; diff --git a/ui/components/providers/workflow/forms/via-credentials/index.ts b/ui/components/providers/workflow/forms/via-credentials/index.ts index 982e5ca701..daf77c0614 100644 --- a/ui/components/providers/workflow/forms/via-credentials/index.ts +++ b/ui/components/providers/workflow/forms/via-credentials/index.ts @@ -1,3 +1,4 @@ export * from "./azure-credentials-form"; export * from "./github-credentials-form"; +export * from "./iac-credentials-form"; export * from "./k8s-credentials-form"; diff --git a/ui/components/ui/entities/get-provider-logo.tsx b/ui/components/ui/entities/get-provider-logo.tsx index 7d2f6e5940..590688729b 100644 --- a/ui/components/ui/entities/get-provider-logo.tsx +++ b/ui/components/ui/entities/get-provider-logo.tsx @@ -5,6 +5,7 @@ import { AzureProviderBadge, GCPProviderBadge, GitHubProviderBadge, + IacProviderBadge, KS8ProviderBadge, M365ProviderBadge, OracleCloudProviderBadge, @@ -25,6 +26,8 @@ export const getProviderLogo = (provider: ProviderType) => { return ; case "github": return ; + case "iac": + return ; case "oci": return ; default: @@ -46,6 +49,8 @@ export const getProviderName = (provider: ProviderType): string => { return "Microsoft 365"; case "github": return "GitHub"; + case "iac": + return "Infrastructure as Code"; case "oci": return "Oracle Cloud Infrastructure"; default: diff --git a/ui/lib/external-urls.ts b/ui/lib/external-urls.ts index 6df7753856..d59d5dd729 100644 --- a/ui/lib/external-urls.ts +++ b/ui/lib/external-urls.ts @@ -32,6 +32,11 @@ export const getProviderHelpText = (provider: string) => { text: "Need help connecting your GitHub account?", link: "https://goto.prowler.com/provider-github", }; + case "iac": + return { + text: "Need help scanning your Infrastructure as Code repository?", + link: "https://goto.prowler.com/provider-iac", + }; case "oci": return { text: "Need help connecting your Oracle Cloud account?", diff --git a/ui/lib/provider-credentials/build-crendentials.ts b/ui/lib/provider-credentials/build-crendentials.ts index 059f1a91d9..5435296d7b 100644 --- a/ui/lib/provider-credentials/build-crendentials.ts +++ b/ui/lib/provider-credentials/build-crendentials.ts @@ -197,6 +197,20 @@ export const buildGitHubSecret = (formData: FormData) => { return {}; }; +export const buildIacSecret = (formData: FormData) => { + const secret = { + [ProviderCredentialFields.REPOSITORY_URL]: getFormValue( + formData, + ProviderCredentialFields.REPOSITORY_URL, + ), + [ProviderCredentialFields.ACCESS_TOKEN]: getFormValue( + formData, + ProviderCredentialFields.ACCESS_TOKEN, + ), + }; + return filterEmptyValues(secret); +}; + /** * Utility function to safely encode a string to base64 * Handles UTF-8 characters properly without using deprecated APIs @@ -286,6 +300,10 @@ export const buildSecretConfig = ( secretType: "static", secret: buildGitHubSecret(formData), }), + iac: () => ({ + secretType: "static", + secret: buildIacSecret(formData), + }), oci: () => ({ secretType: "static", secret: buildOracleCloudSecret(formData, providerUid), diff --git a/ui/lib/provider-credentials/provider-credential-fields.ts b/ui/lib/provider-credentials/provider-credential-fields.ts index c60ecf3298..43b2db6f93 100644 --- a/ui/lib/provider-credentials/provider-credential-fields.ts +++ b/ui/lib/provider-credentials/provider-credential-fields.ts @@ -45,6 +45,10 @@ export const ProviderCredentialFields = { GITHUB_APP_ID: "github_app_id", GITHUB_APP_KEY: "github_app_key_content", + // IaC fields + REPOSITORY_URL: "repository_url", + ACCESS_TOKEN: "access_token", + // OCI fields OCI_USER: "user", OCI_FINGERPRINT: "fingerprint", @@ -81,6 +85,8 @@ export const ErrorPointers = { OAUTH_APP_TOKEN: "/data/attributes/secret/oauth_app_token", GITHUB_APP_ID: "/data/attributes/secret/github_app_id", GITHUB_APP_KEY: "/data/attributes/secret/github_app_key_content", + REPOSITORY_URL: "/data/attributes/secret/repository_url", + ACCESS_TOKEN: "/data/attributes/secret/access_token", CERTIFICATE_CONTENT: "/data/attributes/secret/certificate_content", OCI_USER: "/data/attributes/secret/user", OCI_FINGERPRINT: "/data/attributes/secret/fingerprint", diff --git a/ui/types/components.ts b/ui/types/components.ts index 21dfeccf79..83544aed40 100644 --- a/ui/types/components.ts +++ b/ui/types/components.ts @@ -248,6 +248,12 @@ export type KubernetesCredentials = { [ProviderCredentialFields.PROVIDER_ID]: string; }; +export type IacCredentials = { + [ProviderCredentialFields.REPOSITORY_URL]: string; + [ProviderCredentialFields.ACCESS_TOKEN]?: string; + [ProviderCredentialFields.PROVIDER_ID]: string; +}; + export type OCICredentials = { [ProviderCredentialFields.OCI_USER]: string; [ProviderCredentialFields.OCI_FINGERPRINT]: string; @@ -264,6 +270,7 @@ export type CredentialsFormSchema = | GCPDefaultCredentials | GCPServiceAccountKey | KubernetesCredentials + | IacCredentials | M365Credentials | OCICredentials; diff --git a/ui/types/formSchemas.ts b/ui/types/formSchemas.ts index f4966fe36d..d5cca88218 100644 --- a/ui/types/formSchemas.ts +++ b/ui/types/formSchemas.ts @@ -110,6 +110,11 @@ export const addProviderFormSchema = z [ProviderCredentialFields.PROVIDER_ALIAS]: z.string(), providerUid: z.string(), }), + z.object({ + providerType: z.literal("iac"), + [ProviderCredentialFields.PROVIDER_ALIAS]: z.string(), + providerUid: z.string(), + }), z.object({ providerType: z.literal("oci"), [ProviderCredentialFields.PROVIDER_ALIAS]: z.string(), @@ -196,28 +201,37 @@ export const addCredentialsFormSchema = ( .string() .optional(), } - : providerType === "oci" + : providerType === "iac" ? { - [ProviderCredentialFields.OCI_USER]: z + [ProviderCredentialFields.REPOSITORY_URL]: z .string() - .min(1, "User OCID is required"), - [ProviderCredentialFields.OCI_FINGERPRINT]: z + .optional(), + [ProviderCredentialFields.ACCESS_TOKEN]: z .string() - .min(1, "Fingerprint is required"), - [ProviderCredentialFields.OCI_KEY_CONTENT]: z - .string() - .min(1, "Private Key Content is required"), - [ProviderCredentialFields.OCI_TENANCY]: z - .string() - .min(1, "Tenancy OCID is required"), - [ProviderCredentialFields.OCI_REGION]: z - .string() - .min(1, "Region is required"), - [ProviderCredentialFields.OCI_PASS_PHRASE]: z - .union([z.string(), z.literal("")]) .optional(), } - : {}), + : providerType === "oci" + ? { + [ProviderCredentialFields.OCI_USER]: z + .string() + .min(1, "User OCID is required"), + [ProviderCredentialFields.OCI_FINGERPRINT]: z + .string() + .min(1, "Fingerprint is required"), + [ProviderCredentialFields.OCI_KEY_CONTENT]: z + .string() + .min(1, "Private Key Content is required"), + [ProviderCredentialFields.OCI_TENANCY]: z + .string() + .min(1, "Tenancy OCID is required"), + [ProviderCredentialFields.OCI_REGION]: z + .string() + .min(1, "Region is required"), + [ProviderCredentialFields.OCI_PASS_PHRASE]: z + .union([z.string(), z.literal("")]) + .optional(), + } + : {}), }) .superRefine((data: Record, ctx) => { if (providerType === "m365") { diff --git a/ui/types/providers.ts b/ui/types/providers.ts index 658101c1ed..9b2de65eb2 100644 --- a/ui/types/providers.ts +++ b/ui/types/providers.ts @@ -5,6 +5,7 @@ export const PROVIDER_TYPES = [ "kubernetes", "m365", "github", + "iac", "oci", ] as const; From b9aef85aa230dd2264e05580b9efa8243318efe3 Mon Sep 17 00:00:00 2001 From: Andoni Alonso <14891798+andoniaf@users.noreply.github.com> Date: Tue, 4 Nov 2025 11:08:35 +0100 Subject: [PATCH 07/37] fix(github): user previous command to set labels (#9099) --- .github/workflows/labeler-community.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/labeler-community.yml b/.github/workflows/labeler-community.yml index ee157cc7d2..c6115b4d30 100644 --- a/.github/workflows/labeler-community.yml +++ b/.github/workflows/labeler-community.yml @@ -40,4 +40,6 @@ jobs: GH_TOKEN: ${{ github.token }} run: | echo "Adding 'community' label to PR #$PR_NUMBER" - gh pr edit "$PR_NUMBER" --add-label community + gh api /repos/${{ github.repository }}/issues/${{ github.event.number }}/labels \ + -X POST \ + -f labels[]='community' From dd85ca7c72e011ba44d059c5cb8e4b0f4a088c3f Mon Sep 17 00:00:00 2001 From: StylusFrost <43682773+StylusFrost@users.noreply.github.com> Date: Tue, 4 Nov 2025 11:22:39 +0100 Subject: [PATCH 08/37] test(ui): add M365 provider management E2E tests (#8954) --- .github/workflows/ui-e2e-tests.yml | 5 + ui/tests/providers/providers-page.ts | 130 ++++++++++++- ui/tests/providers/providers.md | 106 +++++++++++ ui/tests/providers/providers.spec.ts | 177 +++++++++++++++++- .../manage-cloud-providers.auth.setup.ts | 2 +- 5 files changed, 417 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ui-e2e-tests.yml b/.github/workflows/ui-e2e-tests.yml index 26177653f4..3339349943 100644 --- a/.github/workflows/ui-e2e-tests.yml +++ b/.github/workflows/ui-e2e-tests.yml @@ -28,6 +28,11 @@ jobs: E2E_AZURE_CLIENT_ID: ${{ secrets.E2E_AZURE_CLIENT_ID }} E2E_AZURE_SECRET_ID: ${{ secrets.E2E_AZURE_SECRET_ID }} E2E_AZURE_TENANT_ID: ${{ secrets.E2E_AZURE_TENANT_ID }} + E2E_M365_DOMAIN_ID: ${{ secrets.E2E_M365_DOMAIN_ID }} + E2E_M365_CLIENT_ID: ${{ secrets.E2E_M365_CLIENT_ID }} + E2E_M365_SECRET_ID: ${{ secrets.E2E_M365_SECRET_ID }} + E2E_M365_TENANT_ID: ${{ secrets.E2E_M365_TENANT_ID }} + E2E_M365_CERTIFICATE_CONTENT: ${{ secrets.E2E_M365_CERTIFICATE_CONTENT }} E2E_NEW_PASSWORD: ${{ secrets.E2E_NEW_PASSWORD }} steps: - name: Checkout repository diff --git a/ui/tests/providers/providers-page.ts b/ui/tests/providers/providers-page.ts index 701f4ea226..2b638f68b5 100644 --- a/ui/tests/providers/providers-page.ts +++ b/ui/tests/providers/providers-page.ts @@ -17,6 +17,12 @@ export interface AZUREProviderData { alias?: string; } +// M365 provider data +export interface M365ProviderData { + domainId: string; + alias?: string; +} + // AWS credential options export const AWS_CREDENTIAL_OPTIONS = { AWS_ROLE_ARN: "role", @@ -51,6 +57,23 @@ export interface AZUREProviderCredential { tenantId:string; } +// M365 credential options +export const M365_CREDENTIAL_OPTIONS = { + M365_CREDENTIALS: "credentials", + M365_CERTIFICATE_CREDENTIALS: "certificate" +} as const; + +// M365 credential type +type M365CredentialType = (typeof M365_CREDENTIAL_OPTIONS)[keyof typeof M365_CREDENTIAL_OPTIONS]; + +// M365 provider credential +export interface M365ProviderCredential { + type: M365CredentialType; + clientId:string; + clientSecret?:string; + tenantId:string; + certificateContent?:string; +} // Providers page export class ProvidersPage extends BasePage { @@ -79,6 +102,10 @@ export class ProvidersPage extends BasePage { readonly roleCredentialsRadio: Locator; readonly staticCredentialsRadio: Locator; + // M365 credentials type selection + readonly m365StaticCredentialsRadio: Locator; + readonly m365CertificateCredentialsRadio: Locator; + // AWS role credentials form readonly roleArnInput: Locator; readonly externalIdInput: Locator; @@ -93,6 +120,13 @@ export class ProvidersPage extends BasePage { readonly azureClientSecretInput: Locator; readonly azureTenantIdInput: Locator; + // M365 provider form elements + readonly m365domainIdInput: Locator; + readonly m365ClientIdInput: Locator; + readonly m365ClientSecretInput: Locator; + readonly m365TenantIdInput: Locator; + readonly m365CertificateContentInput: Locator; + // Delete button readonly deleteProviderConfirmationButton: Locator; @@ -131,7 +165,14 @@ export class ProvidersPage extends BasePage { this.azureClientIdInput = page.getByRole("textbox", { name: "Client ID" }); this.azureClientSecretInput = page.getByRole("textbox", { name: "Client Secret" }); this.azureTenantIdInput = page.getByRole("textbox", { name: "Tenant ID" }); - + + // M365 provider form inputs + this.m365domainIdInput = page.getByRole("textbox", { name: "Domain ID" }); + this.m365ClientIdInput = page.getByRole("textbox", { name: "Client ID" }); + this.m365ClientSecretInput = page.getByRole("textbox", { name: "Client Secret" }); + this.m365TenantIdInput = page.getByRole("textbox", { name: "Tenant ID" }); + this.m365CertificateContentInput = page.getByRole("textbox", { name: "Certificate Content" }); + // Alias input this.aliasInput = page.getByRole("textbox", { name: "Provider alias (optional)" }); @@ -158,6 +199,14 @@ export class ProvidersPage extends BasePage { name: /Connect via Credentials/i, }); + // Radios for selecting M365 credentials method + this.m365StaticCredentialsRadio = page.getByRole("radio", { + name: /App Client Secret Credentials/i, + }); + this.m365CertificateCredentialsRadio = page.getByRole("radio", { + name: /App Certificate Credentials/i, + }); + // Inputs for IAM Role credentials this.roleArnInput = page.getByRole("textbox", { name: "Role ARN" }); this.externalIdInput = page.getByRole("textbox", { name: "External ID" }); @@ -200,6 +249,14 @@ export class ProvidersPage extends BasePage { await this.waitForPageLoad(); } + async selectM365Provider(): Promise { + // Select the M365 provider + + await this.m365ProviderRadio.click({ force: true }); + await this.waitForPageLoad(); + } + + async fillAWSProviderDetails(data: AWSProviderData): Promise { // Fill the AWS provider details @@ -220,6 +277,16 @@ export class ProvidersPage extends BasePage { } } + async fillM365ProviderDetails(data: M365ProviderData): Promise { + // Fill the M365 provider details + + await this.m365domainIdInput.fill(data.domainId); + + if (data.alias) { + await this.aliasInput.fill(data.alias); + } + } + async clickNext(): Promise { // The wizard interface may use different labels for its primary action button on each step. // This function determines which button to click depending on the current URL and page content. @@ -342,6 +409,21 @@ export class ProvidersPage extends BasePage { await this.waitForPageLoad(); } + async selectM365CredentialsType(type: M365CredentialType): Promise { + // Ensure we are on the add-credentials page where the selector exists + + await expect(this.page).toHaveURL(/\/providers\/add-credentials/); + if (type === M365_CREDENTIAL_OPTIONS.M365_CREDENTIALS) { + await this.m365StaticCredentialsRadio.click({ force: true }); + } else if (type === M365_CREDENTIAL_OPTIONS.M365_CERTIFICATE_CREDENTIALS) { + await this.m365CertificateCredentialsRadio.click({ force: true }); + } else { + throw new Error(`Invalid M365 credential type: ${type}`); + } + // Wait for the page to load + await this.waitForPageLoad(); + } + async fillRoleCredentials(credentials: AWSProviderCredential): Promise { // Fill the role credentials form @@ -387,6 +469,34 @@ export class ProvidersPage extends BasePage { } } + async fillM365Credentials(credentials: M365ProviderCredential): Promise { + // Fill the m365 credentials form + + if (credentials.clientId) { + await this.m365ClientIdInput.fill(credentials.clientId); + } + if (credentials.clientSecret) { + await this.m365ClientSecretInput.fill(credentials.clientSecret); + } + if (credentials.tenantId) { + await this.m365TenantIdInput.fill(credentials.tenantId); + } + } + + async fillM365CertificateCredentials(credentials: M365ProviderCredential): Promise { + // Fill the m365 certificate credentials form + + if (credentials.clientId) { + await this.m365ClientIdInput.fill(credentials.clientId); + } + if (credentials.certificateContent) { + await this.m365CertificateContentInput.fill(credentials.certificateContent); + } + if (credentials.tenantId) { + await this.m365TenantIdInput.fill(credentials.tenantId); + } + } + async verifyPageLoaded(): Promise { // Verify the providers page is loaded @@ -409,6 +519,24 @@ export class ProvidersPage extends BasePage { await expect(this.roleCredentialsRadio).toBeVisible(); } + async verifyM365CredentialsPageLoaded(): Promise { + // Verify the M365 credentials page is loaded + + await expect(this.page).toHaveTitle(/Prowler/); + await expect(this.m365ClientIdInput).toBeVisible(); + await expect(this.m365ClientSecretInput).toBeVisible(); + await expect(this.m365TenantIdInput).toBeVisible(); + } + + async verifyM365CertificateCredentialsPageLoaded(): Promise { + // Verify the M365 certificate credentials page is loaded + + await expect(this.page).toHaveTitle(/Prowler/); + await expect(this.m365ClientIdInput).toBeVisible(); + await expect(this.m365TenantIdInput).toBeVisible(); + await expect(this.m365CertificateContentInput).toBeVisible(); + } + async verifyLaunchScanPageLoaded(): Promise { // Verify the launch scan page is loaded diff --git a/ui/tests/providers/providers.md b/ui/tests/providers/providers.md index 675ee167bb..7ed8a74755 100644 --- a/ui/tests/providers/providers.md +++ b/ui/tests/providers/providers.md @@ -159,3 +159,109 @@ - Provider cleanup performed before each test to ensure clean state - Requires valid Azure subscription with appropriate permissions - Client credentials must have sufficient permissions for security scanning + +--- + +## Test Case: `PROVIDER-E2E-004` - Add M365 Provider with Static Credentials + +**Priority:** `critical` + +**Tags:** + +- type → @e2e, @serial +- feature → @providers +- provider → @m365 + +**Description/Objective:** Validates the complete flow of adding a new Microsoft 365 provider using static client credentials (Client ID, Client Secret, Tenant ID) tied to a Domain ID. + +**Preconditions:** + +- Admin user authentication required (admin.auth.setup setup) +- Environment variables configured: E2E_M365_DOMAIN_ID, E2E_M365_CLIENT_ID, E2E_M365_SECRET_ID, E2E_M365_TENANT_ID +- Remove any existing provider with the same Domain ID before starting the test +- This test must be run serially and never in parallel with other tests, as it requires the Domain ID not to be already registered beforehand. + +### Flow Steps: + +1. Navigate to providers page +2. Click "Add Provider" button +3. Select M365 provider type +4. Fill provider details (domain ID and alias) +5. Select static credentials type +6. Fill M365 credentials (client ID, client secret, tenant ID) +7. Launch initial scan +8. Verify redirect to provider management page + +### Expected Result: + +- M365 provider successfully added with static credentials +- Initial scan launched successfully +- User redirected to provider details page + +### Key verification points: + +- Provider page loads correctly +- Connect account page displays M365 option +- M365 credentials form accepts all required fields +- Launch scan page appears +- Successful redirect to provider page after scan launch + +### Notes: + +- Test uses environment variables for M365 credentials +- Provider cleanup performed before each test to ensure clean state +- Requires valid Microsoft 365 tenant with appropriate permissions +- Client credentials must have sufficient permissions for security scanning + +--- + +## Test Case: `PROVIDER-E2E-005` - Add M365 Provider with Certificate Credentials + +**Priority:** `critical` + +**Tags:** + +- type → @e2e, @serial +- feature → @providers +- provider → @m365 + +**Description/Objective:** Validates the complete flow of adding a new Microsoft 365 provider using certificate-based authentication (Client ID, Tenant ID, Certificate Content) tied to a Domain ID. + +**Preconditions:** + +- Admin user authentication required (admin.auth.setup setup) +- Environment variables configured: E2E_M365_DOMAIN_ID, E2E_M365_CLIENT_ID, E2E_M365_TENANT_ID, E2E_M365_CERTIFICATE_CONTENT +- Remove any existing provider with the same Domain ID before starting the test +- This test must be run serially and never in parallel with other tests, as it requires the Domain ID not to be already registered beforehand. + +### Flow Steps: + +1. Navigate to providers page +2. Click "Add Provider" button +3. Select M365 provider type +4. Fill provider details (domain ID and alias) +5. Select certificate credentials type +6. Fill M365 certificate credentials (client ID, tenant ID, certificate content) +7. Launch initial scan +8. Verify redirect to provider management page + +### Expected Result: + +- M365 provider successfully added with certificate credentials +- Initial scan launched successfully +- User redirected to provider details page + +### Key verification points: + +- Provider page loads correctly +- Connect account page displays M365 option +- Certificate credentials form accepts all required fields +- Launch scan page appears +- Successful redirect to provider page after scan launch + +### Notes: + +- Test uses environment variables for M365 certificate credentials +- Provider cleanup performed before each test to ensure clean state +- Requires valid Microsoft 365 tenant with certificate-based authentication +- Certificate must be properly configured and have sufficient permissions for security scanning diff --git a/ui/tests/providers/providers.spec.ts b/ui/tests/providers/providers.spec.ts index c55f76e854..6471a17863 100644 --- a/ui/tests/providers/providers.spec.ts +++ b/ui/tests/providers/providers.spec.ts @@ -1,5 +1,4 @@ import { test } from "@playwright/test"; -import { ScansPage } from "../scans/scans-page"; import { ProvidersPage, AWSProviderData, @@ -8,7 +7,11 @@ import { AZUREProviderData, AZUREProviderCredential, AZURE_CREDENTIAL_OPTIONS, + M365ProviderData, + M365ProviderCredential, + M365_CREDENTIAL_OPTIONS, } from "./providers-page"; +import { ScansPage } from "../scans/scans-page"; test.describe("Add Provider", () => { test.describe.serial("Add AWS Provider", () => { @@ -260,4 +263,176 @@ test.describe("Add Provider", () => { }, ); }); + + test.describe.serial("Add M365 Provider", () => { + // Providers page object + let providersPage: ProvidersPage; + let scansPage: ScansPage; + + // Test data from environment variables + const domainId = process.env.E2E_M365_DOMAIN_ID; + const clientId = process.env.E2E_M365_CLIENT_ID; + const tenantId = process.env.E2E_M365_TENANT_ID; + + // Validate required environment variables + if (!domainId || !clientId || !tenantId) { + throw new Error( + "E2E_M365_DOMAIN_ID, E2E_M365_CLIENT_ID, and E2E_M365_TENANT_ID environment variables are not set", + ); + } + + // Setup before each test + test.beforeEach(async ({ page }) => { + providersPage = new ProvidersPage(page); + // Clean up existing provider to ensure clean test state + await providersPage.deleteProviderIfExists(domainId); + }); + + // Use admin authentication for provider management + test.use({ storageState: "playwright/.auth/admin_user.json" }); + + test( + "should add a new M365 provider with static credentials", + { + tag: [ + "@critical", + "@e2e", + "@providers", + "@m365", + "@serial", + "@PROVIDER-E2E-004", + ], + }, + async ({ page }) => { + // Validate required environment variables + const clientSecret = process.env.E2E_M365_SECRET_ID; + + if (!clientSecret) { + throw new Error("E2E_M365_SECRET_ID environment variable is not set"); + } + // Prepare test data for M365 provider + const m365ProviderData: M365ProviderData = { + domainId: domainId, + alias: "Test E2E M365 Account - Credentials", + }; + + // Prepare static credentials + const m365Credentials: M365ProviderCredential = { + type: M365_CREDENTIAL_OPTIONS.M365_CREDENTIALS, + clientId: clientId, + clientSecret: clientSecret, + tenantId: tenantId, + }; + + // Navigate to providers page + await providersPage.goto(); + await providersPage.verifyPageLoaded(); + + // Start adding new provider + await providersPage.clickAddProvider(); + await providersPage.verifyConnectAccountPageLoaded(); + + // Select M365 provider + await providersPage.selectM365Provider(); + + // Fill provider details + await providersPage.fillM365ProviderDetails(m365ProviderData); + await providersPage.clickNext(); + + // Select static credentials type + await providersPage.selectM365CredentialsType( + M365_CREDENTIAL_OPTIONS.M365_CREDENTIALS, + ); + + // Verify M365 credentials page is loaded + await providersPage.verifyM365CredentialsPageLoaded(); + + // Fill static credentials details + await providersPage.fillM365Credentials(m365Credentials); + await providersPage.clickNext(); + + // Launch scan + await providersPage.verifyLaunchScanPageLoaded(); + await providersPage.clickNext(); + + // Wait for redirect to scan page + scansPage = new ScansPage(page); + await scansPage.verifyPageLoaded(); + }, + ); + + test( + "should add a new M365 provider with certificate", + { + tag: [ + "@critical", + "@e2e", + "@providers", + "@m365", + "@serial", + "@PROVIDER-E2E-005", + ], + }, + async ({ page }) => { + // Validate required environment variables + const certificateContent = process.env.E2E_M365_CERTIFICATE_CONTENT; + + if (!certificateContent) { + throw new Error( + "E2E_M365_CERTIFICATE_CONTENT environment variable is not set", + ); + } + + // Prepare test data for M365 provider + const m365ProviderData: M365ProviderData = { + domainId: domainId, + alias: "Test E2E M365 Account - Certificate", + }; + + // Prepare static credentials + const m365Credentials: M365ProviderCredential = { + type: M365_CREDENTIAL_OPTIONS.M365_CERTIFICATE_CREDENTIALS, + clientId: clientId, + tenantId: tenantId, + certificateContent: certificateContent, + }; + + // Navigate to providers page + await providersPage.goto(); + await providersPage.verifyPageLoaded(); + + // Start adding new provider + await providersPage.clickAddProvider(); + await providersPage.verifyConnectAccountPageLoaded(); + + // Select M365 provider + await providersPage.selectM365Provider(); + + // Fill provider details + await providersPage.fillM365ProviderDetails(m365ProviderData); + await providersPage.clickNext(); + + // Select static credentials type + await providersPage.selectM365CredentialsType( + M365_CREDENTIAL_OPTIONS.M365_CERTIFICATE_CREDENTIALS, + ); + + // Verify M365 certificate credentials page is loaded + await providersPage.verifyM365CertificateCredentialsPageLoaded(); + + // Fill static credentials details + await providersPage.fillM365CertificateCredentials(m365Credentials); + await providersPage.clickNext(); + + // Launch scan + await providersPage.verifyLaunchScanPageLoaded(); + await providersPage.clickNext(); + + // Wait for redirect to scan page + scansPage = new ScansPage(page); + await scansPage.verifyPageLoaded(); + }, + ); + }); + }); diff --git a/ui/tests/setups/manage-cloud-providers.auth.setup.ts b/ui/tests/setups/manage-cloud-providers.auth.setup.ts index 205e2b50e1..0213ab0cb2 100644 --- a/ui/tests/setups/manage-cloud-providers.auth.setup.ts +++ b/ui/tests/setups/manage-cloud-providers.auth.setup.ts @@ -6,7 +6,7 @@ const manageCloudProvidersUserFile = 'playwright/.auth/manage_cloud_providers_us authManageCloudProvidersSetup('authenticate as manage cloud providers e2e user', async ({ page }) => { const cloudProvidersEmail = process.env.E2E_MANAGE_CLOUD_PROVIDERS_USER; const cloudProvidersPassword = process.env.E2E_MANAGE_CLOUD_PROVIDERS_PASSWORD; - + if (!cloudProvidersEmail || !cloudProvidersPassword) { throw new Error('E2E_MANAGE_CLOUD_PROVIDERS_USER and E2E_MANAGE_CLOUD_PROVIDERS_PASSWORD environment variables are required'); } From 166ab1d2c1b06916591f8ce000a2ae810cd3a9bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20Arroba?= <19954079+cesararroba@users.noreply.github.com> Date: Tue, 4 Nov 2025 12:27:34 +0100 Subject: [PATCH 09/37] chore(github): fix actions paths (#9154) --- .github/workflows/api-code-quality.yml | 9 +++------ .github/workflows/api-container-checks.yml | 7 +------ .github/workflows/api-security.yml | 9 +++------ .github/workflows/api-tests.yml | 9 +++------ .github/workflows/mcp-container-checks.yml | 7 +------ .github/workflows/sdk-code-quality.yml | 14 ++------------ .github/workflows/sdk-container-checks.yml | 12 ++---------- .github/workflows/sdk-security.yml | 14 ++------------ .github/workflows/sdk-tests.yml | 14 ++------------ .github/workflows/ui-container-checks.yml | 7 +------ .github/workflows/ui-tests.yml | 9 +++------ 11 files changed, 23 insertions(+), 88 deletions(-) diff --git a/.github/workflows/api-code-quality.yml b/.github/workflows/api-code-quality.yml index 2c52e532ba..a9dddaa3aa 100644 --- a/.github/workflows/api-code-quality.yml +++ b/.github/workflows/api-code-quality.yml @@ -5,16 +5,10 @@ on: branches: - 'master' - 'v5.*' - paths: - - 'api/**' - - '.github/workflows/api-code-quality.yml' pull_request: branches: - 'master' - 'v5.*' - paths: - - 'api/**' - - '.github/workflows/api-code-quality.yml' concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -45,6 +39,9 @@ jobs: id: check-changes uses: tj-actions/changed-files@24d32ffd492484c1d75e0c0b894501ddb9d30d62 # v47.0.0 with: + files: | + api/** + .github/workflows/api-code-quality.yml files_ignore: | api/docs/** api/README.md diff --git a/.github/workflows/api-container-checks.yml b/.github/workflows/api-container-checks.yml index 0b9f5a28bc..d069b0d5a6 100644 --- a/.github/workflows/api-container-checks.yml +++ b/.github/workflows/api-container-checks.yml @@ -5,16 +5,10 @@ on: branches: - 'master' - 'v5.*' - paths: - - 'api/**' - - '.github/workflows/api-container-checks.yml' pull_request: branches: - 'master' - 'v5.*' - paths: - - 'api/**' - - '.github/workflows/api-container-checks.yml' concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -64,6 +58,7 @@ jobs: id: check-changes uses: tj-actions/changed-files@24d32ffd492484c1d75e0c0b894501ddb9d30d62 # v47.0.0 with: + files: api/** files_ignore: | api/docs/** api/README.md diff --git a/.github/workflows/api-security.yml b/.github/workflows/api-security.yml index 126b957ed0..33134ec9c9 100644 --- a/.github/workflows/api-security.yml +++ b/.github/workflows/api-security.yml @@ -5,16 +5,10 @@ on: branches: - 'master' - 'v5.*' - paths: - - 'api/**' - - '.github/workflows/api-security.yml' pull_request: branches: - 'master' - 'v5.*' - paths: - - 'api/**' - - '.github/workflows/api-security.yml' concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -45,6 +39,9 @@ jobs: id: check-changes uses: tj-actions/changed-files@24d32ffd492484c1d75e0c0b894501ddb9d30d62 # v47.0.0 with: + files: | + api/** + .github/workflows/api-security.yml files_ignore: | api/docs/** api/README.md diff --git a/.github/workflows/api-tests.yml b/.github/workflows/api-tests.yml index 3f827d8283..daeb79abac 100644 --- a/.github/workflows/api-tests.yml +++ b/.github/workflows/api-tests.yml @@ -5,16 +5,10 @@ on: branches: - 'master' - 'v5.*' - paths: - - 'api/**' - - '.github/workflows/api-tests.yml' pull_request: branches: - 'master' - 'v5.*' - paths: - - 'api/**' - - '.github/workflows/api-tests.yml' concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -85,6 +79,9 @@ jobs: id: check-changes uses: tj-actions/changed-files@24d32ffd492484c1d75e0c0b894501ddb9d30d62 # v47.0.0 with: + files: | + api/** + .github/workflows/api-tests.yml files_ignore: | api/docs/** api/README.md diff --git a/.github/workflows/mcp-container-checks.yml b/.github/workflows/mcp-container-checks.yml index f93ed9023c..3310cd8c5a 100644 --- a/.github/workflows/mcp-container-checks.yml +++ b/.github/workflows/mcp-container-checks.yml @@ -5,16 +5,10 @@ on: branches: - 'master' - 'v5.*' - paths: - - 'mcp_server/**' - - '.github/workflows/mcp-container-checks.yml' pull_request: branches: - 'master' - 'v5.*' - paths: - - 'mcp_server/**' - - '.github/workflows/mcp-container-checks.yml' concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -63,6 +57,7 @@ jobs: id: check-changes uses: tj-actions/changed-files@24d32ffd492484c1d75e0c0b894501ddb9d30d62 # v47.0.0 with: + files: mcp_server/** files_ignore: | mcp_server/README.md mcp_server/CHANGELOG.md diff --git a/.github/workflows/sdk-code-quality.yml b/.github/workflows/sdk-code-quality.yml index 943f456a4c..b32324d8cb 100644 --- a/.github/workflows/sdk-code-quality.yml +++ b/.github/workflows/sdk-code-quality.yml @@ -5,22 +5,10 @@ on: branches: - 'master' - 'v5.*' - paths: - - 'prowler/**' - - 'tests/**' - - 'pyproject.toml' - - 'poetry.lock' - - '.github/workflows/sdk-code-quality.yml' pull_request: branches: - 'master' - 'v5.*' - paths: - - 'prowler/**' - - 'tests/**' - - 'pyproject.toml' - - 'poetry.lock' - - '.github/workflows/sdk-code-quality.yml' concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -49,7 +37,9 @@ jobs: id: check-changes uses: tj-actions/changed-files@24d32ffd492484c1d75e0c0b894501ddb9d30d62 # v47.0.0 with: + files: ./** files_ignore: | + .github/** prowler/CHANGELOG.md docs/** permissions/** diff --git a/.github/workflows/sdk-container-checks.yml b/.github/workflows/sdk-container-checks.yml index 3e843ca171..4e8a7cf2ad 100644 --- a/.github/workflows/sdk-container-checks.yml +++ b/.github/workflows/sdk-container-checks.yml @@ -5,20 +5,10 @@ on: branches: - 'master' - 'v5.*' - paths: - - 'prowler/**' - - 'tests/**' - - 'Dockerfile' - - '.github/workflows/sdk-container-checks.yml' pull_request: branches: - 'master' - 'v5.*' - paths: - - 'prowler/**' - - 'tests/**' - - 'Dockerfile' - - '.github/workflows/sdk-container-checks.yml' concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -69,7 +59,9 @@ jobs: id: check-changes uses: tj-actions/changed-files@24d32ffd492484c1d75e0c0b894501ddb9d30d62 # v47.0.0 with: + files: ./** files_ignore: | + .github/** prowler/CHANGELOG.md docs/** permissions/** diff --git a/.github/workflows/sdk-security.yml b/.github/workflows/sdk-security.yml index c4fbf9a2a3..a15bd2539f 100644 --- a/.github/workflows/sdk-security.yml +++ b/.github/workflows/sdk-security.yml @@ -5,22 +5,10 @@ on: branches: - 'master' - 'v5.*' - paths: - - 'prowler/**' - - 'tests/**' - - 'pyproject.toml' - - 'poetry.lock' - - '.github/workflows/sdk-security.yml' pull_request: branches: - 'master' - 'v5.*' - paths: - - 'prowler/**' - - 'tests/**' - - 'pyproject.toml' - - 'poetry.lock' - - '.github/workflows/sdk-security.yml' concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -42,7 +30,9 @@ jobs: id: check-changes uses: tj-actions/changed-files@24d32ffd492484c1d75e0c0b894501ddb9d30d62 # v47.0.0 with: + files: ./** files_ignore: | + .github/** prowler/CHANGELOG.md docs/** permissions/** diff --git a/.github/workflows/sdk-tests.yml b/.github/workflows/sdk-tests.yml index 5356bf857b..b01c5e7778 100644 --- a/.github/workflows/sdk-tests.yml +++ b/.github/workflows/sdk-tests.yml @@ -5,22 +5,10 @@ on: branches: - 'master' - 'v5.*' - paths: - - 'prowler/**' - - 'tests/**' - - 'pyproject.toml' - - 'poetry.lock' - - '.github/workflows/sdk-tests.yml' pull_request: branches: - 'master' - 'v5.*' - paths: - - 'prowler/**' - - 'tests/**' - - 'pyproject.toml' - - 'poetry.lock' - - '.github/workflows/sdk-tests.yml' concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -49,7 +37,9 @@ jobs: id: check-changes uses: tj-actions/changed-files@24d32ffd492484c1d75e0c0b894501ddb9d30d62 # v47.0.0 with: + files: ./** files_ignore: | + .github/** prowler/CHANGELOG.md docs/** permissions/** diff --git a/.github/workflows/ui-container-checks.yml b/.github/workflows/ui-container-checks.yml index 8675fff7b8..e436c3974a 100644 --- a/.github/workflows/ui-container-checks.yml +++ b/.github/workflows/ui-container-checks.yml @@ -5,16 +5,10 @@ on: branches: - 'master' - 'v5.*' - paths: - - 'ui/**' - - '.github/workflows/ui-container-checks.yml' pull_request: branches: - 'master' - 'v5.*' - paths: - - 'ui/**' - - '.github/workflows/ui-container-checks.yml' concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -64,6 +58,7 @@ jobs: id: check-changes uses: tj-actions/changed-files@24d32ffd492484c1d75e0c0b894501ddb9d30d62 # v47.0.0 with: + files: ui/** files_ignore: | ui/CHANGELOG.md ui/README.md diff --git a/.github/workflows/ui-tests.yml b/.github/workflows/ui-tests.yml index fcc05f743a..a5a5b5fa17 100644 --- a/.github/workflows/ui-tests.yml +++ b/.github/workflows/ui-tests.yml @@ -5,16 +5,10 @@ on: branches: - 'master' - 'v5.*' - paths: - - 'ui/**' - - '.github/workflows/ui-tests.yml' pull_request: branches: - 'master' - 'v5.*' - paths: - - 'ui/**' - - '.github/workflows/ui-tests.yml' concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -42,6 +36,9 @@ jobs: id: check-changes uses: tj-actions/changed-files@24d32ffd492484c1d75e0c0b894501ddb9d30d62 # v47.0.0 with: + files: | + ui/** + .github/workflows/ui-tests.yml files_ignore: | ui/CHANGELOG.md ui/README.md From 1bb6bc148ea7528dacfe2cb11aa5d47ae6325a3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20Arroba?= <19954079+cesararroba@users.noreply.github.com> Date: Tue, 4 Nov 2025 14:44:25 +0100 Subject: [PATCH 10/37] chore(github): fix prepare release action (#9159) --- .github/workflows/prepare-release.yml | 150 ++++++++++++-------------- 1 file changed, 70 insertions(+), 80 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 55b7d2e441..4fdfcbbf07 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -47,7 +47,7 @@ jobs: git config --global user.name 'prowler-bot' git config --global user.email '179230569+prowler-bot@users.noreply.github.com' - - name: Parse version and read changelogs + - name: Parse version and determine branch run: | # Validate version format (reusing pattern from sdk-bump-version.yml) if [[ $PROWLER_VERSION =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then @@ -64,66 +64,83 @@ jobs: BRANCH_NAME="v${MAJOR_VERSION}.${MINOR_VERSION}" echo "BRANCH_NAME=${BRANCH_NAME}" >> "${GITHUB_ENV}" - # Function to extract the latest version from changelog - extract_latest_version() { - local changelog_file="$1" - if [ -f "$changelog_file" ]; then - # Extract the first version entry (most recent) from changelog - # Format: ## [version] (1.2.3) or ## [vversion] (v1.2.3) - local version=$(grep -m 1 '^## \[' "$changelog_file" | sed 's/^## \[\(.*\)\].*/\1/' | sed 's/^v//' | tr -d '[:space:]') - echo "$version" - else - echo "" - fi - } - - # Read actual versions from changelogs (source of truth) - UI_VERSION=$(extract_latest_version "ui/CHANGELOG.md") - API_VERSION=$(extract_latest_version "api/CHANGELOG.md") - SDK_VERSION=$(extract_latest_version "prowler/CHANGELOG.md") - MCP_VERSION=$(extract_latest_version "mcp_server/CHANGELOG.md") - - echo "UI_VERSION=${UI_VERSION}" >> "${GITHUB_ENV}" - echo "API_VERSION=${API_VERSION}" >> "${GITHUB_ENV}" - echo "SDK_VERSION=${SDK_VERSION}" >> "${GITHUB_ENV}" - echo "MCP_VERSION=${MCP_VERSION}" >> "${GITHUB_ENV}" - - if [ -n "$UI_VERSION" ]; then - echo "Read UI version from changelog: $UI_VERSION" - else - echo "Warning: No UI version found in ui/CHANGELOG.md" - fi - - if [ -n "$API_VERSION" ]; then - echo "Read API version from changelog: $API_VERSION" - else - echo "Warning: No API version found in api/CHANGELOG.md" - fi - - if [ -n "$SDK_VERSION" ]; then - echo "Read SDK version from changelog: $SDK_VERSION" - else - echo "Warning: No SDK version found in prowler/CHANGELOG.md" - fi - - if [ -n "$MCP_VERSION" ]; then - echo "Read MCP version from changelog: $MCP_VERSION" - else - echo "Warning: No MCP version found in mcp_server/CHANGELOG.md" - fi - echo "Prowler version: $PROWLER_VERSION" echo "Branch name: $BRANCH_NAME" - echo "UI version: $UI_VERSION" - echo "API version: $API_VERSION" - echo "SDK version: $SDK_VERSION" - echo "MCP version: $MCP_VERSION" echo "Is minor release: $([ $PATCH_VERSION -eq 0 ] && echo 'true' || echo 'false')" else echo "Invalid version syntax: '$PROWLER_VERSION' (must be N.N.N)" >&2 exit 1 fi + - name: Checkout release branch + run: | + echo "Checking out branch $BRANCH_NAME for release $PROWLER_VERSION..." + if git show-ref --verify --quiet "refs/heads/$BRANCH_NAME"; then + echo "Branch $BRANCH_NAME exists locally, checking out..." + git checkout "$BRANCH_NAME" + elif git show-ref --verify --quiet "refs/remotes/origin/$BRANCH_NAME"; then + echo "Branch $BRANCH_NAME exists remotely, checking out..." + git checkout -b "$BRANCH_NAME" "origin/$BRANCH_NAME" + else + echo "ERROR: Branch $BRANCH_NAME does not exist. For minor releases (X.Y.0), create it manually first. For patch releases (X.Y.Z), the branch should already exist." + exit 1 + fi + + - name: Read changelog versions from release branch + run: | + # Function to extract the latest version from changelog + extract_latest_version() { + local changelog_file="$1" + if [ -f "$changelog_file" ]; then + # Extract the first version entry (most recent) from changelog + # Format: ## [version] (1.2.3) or ## [vversion] (v1.2.3) + local version=$(grep -m 1 '^## \[' "$changelog_file" | sed 's/^## \[\(.*\)\].*/\1/' | sed 's/^v//' | tr -d '[:space:]') + echo "$version" + else + echo "" + fi + } + + # Read actual versions from changelogs (source of truth) + UI_VERSION=$(extract_latest_version "ui/CHANGELOG.md") + API_VERSION=$(extract_latest_version "api/CHANGELOG.md") + SDK_VERSION=$(extract_latest_version "prowler/CHANGELOG.md") + MCP_VERSION=$(extract_latest_version "mcp_server/CHANGELOG.md") + + echo "UI_VERSION=${UI_VERSION}" >> "${GITHUB_ENV}" + echo "API_VERSION=${API_VERSION}" >> "${GITHUB_ENV}" + echo "SDK_VERSION=${SDK_VERSION}" >> "${GITHUB_ENV}" + echo "MCP_VERSION=${MCP_VERSION}" >> "${GITHUB_ENV}" + + if [ -n "$UI_VERSION" ]; then + echo "Read UI version from changelog: $UI_VERSION" + else + echo "Warning: No UI version found in ui/CHANGELOG.md" + fi + + if [ -n "$API_VERSION" ]; then + echo "Read API version from changelog: $API_VERSION" + else + echo "Warning: No API version found in api/CHANGELOG.md" + fi + + if [ -n "$SDK_VERSION" ]; then + echo "Read SDK version from changelog: $SDK_VERSION" + else + echo "Warning: No SDK version found in prowler/CHANGELOG.md" + fi + + if [ -n "$MCP_VERSION" ]; then + echo "Read MCP version from changelog: $MCP_VERSION" + else + echo "Warning: No MCP version found in mcp_server/CHANGELOG.md" + fi + + echo "UI version: $UI_VERSION" + echo "API version: $API_VERSION" + echo "SDK version: $SDK_VERSION" + echo "MCP version: $MCP_VERSION" + - name: Extract and combine changelog entries run: | set -e @@ -255,21 +272,6 @@ jobs: echo "Combined changelog preview:" cat combined_changelog.md - - name: Checkout release branch for patch release - if: ${{ env.PATCH_VERSION != '0' }} - run: | - echo "Patch release detected, checking out existing branch $BRANCH_NAME..." - if git show-ref --verify --quiet "refs/heads/$BRANCH_NAME"; then - echo "Branch $BRANCH_NAME exists locally, checking out..." - git checkout "$BRANCH_NAME" - elif git show-ref --verify --quiet "refs/remotes/origin/$BRANCH_NAME"; then - echo "Branch $BRANCH_NAME exists remotely, checking out..." - git checkout -b "$BRANCH_NAME" "origin/$BRANCH_NAME" - else - echo "ERROR: Branch $BRANCH_NAME should exist for patch release $PROWLER_VERSION" - exit 1 - fi - - name: Verify SDK version in pyproject.toml run: | CURRENT_VERSION=$(grep '^version = ' pyproject.toml | sed -E 's/version = "([^"]+)"/\1/' | tr -d '[:space:]') @@ -323,18 +325,6 @@ jobs: fi echo "✓ api/src/backend/api/v1/views.py version: $CURRENT_API_VERSION" - - name: Checkout release branch for minor release - if: ${{ env.PATCH_VERSION == '0' }} - run: | - echo "Minor release detected (patch = 0), checking out existing branch $BRANCH_NAME..." - if git show-ref --verify --quiet "refs/remotes/origin/$BRANCH_NAME"; then - echo "Branch $BRANCH_NAME exists remotely, checking out..." - git checkout -b "$BRANCH_NAME" "origin/$BRANCH_NAME" - else - echo "ERROR: Branch $BRANCH_NAME should exist for minor release $PROWLER_VERSION. Please create it manually first." - exit 1 - fi - - name: Update API prowler dependency for minor release if: ${{ env.PATCH_VERSION == '0' }} run: | From 1e584c5b583a5ce9018ac3c889897036e11baf0a Mon Sep 17 00:00:00 2001 From: Alejandro Bailo <59607668+alejandrobailo@users.noreply.github.com> Date: Tue, 4 Nov 2025 15:08:58 +0100 Subject: [PATCH 11/37] feat: new overview threat score component (#9125) --- ui/actions/overview/index.ts | 2 + ui/actions/overview/overview.ts | 28 +++ ui/actions/overview/types.ts | 60 +++++ .../components/risk-severity-chart.tsx | 2 +- .../new-overview/components/status-chart.tsx | 2 +- .../new-overview/components/threat-score.tsx | 224 ++++++++++++++++++ ui/app/(prowler)/new-overview/page.tsx | 47 +++- ui/components/graphs/donut-chart.tsx | 2 +- ui/components/graphs/horizontal-bar-chart.tsx | 4 +- ui/components/graphs/radial-chart.tsx | 115 ++++++++- 10 files changed, 473 insertions(+), 13 deletions(-) create mode 100644 ui/actions/overview/index.ts create mode 100644 ui/actions/overview/types.ts create mode 100644 ui/app/(prowler)/new-overview/components/threat-score.tsx diff --git a/ui/actions/overview/index.ts b/ui/actions/overview/index.ts new file mode 100644 index 0000000000..f1246a071c --- /dev/null +++ b/ui/actions/overview/index.ts @@ -0,0 +1,2 @@ +export * from "./overview"; +export * from "./types"; diff --git a/ui/actions/overview/overview.ts b/ui/actions/overview/overview.ts index 28e54befba..0c19f63b08 100644 --- a/ui/actions/overview/overview.ts +++ b/ui/actions/overview/overview.ts @@ -115,3 +115,31 @@ export const getFindingsBySeverity = async ({ return undefined; } }; + +export const getThreatScore = async ({ + filters = {}, +}: { + filters?: Record; +}) => { + const headers = await getAuthHeaders({ contentType: false }); + + const url = new URL(`${apiBaseUrl}/overviews/threatscore`); + + // Handle multiple filters + Object.entries(filters).forEach(([key, value]) => { + if (value !== undefined && value !== null && value !== "") { + url.searchParams.append(key, String(value)); + } + }); + + try { + const response = await fetch(url.toString(), { + headers, + }); + + return handleApiResponse(response); + } catch (error) { + console.error("Error fetching threat score overview:", error); + return undefined; + } +}; diff --git a/ui/actions/overview/types.ts b/ui/actions/overview/types.ts new file mode 100644 index 0000000000..4f82f2da42 --- /dev/null +++ b/ui/actions/overview/types.ts @@ -0,0 +1,60 @@ +// ThreatScore Snapshot Types +// Corresponds to the ThreatScoreSnapshot model from the API + +export interface CriticalRequirement { + requirement_id: string; + risk_level: number; + weight: number; + title: string; +} + +export interface SectionScores { + [sectionName: string]: number; +} + +export interface ThreatScoreSnapshotAttributes { + id: string; + inserted_at: string; + scan: string | null; + provider: string | null; + compliance_id: string; + overall_score: string; // Decimal as string from API + score_delta: string | null; // Decimal as string from API + section_scores: SectionScores; + critical_requirements: CriticalRequirement[]; + total_requirements: number; + passed_requirements: number; + failed_requirements: number; + manual_requirements: number; + total_findings: number; + passed_findings: number; + failed_findings: number; +} + +export interface ThreatScoreSnapshot { + id: string; + type: "threatscore-snapshots"; + attributes: ThreatScoreSnapshotAttributes; +} + +export interface ThreatScoreResponse { + data: ThreatScoreSnapshot[]; +} + +// Filters for ThreatScore endpoint +export interface ThreatScoreFilters { + snapshot_id?: string; + provider_id?: string; + provider_id__in?: string; + provider_type?: string; + provider_type__in?: string; + scan_id?: string; + scan_id__in?: string; + compliance_id?: string; + compliance_id__in?: string; + inserted_at?: string; + inserted_at__gte?: string; + inserted_at__lte?: string; + overall_score__gte?: string; + overall_score__lte?: string; +} diff --git a/ui/app/(prowler)/new-overview/components/risk-severity-chart.tsx b/ui/app/(prowler)/new-overview/components/risk-severity-chart.tsx index 3804441b10..b070a828ba 100644 --- a/ui/app/(prowler)/new-overview/components/risk-severity-chart.tsx +++ b/ui/app/(prowler)/new-overview/components/risk-severity-chart.tsx @@ -58,7 +58,7 @@ export const RiskSeverityChart = ({ ]; return ( - + Risk Severity diff --git a/ui/app/(prowler)/new-overview/components/status-chart.tsx b/ui/app/(prowler)/new-overview/components/status-chart.tsx index 10b4736aec..7e773f90e7 100644 --- a/ui/app/(prowler)/new-overview/components/status-chart.tsx +++ b/ui/app/(prowler)/new-overview/components/status-chart.tsx @@ -74,7 +74,7 @@ export const StatusChart = ({ ]; return ( - + Check Findings diff --git a/ui/app/(prowler)/new-overview/components/threat-score.tsx b/ui/app/(prowler)/new-overview/components/threat-score.tsx new file mode 100644 index 0000000000..511f6b9d42 --- /dev/null +++ b/ui/app/(prowler)/new-overview/components/threat-score.tsx @@ -0,0 +1,224 @@ +"use client"; + +import { MessageCircleWarning, ThumbsUp } from "lucide-react"; +import Link from "next/link"; + +import type { + CriticalRequirement, + SectionScores, +} from "@/actions/overview/types"; +import { RadialChart } from "@/components/graphs/radial-chart"; +import { + SEVERITY_COLORS, + STATUS_COLORS, +} from "@/components/graphs/shared/constants"; +import { + BaseCard, + CardContent, + CardHeader, + CardTitle, +} from "@/components/shadcn"; + +const THREAT_LEVEL_CONFIG = { + CRITICAL: { + label: "Critical Risk", + color: "text-red-500", + chartColor: SEVERITY_COLORS.Critical, + minScore: 0, + maxScore: 20, + }, + HIGH: { + label: "High Risk", + color: "text-orange-500", + chartColor: SEVERITY_COLORS.High, + minScore: 21, + maxScore: 40, + }, + MODERATE: { + label: "Moderately Secure", + color: "text-yellow-500", + chartColor: SEVERITY_COLORS.Medium, + minScore: 41, + maxScore: 60, + }, + LOW: { + label: "Low Risk", + color: "text-blue-500", + chartColor: SEVERITY_COLORS.Low, + minScore: 61, + maxScore: 80, + }, + SECURE: { + label: "Highly Secure", + color: "text-green-500", + chartColor: STATUS_COLORS.Success, + minScore: 81, + maxScore: 100, + }, +} as const; + +type ThreatLevelKey = keyof typeof THREAT_LEVEL_CONFIG; + +interface ThreatScoreProps { + score?: number | null; + scoreDelta?: number | null; + sectionScores?: SectionScores; + criticalRequirements?: CriticalRequirement[]; + onViewRemediationPlan?: () => void; + className?: string; +} + +function getThreatLevel(score: number): ThreatLevelKey { + for (const [key, config] of Object.entries(THREAT_LEVEL_CONFIG)) { + if (score >= config.minScore && score <= config.maxScore) { + return key as ThreatLevelKey; + } + } + return "MODERATE"; +} + +// Convert section scores to tooltip data for the radial chart +function convertSectionScoresToTooltipData( + sectionScores?: SectionScores, +): Array<{ name: string; value: number; color: string }> { + if (!sectionScores) return []; + + return Object.entries(sectionScores).map(([name, value]) => { + // Determine color based on score value + let color: string = SEVERITY_COLORS.Critical; + if (value >= 80) color = STATUS_COLORS.Success; + else if (value >= 60) color = SEVERITY_COLORS.Low; + else if (value >= 40) color = SEVERITY_COLORS.Medium; + else if (value >= 20) color = SEVERITY_COLORS.High; + + // Round to nearest integer + const roundedValue = Math.round(value); + + return { name, value: roundedValue, color }; + }); +} + +// Extract top gap names from critical requirements +function extractTopGaps( + criticalRequirements?: CriticalRequirement[], + limit = 2, +): string[] { + if (!criticalRequirements || criticalRequirements.length === 0) return []; + + // Sort by risk_level descending, then by weight descending + const sorted = [...criticalRequirements].sort((a, b) => { + if (b.risk_level !== a.risk_level) { + return b.risk_level - a.risk_level; + } + return b.weight - a.weight; + }); + + return sorted.slice(0, limit).map((req) => req.title); +} + +export function ThreatScore({ + score, + scoreDelta, + sectionScores, + criticalRequirements, +}: ThreatScoreProps) { + if (score === null || score === undefined) { + return ( + + + Prowler Threat Score + + +

+ No ThreatScore data available +

+
+
+ ); + } + + const threatLevel = getThreatLevel(score); + const config = THREAT_LEVEL_CONFIG[threatLevel]; + + // Convert section scores to tooltip data + const tooltipData = convertSectionScoresToTooltipData(sectionScores); + + // Extract top gaps from critical requirements + const gaps = extractTopGaps(criticalRequirements, 2); + + return ( + + + Prowler Threat Score + + + + {/* Radial Chart */} +
+
+ +
+ {/* Overlaid Text (centered) */} +
+

+ {config.label} +

+
+
+ + {/* Info Box */} +
+
+ {/* Improvement Message */} + {scoreDelta !== undefined && + scoreDelta !== null && + scoreDelta !== 0 && ( +
+ +

+ Threat score has {scoreDelta > 0 ? "improved" : "decreased"}{" "} + by {Math.abs(scoreDelta)}% +

+
+ )} + + {/* Gaps Message */} + {gaps.length > 0 && ( +
+ +

+ Major gaps include {gaps.slice(0, 2).join(", ")} + {gaps.length > 2 && ` & ${gaps.length - 2} more...`} +

+
+ )} + + {/* View Remediation Plan Button */} +
+ + + View Remediation Plan + + +
+
+
+
+
+ ); +} diff --git a/ui/app/(prowler)/new-overview/page.tsx b/ui/app/(prowler)/new-overview/page.tsx index 3d732fcf85..d45665be0e 100644 --- a/ui/app/(prowler)/new-overview/page.tsx +++ b/ui/app/(prowler)/new-overview/page.tsx @@ -3,6 +3,7 @@ import { Suspense } from "react"; import { getFindingsBySeverity, getFindingsByStatus, + getThreatScore, } from "@/actions/overview/overview"; import { getProviders } from "@/actions/providers"; import { ContentLayout } from "@/components/ui"; @@ -12,6 +13,7 @@ import { AccountsSelector } from "./components/accounts-selector"; import { ProviderTypeSelector } from "./components/provider-type-selector"; import { RiskSeverityChart } from "./components/risk-severity-chart"; import { StatusChart } from "./components/status-chart"; +import { ThreatScore } from "./components/threat-score"; const FILTER_PREFIX = "filter["; @@ -39,7 +41,17 @@ export default async function NewOverviewPage({ -
+
+ +

Loading...

+
+ } + > + + + @@ -143,3 +155,36 @@ const SSRRiskSeverityChart = async ({ /> ); }; + +const SSRThreatScore = async ({ + searchParams, +}: { + searchParams: SearchParamsProps | undefined | null; +}) => { + const filters = pickFilterParams(searchParams); + const threatScoreData = await getThreatScore({ filters }); + + // If no data, pass undefined score and let component handle empty state + if (!threatScoreData?.data || threatScoreData.data.length === 0) { + return ; + } + + // Get the first snapshot (aggregated or single provider) + const snapshot = threatScoreData.data[0]; + const attributes = snapshot.attributes; + + // Parse score from decimal string to number and round to integer + const score = Math.round(parseFloat(attributes.overall_score)); + const scoreDelta = attributes.score_delta + ? Math.round(parseFloat(attributes.score_delta)) + : null; + + return ( + + ); +}; diff --git a/ui/components/graphs/donut-chart.tsx b/ui/components/graphs/donut-chart.tsx index b2878fd17d..21fefd058b 100644 --- a/ui/components/graphs/donut-chart.tsx +++ b/ui/components/graphs/donut-chart.tsx @@ -181,7 +181,7 @@ export function DonutChart({ -
+
{(item.value > 0 || isEmpty) && (
{ + if (!active || !payload || !payload.length) return null; + + const tooltipItems = payload[0]?.payload?.tooltipData; + if ( + !tooltipItems || + !Array.isArray(tooltipItems) || + tooltipItems.length === 0 + ) + return null; + + return ( +
+
+ {tooltipItems.map((item: TooltipItem, index: number) => ( +
+

+ {item.name} +

+
+

+ {item.value}% +

+
+ ))} +
+
+ ); +}; + export function RadialChart({ percentage, - label = "Score", color = "var(--chart-success-color)", backgroundColor = CHART_COLORS.tooltipBackground, height = 250, @@ -30,14 +74,26 @@ export function RadialChart({ outerRadius = 100, startAngle = 90, endAngle = -270, + hasDots = false, + tooltipData, }: RadialChartProps) { + // Calculate the real barSize based on the difference + const barSize = outerRadius - innerRadius; const data = [ { - name: label, value: percentage, - fill: color, + tooltipData, }, ]; + const middleRadius = innerRadius; + const viewBoxWidth = height; + const viewBoxHeight = height; + const centerX = viewBoxWidth / 2; + const centerY = viewBoxHeight / 2; + const arcAngle = Math.abs(startAngle - endAngle); + const dotSpacing = 20; // 4px dot + 8px space + const arcCircumference = (arcAngle / 360) * (2 * Math.PI * middleRadius); + const numberOfDots = Math.floor(arcCircumference / dotSpacing); return ( @@ -46,7 +102,7 @@ export function RadialChart({ cy="50%" innerRadius={innerRadius} outerRadius={outerRadius} - barSize={20} + barSize={barSize} data={data} startAngle={startAngle} endAngle={endAngle} @@ -57,18 +113,63 @@ export function RadialChart({ angleAxisId={0} tick={false} /> + + {tooltipData && ( + } + wrapperStyle={{ zIndex: 1000 }} + cursor={false} + /> + )} + + + {hasDots && + Array.from({ length: numberOfDots }) + .slice(1, -1) + .map((_, i) => { + // Calculate the angle for this point + // Adjust the index since we now start from 1 + const angleProgress = (i + 1) / (numberOfDots - 1 || 1); + const currentAngle = + startAngle - angleProgress * (startAngle - endAngle); + + // Show dots only in the background part (after the percentage value) + const valueAngleEnd = + startAngle - (percentage / 100) * (startAngle - endAngle); + if (currentAngle > valueAngleEnd) { + return null; // Don't show dots in the part with value + } + + const currentAngleRad = (currentAngle * Math.PI) / 180; + + // Calculate absolute position in the viewBox + const x = centerX + middleRadius * Math.cos(currentAngleRad) + 22; + const y = centerY - middleRadius * Math.sin(currentAngleRad); + + return ( + + ); + })} + Date: Tue, 4 Nov 2025 11:44:56 -0500 Subject: [PATCH 12/37] chore(oci): rename OCI provider to oraclecloud with oci alias (#9126) --- .../migrations/0051_oraclecloud_provider.py | 4 +- api/src/backend/api/models.py | 6 +- api/src/backend/api/specs/v1.yaml | 198 +++++++++--------- api/src/backend/api/tests/test_utils.py | 6 +- api/src/backend/api/tests/test_views.py | 6 +- api/src/backend/api/utils.py | 14 +- api/src/backend/api/v1/serializers.py | 2 +- api/src/backend/conftest.py | 2 +- api/src/backend/tasks/jobs/export.py | 6 +- prowler/CHANGELOG.md | 1 + prowler/__main__.py | 8 +- .../{oci => oraclecloud}/__init__.py | 0 .../cis_3.0_oraclecloud.json} | 2 +- prowler/config/config.py | 2 +- prowler/lib/check/check.py | 20 +- prowler/lib/check/utils.py | 8 +- prowler/lib/cli/parser.py | 9 +- .../cis/{cis_oci.py => cis_oraclecloud.py} | 14 +- prowler/lib/outputs/compliance/cis/models.py | 6 +- prowler/lib/outputs/finding.py | 4 +- prowler/lib/outputs/outputs.py | 2 +- prowler/lib/outputs/summary_table.py | 2 +- prowler/lib/scan/scan.py | 10 +- prowler/providers/common/arguments.py | 18 +- prowler/providers/common/provider.py | 20 +- .../oraclecloud/lib/arguments/arguments.py | 17 +- .../oraclecloud/lib/service/service.py | 6 +- ...ci_provider.py => oraclecloud_provider.py} | 30 +-- ...s_instance_access_restricted.metadata.json | 2 +- ...og_retention_period_365_days.metadata.json | 2 +- ...ck_volume_encrypted_with_cmk.metadata.json | 2 +- ...ot_volume_encrypted_with_cmk.metadata.json | 2 +- .../cloudguard_enabled.metadata.json | 2 +- ...n_transit_encryption_enabled.metadata.json | 2 +- ...y_metadata_endpoint_disabled.metadata.json | 2 +- ...instance_secure_boot_enabled.metadata.json | 2 +- ...s_database_access_restricted.metadata.json | 2 +- ...opic_and_subscription_exists.metadata.json | 2 +- ...nts_rule_cloudguard_problems.metadata.json | 2 +- ...vents_rule_iam_group_changes.metadata.json | 2 +- ...ents_rule_iam_policy_changes.metadata.json | 2 +- ...le_identity_provider_changes.metadata.json | 2 +- ...le_idp_group_mapping_changes.metadata.json | 2 +- ...le_local_user_authentication.metadata.json | 2 +- ...rule_network_gateway_changes.metadata.json | 2 +- ...twork_security_group_changes.metadata.json | 2 +- ...nts_rule_route_table_changes.metadata.json | 2 +- ...s_rule_security_list_changes.metadata.json | 2 +- .../events_rule_user_changes.metadata.json | 2 +- .../events_rule_vcn_changes.metadata.json | 2 +- ...le_system_encrypted_with_cmk.metadata.json | 2 +- ...cannot_update_tenancy_admins.metadata.json | 2 +- ...tity_instance_principal_used.metadata.json | 2 +- ...esources_in_root_compartment.metadata.json | 2 +- ..._non_root_compartment_exists.metadata.json | 2 +- ...licy_expires_within_365_days.metadata.json | 2 +- ...ord_policy_minimum_length_14.metadata.json | 2 +- ...ssword_policy_prevents_reuse.metadata.json | 2 +- ...y_service_level_admins_exist.metadata.json | 2 +- ...cy_admin_permissions_limited.metadata.json | 2 +- ...ancy_admin_users_no_api_keys.metadata.json | 2 +- ...ser_api_keys_rotated_90_days.metadata.json | 2 +- ..._auth_tokens_rotated_90_days.metadata.json | 2 +- ..._secret_keys_rotated_90_days.metadata.json | 2 +- ...db_passwords_rotated_90_days.metadata.json | 2 +- ...r_mfa_enabled_console_access.metadata.json | 2 +- ...ity_user_valid_email_address.metadata.json | 2 +- ...n_instance_access_restricted.metadata.json | 2 +- .../kms_key_rotation_enabled.metadata.json | 2 +- ...urity_list_restricts_traffic.metadata.json | 2 +- ...ss_from_internet_to_rdp_port.metadata.json | 2 +- ...ss_from_internet_to_ssh_port.metadata.json | 2 +- ...ss_from_internet_to_rdp_port.metadata.json | 2 +- ...ss_from_internet_to_ssh_port.metadata.json | 2 +- ...vcn_subnet_flow_logs_enabled.metadata.json | 2 +- ...ge_bucket_encrypted_with_cmk.metadata.json | 2 +- ...orage_bucket_logging_enabled.metadata.json | 2 +- ...cket_not_publicly_accessible.metadata.json | 2 +- ...ge_bucket_versioning_enabled.metadata.json | 2 +- tests/lib/cli/parser_test.py | 4 +- tests/providers/oraclecloud/conftest.py | 38 ++-- tests/providers/oraclecloud/oci_fixtures.py | 4 +- ...alytics_instance_access_restricted_test.py | 12 +- .../analytics/analytics_service_test.py | 10 +- ...udit_log_retention_period_365_days_test.py | 8 +- .../services/audit/audit_service_test.py | 10 +- ...ge_block_volume_encrypted_with_cmk_test.py | 12 +- ...age_boot_volume_encrypted_with_cmk_test.py | 12 +- .../blockstorage/blockstorage_service_test.py | 10 +- .../cloudguard_enabled_test.py | 12 +- .../cloudguard/cloudguard_service_test.py | 10 +- ...ance_in_transit_encryption_enabled_test.py | 12 +- ..._legacy_metadata_endpoint_disabled_test.py | 12 +- ...mpute_instance_secure_boot_enabled_test.py | 12 +- .../services/compute/compute_service_test.py | 10 +- ...onomous_database_access_restricted_test.py | 12 +- .../database/database_service_test.py | 10 +- ...tion_topic_and_subscription_exists_test.py | 12 +- .../events_rule_cloudguard_problems_test.py | 12 +- .../events_rule_iam_group_changes_test.py | 12 +- .../events_rule_iam_policy_changes_test.py | 12 +- ...nts_rule_identity_provider_changes_test.py | 12 +- ...nts_rule_idp_group_mapping_changes_test.py | 12 +- ...nts_rule_local_user_authentication_test.py | 12 +- ...vents_rule_network_gateway_changes_test.py | 12 +- ...ule_network_security_group_changes_test.py | 12 +- .../events_rule_route_table_changes_test.py | 12 +- .../events_rule_security_list_changes_test.py | 12 +- .../events_rule_user_changes_test.py | 12 +- .../events_rule_vcn_changes_test.py | 12 +- .../services/events/events_service_test.py | 10 +- ...age_file_system_encrypted_with_cmk_test.py | 4 +- .../filestorage/filestorage_service_test.py | 10 +- ...dmins_cannot_update_tenancy_admins_test.py | 12 +- .../identity_instance_principal_used_test.py | 12 +- ...y_no_resources_in_root_compartment_test.py | 12 +- ...entity_non_root_compartment_exists_test.py | 12 +- ...ord_policy_expires_within_365_days_test.py | 12 +- ..._password_policy_minimum_length_14_test.py | 12 +- ...ity_password_policy_prevents_reuse_test.py | 12 +- ...dentity_service_level_admins_exist_test.py | 12 +- .../identity/identity_service_test.py | 10 +- ..._tenancy_admin_permissions_limited_test.py | 12 +- ...ty_tenancy_admin_users_no_api_keys_test.py | 12 +- ...tity_user_api_keys_rotated_90_days_test.py | 12 +- ...y_user_auth_tokens_rotated_90_days_test.py | 12 +- ...stomer_secret_keys_rotated_90_days_test.py | 12 +- ..._user_db_passwords_rotated_90_days_test.py | 12 +- ...ty_user_mfa_enabled_console_access_test.py | 12 +- .../identity_user_valid_email_address_test.py | 12 +- ...gration_instance_access_restricted_test.py | 12 +- .../integration/integration_service_test.py | 10 +- .../kms_key_rotation_enabled_test.py | 12 +- .../services/kms/kms_service_test.py | 10 +- .../services/logging/logging_service_test.py | 10 +- ...lt_security_list_restricts_traffic_test.py | 12 +- ..._ingress_from_internet_to_rdp_port_test.py | 12 +- ..._ingress_from_internet_to_ssh_port_test.py | 12 +- ..._ingress_from_internet_to_rdp_port_test.py | 12 +- ..._ingress_from_internet_to_ssh_port_test.py | 12 +- .../services/network/network_service_test.py | 10 +- ...twork_vcn_subnet_flow_logs_enabled_test.py | 12 +- ...tstorage_bucket_encrypted_with_cmk_test.py | 12 +- ...jectstorage_bucket_logging_enabled_test.py | 12 +- ...age_bucket_not_publicly_accessible_test.py | 12 +- ...tstorage_bucket_versioning_enabled_test.py | 12 +- .../objectstorage_service_test.py | 10 +- 147 files changed, 623 insertions(+), 688 deletions(-) rename prowler/compliance/{oci => oraclecloud}/__init__.py (100%) rename prowler/compliance/{oci/cis_3.0_oci.json => oraclecloud/cis_3.0_oraclecloud.json} (99%) rename prowler/lib/outputs/compliance/cis/{cis_oci.py => cis_oraclecloud.py} (92%) rename prowler/providers/oraclecloud/{oci_provider.py => oraclecloud_provider.py} (97%) diff --git a/api/src/backend/api/migrations/0051_oraclecloud_provider.py b/api/src/backend/api/migrations/0051_oraclecloud_provider.py index fd96dfbcd5..022c022ea6 100644 --- a/api/src/backend/api/migrations/0051_oraclecloud_provider.py +++ b/api/src/backend/api/migrations/0051_oraclecloud_provider.py @@ -22,13 +22,13 @@ class Migration(migrations.Migration): ("kubernetes", "Kubernetes"), ("m365", "M365"), ("github", "GitHub"), - ("oci", "Oracle Cloud Infrastructure"), + ("oraclecloud", "Oracle Cloud Infrastructure"), ], default="aws", ), ), migrations.RunSQL( - "ALTER TYPE provider ADD VALUE IF NOT EXISTS 'oci';", + "ALTER TYPE provider ADD VALUE IF NOT EXISTS 'oraclecloud';", reverse_sql=migrations.RunSQL.noop, ), ] diff --git a/api/src/backend/api/models.py b/api/src/backend/api/models.py index 43b6d7ae5c..304275f137 100644 --- a/api/src/backend/api/models.py +++ b/api/src/backend/api/models.py @@ -285,7 +285,7 @@ class Provider(RowLevelSecurityProtectedModel): M365 = "m365", _("M365") GITHUB = "github", _("GitHub") IAC = "iac", _("IaC") - OCI = "oci", _("Oracle Cloud Infrastructure") + ORACLECLOUD = "oraclecloud", _("Oracle Cloud Infrastructure") @staticmethod def validate_aws_uid(value): @@ -370,14 +370,14 @@ class Provider(RowLevelSecurityProtectedModel): ) @staticmethod - def validate_oci_uid(value): + def validate_oraclecloud_uid(value): if not re.match( r"^ocid1\.([a-z0-9_-]+)\.([a-z0-9_-]+)\.([a-z0-9_-]*)\.([a-z0-9]+)$", value ): raise ModelValidationError( detail="Oracle Cloud Infrastructure provider ID must be a valid tenancy OCID in the format: " "ocid1....", - code="oci-uid", + code="oraclecloud-uid", pointer="/data/attributes/uid", ) diff --git a/api/src/backend/api/specs/v1.yaml b/api/src/backend/api/specs/v1.yaml index d40a46f66e..6e81e5f81b 100644 --- a/api/src/backend/api/specs/v1.yaml +++ b/api/src/backend/api/specs/v1.yaml @@ -869,7 +869,7 @@ paths: name: filter[provider_type] schema: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -878,7 +878,7 @@ paths: - iac - kubernetes - m365 - - oci + - oraclecloud description: |- * `aws` - AWS * `azure` - Azure @@ -887,14 +887,14 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] schema: type: array items: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -902,7 +902,7 @@ paths: - github - kubernetes - m365 - - oci + - oraclecloud description: |- Multiple values may be separated by commas. @@ -913,7 +913,7 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure explode: false style: form - in: query @@ -1403,7 +1403,7 @@ paths: name: filter[provider_type] schema: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -1412,7 +1412,7 @@ paths: - iac - kubernetes - m365 - - oci + - oraclecloud description: |- * `aws` - AWS * `azure` - Azure @@ -1421,14 +1421,14 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] schema: type: array items: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -1436,7 +1436,7 @@ paths: - github - kubernetes - m365 - - oci + - oraclecloud description: |- Multiple values may be separated by commas. @@ -1447,7 +1447,7 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure explode: false style: form - in: query @@ -1845,7 +1845,7 @@ paths: name: filter[provider_type] schema: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -1854,7 +1854,7 @@ paths: - iac - kubernetes - m365 - - oci + - oraclecloud description: |- * `aws` - AWS * `azure` - Azure @@ -1863,14 +1863,14 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] schema: type: array items: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -1878,7 +1878,7 @@ paths: - github - kubernetes - m365 - - oci + - oraclecloud description: |- Multiple values may be separated by commas. @@ -1889,7 +1889,7 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure explode: false style: form - in: query @@ -2285,7 +2285,7 @@ paths: name: filter[provider_type] schema: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -2294,7 +2294,7 @@ paths: - iac - kubernetes - m365 - - oci + - oraclecloud description: |- * `aws` - AWS * `azure` - Azure @@ -2303,14 +2303,14 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] schema: type: array items: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -2318,7 +2318,7 @@ paths: - github - kubernetes - m365 - - oci + - oraclecloud description: |- Multiple values may be separated by commas. @@ -2329,7 +2329,7 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure explode: false style: form - in: query @@ -2713,7 +2713,7 @@ paths: name: filter[provider_type] schema: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -2722,7 +2722,7 @@ paths: - iac - kubernetes - m365 - - oci + - oraclecloud description: |- * `aws` - AWS * `azure` - Azure @@ -2731,14 +2731,14 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] schema: type: array items: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -2746,7 +2746,7 @@ paths: - github - kubernetes - m365 - - oci + - oraclecloud description: |- Multiple values may be separated by commas. @@ -2757,7 +2757,7 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure explode: false style: form - in: query @@ -4545,7 +4545,7 @@ paths: name: filter[provider_type] schema: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -4554,7 +4554,7 @@ paths: - iac - kubernetes - m365 - - oci + - oraclecloud description: |- * `aws` - AWS * `azure` - Azure @@ -4563,14 +4563,14 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] schema: type: array items: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -4578,7 +4578,7 @@ paths: - github - kubernetes - m365 - - oci + - oraclecloud description: |- Multiple values may be separated by commas. @@ -4589,7 +4589,7 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure explode: false style: form - in: query @@ -4729,7 +4729,7 @@ paths: name: filter[provider_type] schema: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -4738,7 +4738,7 @@ paths: - iac - kubernetes - m365 - - oci + - oraclecloud description: |- * `aws` - AWS * `azure` - Azure @@ -4747,14 +4747,14 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] schema: type: array items: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -4762,7 +4762,7 @@ paths: - github - kubernetes - m365 - - oci + - oraclecloud description: |- Multiple values may be separated by commas. @@ -4773,7 +4773,7 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure explode: false style: form - in: query @@ -4979,7 +4979,7 @@ paths: name: filter[provider_type] schema: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -4988,7 +4988,7 @@ paths: - iac - kubernetes - m365 - - oci + - oraclecloud description: |- * `aws` - AWS * `azure` - Azure @@ -4997,14 +4997,14 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] schema: type: array items: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -5012,7 +5012,7 @@ paths: - github - kubernetes - m365 - - oci + - oraclecloud description: |- Multiple values may be separated by commas. @@ -5023,7 +5023,7 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure explode: false style: form - in: query @@ -5709,7 +5709,7 @@ paths: name: filter[provider] schema: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -5718,7 +5718,7 @@ paths: - iac - kubernetes - m365 - - oci + - oraclecloud description: |- * `aws` - AWS * `azure` - Azure @@ -5727,14 +5727,14 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure - in: query name: filter[provider__in] schema: type: array items: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -5742,7 +5742,7 @@ paths: - github - kubernetes - m365 - - oci + - oraclecloud description: |- Multiple values may be separated by commas. @@ -5752,14 +5752,14 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure explode: false style: form - in: query name: filter[provider_type] schema: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -5767,7 +5767,7 @@ paths: - github - kubernetes - m365 - - oci + - oraclecloud description: |- * `aws` - AWS * `azure` - Azure @@ -5775,14 +5775,14 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] schema: type: array items: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -5790,7 +5790,7 @@ paths: - github - kubernetes - m365 - - oci + - oraclecloud description: |- Multiple values may be separated by commas. @@ -5800,7 +5800,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure explode: false style: form - name: filter[search] @@ -6398,7 +6398,7 @@ paths: name: filter[provider_type] schema: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -6407,7 +6407,7 @@ paths: - iac - kubernetes - m365 - - oci + - oraclecloud description: |- * `aws` - AWS * `azure` - Azure @@ -6416,14 +6416,14 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] schema: type: array items: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -6431,7 +6431,7 @@ paths: - github - kubernetes - m365 - - oci + - oraclecloud description: |- Multiple values may be separated by commas. @@ -6442,7 +6442,7 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure explode: false style: form - in: query @@ -6770,7 +6770,7 @@ paths: name: filter[provider_type] schema: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -6779,7 +6779,7 @@ paths: - iac - kubernetes - m365 - - oci + - oraclecloud description: |- * `aws` - AWS * `azure` - Azure @@ -6788,14 +6788,14 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] schema: type: array items: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -6803,7 +6803,7 @@ paths: - github - kubernetes - m365 - - oci + - oraclecloud description: |- Multiple values may be separated by commas. @@ -6814,7 +6814,7 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure explode: false style: form - in: query @@ -7043,7 +7043,7 @@ paths: name: filter[provider_type] schema: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -7052,7 +7052,7 @@ paths: - iac - kubernetes - m365 - - oci + - oraclecloud description: |- * `aws` - AWS * `azure` - Azure @@ -7061,14 +7061,14 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] schema: type: array items: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -7076,7 +7076,7 @@ paths: - github - kubernetes - m365 - - oci + - oraclecloud description: |- Multiple values may be separated by commas. @@ -7087,7 +7087,7 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure explode: false style: form - in: query @@ -7322,7 +7322,7 @@ paths: name: filter[provider_type] schema: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -7331,7 +7331,7 @@ paths: - iac - kubernetes - m365 - - oci + - oraclecloud description: |- * `aws` - AWS * `azure` - Azure @@ -7340,14 +7340,14 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] schema: type: array items: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -7355,7 +7355,7 @@ paths: - github - kubernetes - m365 - - oci + - oraclecloud description: |- Multiple values may be separated by commas. @@ -7366,7 +7366,7 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure explode: false style: form - in: query @@ -8164,7 +8164,7 @@ paths: name: filter[provider_type] schema: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -8173,7 +8173,7 @@ paths: - iac - kubernetes - m365 - - oci + - oraclecloud description: |- * `aws` - AWS * `azure` - Azure @@ -8182,14 +8182,14 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure - in: query name: filter[provider_type__in] schema: type: array items: type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 enum: - aws - azure @@ -8197,7 +8197,7 @@ paths: - github - kubernetes - m365 - - oci + - oraclecloud description: |- Multiple values may be separated by commas. @@ -8208,7 +8208,7 @@ paths: * `m365` - M365 * `github` - GitHub * `iac` - IaC - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure explode: false style: form - in: query @@ -15280,7 +15280,7 @@ components: - kubernetes - m365 - github - - oci + - oraclecloud type: string description: |- * `aws` - AWS @@ -15289,8 +15289,8 @@ components: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub - * `oci` - Oracle Cloud Infrastructure - x-spec-enum-id: 6f034074d7104650 + * `oraclecloud` - Oracle Cloud Infrastructure + x-spec-enum-id: 7087703783970b51 uid: type: string title: Unique identifier for the provider, set by the provider @@ -15402,9 +15402,9 @@ components: - kubernetes - m365 - github - - oci + - oraclecloud type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 description: |- Type of provider to create. @@ -15414,7 +15414,7 @@ components: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure uid: type: string title: Unique identifier for the provider, set by the provider @@ -15458,9 +15458,9 @@ components: - kubernetes - m365 - github - - oci + - oraclecloud type: string - x-spec-enum-id: 6f034074d7104650 + x-spec-enum-id: 7087703783970b51 description: |- Type of provider to create. @@ -15470,7 +15470,7 @@ components: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub - * `oci` - Oracle Cloud Infrastructure + * `oraclecloud` - Oracle Cloud Infrastructure uid: type: string minLength: 3 diff --git a/api/src/backend/api/tests/test_utils.py b/api/src/backend/api/tests/test_utils.py index 4926d722b0..02378eb11b 100644 --- a/api/src/backend/api/tests/test_utils.py +++ b/api/src/backend/api/tests/test_utils.py @@ -22,7 +22,7 @@ from prowler.providers.azure.azure_provider import AzureProvider from prowler.providers.gcp.gcp_provider import GcpProvider from prowler.providers.kubernetes.kubernetes_provider import KubernetesProvider from prowler.providers.m365.m365_provider import M365Provider -from prowler.providers.oraclecloud.oci_provider import OciProvider +from prowler.providers.oraclecloud.oraclecloud_provider import OraclecloudProvider class TestMergeDicts: @@ -109,7 +109,7 @@ class TestReturnProwlerProvider: (Provider.ProviderChoices.AZURE.value, AzureProvider), (Provider.ProviderChoices.KUBERNETES.value, KubernetesProvider), (Provider.ProviderChoices.M365.value, M365Provider), - (Provider.ProviderChoices.OCI.value, OciProvider), + (Provider.ProviderChoices.ORACLECLOUD.value, OraclecloudProvider), ], ) def test_return_prowler_provider(self, provider_type, expected_provider): @@ -206,7 +206,7 @@ class TestGetProwlerProviderKwargs: {"organizations": ["provider_uid"]}, ), ( - Provider.ProviderChoices.OCI.value, + Provider.ProviderChoices.ORACLECLOUD.value, {}, ), ], diff --git a/api/src/backend/api/tests/test_views.py b/api/src/backend/api/tests/test_views.py index 40835efee7..82db438d44 100644 --- a/api/src/backend/api/tests/test_views.py +++ b/api/src/backend/api/tests/test_views.py @@ -2022,7 +2022,7 @@ class TestProviderSecretViewSet: ), # OCI with API key credentials (with key_content) ( - Provider.ProviderChoices.OCI.value, + Provider.ProviderChoices.ORACLECLOUD.value, ProviderSecret.TypeChoices.STATIC, { "user": "ocid1.user.oc1..aaaaaaaakldibrbov4ubh25aqdeiroklxjngwka7u6w7no3glmdq3n5sxtkq", @@ -2034,7 +2034,7 @@ class TestProviderSecretViewSet: ), # OCI with API key credentials (with key_file) ( - Provider.ProviderChoices.OCI.value, + Provider.ProviderChoices.ORACLECLOUD.value, ProviderSecret.TypeChoices.STATIC, { "user": "ocid1.user.oc1..aaaaaaaakldibrbov4ubh25aqdeiroklxjngwka7u6w7no3glmdq3n5sxtkq", @@ -2046,7 +2046,7 @@ class TestProviderSecretViewSet: ), # OCI with API key credentials (with passphrase) ( - Provider.ProviderChoices.OCI.value, + Provider.ProviderChoices.ORACLECLOUD.value, ProviderSecret.TypeChoices.STATIC, { "user": "ocid1.user.oc1..aaaaaaaakldibrbov4ubh25aqdeiroklxjngwka7u6w7no3glmdq3n5sxtkq", diff --git a/api/src/backend/api/utils.py b/api/src/backend/api/utils.py index 024c7581d7..c7db08435b 100644 --- a/api/src/backend/api/utils.py +++ b/api/src/backend/api/utils.py @@ -21,7 +21,7 @@ from prowler.providers.github.github_provider import GithubProvider from prowler.providers.iac.iac_provider import IacProvider from prowler.providers.kubernetes.kubernetes_provider import KubernetesProvider from prowler.providers.m365.m365_provider import M365Provider -from prowler.providers.oraclecloud.oci_provider import OciProvider +from prowler.providers.oraclecloud.oraclecloud_provider import OraclecloudProvider class CustomOAuth2Client(OAuth2Client): @@ -70,7 +70,7 @@ def return_prowler_provider( | IacProvider | KubernetesProvider | M365Provider - | OciProvider + | OraclecloudProvider ]: """Return the Prowler provider class based on the given provider type. @@ -78,7 +78,7 @@ def return_prowler_provider( provider (Provider): The provider object containing the provider type and associated secrets. Returns: - AwsProvider | AzureProvider | GcpProvider | GithubProvider | IacProvider | KubernetesProvider | M365Provider | OciProvider: The corresponding provider class. + AwsProvider | AzureProvider | GcpProvider | GithubProvider | IacProvider | KubernetesProvider | M365Provider | OraclecloudProvider: The corresponding provider class. Raises: ValueError: If the provider type specified in `provider.provider` is not supported. @@ -98,8 +98,8 @@ def return_prowler_provider( prowler_provider = GithubProvider case Provider.ProviderChoices.IAC.value: prowler_provider = IacProvider - case Provider.ProviderChoices.OCI.value: - prowler_provider = OciProvider + case Provider.ProviderChoices.ORACLECLOUD.value: + prowler_provider = OraclecloudProvider case _: raise ValueError(f"Provider type {provider.provider} not supported") return prowler_provider @@ -166,7 +166,7 @@ def initialize_prowler_provider( | IacProvider | KubernetesProvider | M365Provider - | OciProvider + | OraclecloudProvider ): """Initialize a Prowler provider instance based on the given provider type. @@ -176,7 +176,7 @@ def initialize_prowler_provider( Returns: AwsProvider | AzureProvider | GcpProvider | GithubProvider | IacProvider | KubernetesProvider | M365Provider | OciProvider: An instance of the corresponding provider class - (`AwsProvider`, `AzureProvider`, `GcpProvider`, `GithubProvider`, `IacProvider`, `KubernetesProvider`, `M365Provider` or `OciProvider`) initialized with the + (`AwsProvider`, `AzureProvider`, `GcpProvider`, `GithubProvider`, `IacProvider`, `KubernetesProvider`, `M365Provider` or `OraclecloudProvider`) initialized with the provider's secrets. """ prowler_provider = return_prowler_provider(provider) diff --git a/api/src/backend/api/v1/serializers.py b/api/src/backend/api/v1/serializers.py index 0dd0fb53b5..682d94f798 100644 --- a/api/src/backend/api/v1/serializers.py +++ b/api/src/backend/api/v1/serializers.py @@ -1368,7 +1368,7 @@ class BaseWriteProviderSecretSerializer(BaseWriteSerializer): serializer = KubernetesProviderSecret(data=secret) elif provider_type == Provider.ProviderChoices.M365.value: serializer = M365ProviderSecret(data=secret) - elif provider_type == Provider.ProviderChoices.OCI.value: + elif provider_type == Provider.ProviderChoices.ORACLECLOUD.value: serializer = OracleCloudProviderSecret(data=secret) else: raise serializers.ValidationError( diff --git a/api/src/backend/conftest.py b/api/src/backend/conftest.py index 872dc60601..4e35b5c83f 100644 --- a/api/src/backend/conftest.py +++ b/api/src/backend/conftest.py @@ -501,7 +501,7 @@ def providers_fixture(tenants_fixture): tenant_id=tenant.id, ) provider7 = Provider.objects.create( - provider="oci", + provider="oraclecloud", uid="ocid1.tenancy.oc1..aaaaaaaa3dwoazoox4q7wrvriywpokp5grlhgnkwtyt6dmwyou7no6mdmzda", alias="oci_testing", tenant_id=tenant.id, diff --git a/api/src/backend/tasks/jobs/export.py b/api/src/backend/tasks/jobs/export.py index 66319ec7eb..a3aee7bfc9 100644 --- a/api/src/backend/tasks/jobs/export.py +++ b/api/src/backend/tasks/jobs/export.py @@ -32,7 +32,7 @@ from prowler.lib.outputs.compliance.cis.cis_gcp import GCPCIS from prowler.lib.outputs.compliance.cis.cis_github import GithubCIS from prowler.lib.outputs.compliance.cis.cis_kubernetes import KubernetesCIS from prowler.lib.outputs.compliance.cis.cis_m365 import M365CIS -from prowler.lib.outputs.compliance.cis.cis_oci import OCICIS +from prowler.lib.outputs.compliance.cis.cis_oraclecloud import OracleCloudCIS from prowler.lib.outputs.compliance.ens.ens_aws import AWSENS from prowler.lib.outputs.compliance.ens.ens_azure import AzureENS from prowler.lib.outputs.compliance.ens.ens_gcp import GCPENS @@ -117,8 +117,8 @@ COMPLIANCE_CLASS_MAP = { # IaC provider doesn't have specific compliance frameworks yet # Trivy handles its own compliance checks ], - "oci": [ - (lambda name: name.startswith("cis_"), OCICIS), + "oraclecloud": [ + (lambda name: name.startswith("cis_"), OracleCloudCIS), ], } diff --git a/prowler/CHANGELOG.md b/prowler/CHANGELOG.md index a7c31bdc1f..334aea97cd 100644 --- a/prowler/CHANGELOG.md +++ b/prowler/CHANGELOG.md @@ -33,6 +33,7 @@ All notable changes to the **Prowler SDK** are documented in this file. - Update AWS FSx service metadata to new format [(#9006)](https://github.com/prowler-cloud/prowler/pull/9006) - Update AWS Glacier service metadata to new format [(#9007)](https://github.com/prowler-cloud/prowler/pull/9007) - Update AWS CodeArtifact service metadata to new format [(#8850)](https://github.com/prowler-cloud/prowler/pull/8850) +- Rename OCI provider to oraclecloud with oci alias [(#9126)](https://github.com/prowler-cloud/prowler/pull/9126) --- diff --git a/prowler/__main__.py b/prowler/__main__.py index 7d578a7c6a..2227c6c645 100644 --- a/prowler/__main__.py +++ b/prowler/__main__.py @@ -61,7 +61,7 @@ from prowler.lib.outputs.compliance.cis.cis_gcp import GCPCIS from prowler.lib.outputs.compliance.cis.cis_github import GithubCIS from prowler.lib.outputs.compliance.cis.cis_kubernetes import KubernetesCIS from prowler.lib.outputs.compliance.cis.cis_m365 import M365CIS -from prowler.lib.outputs.compliance.cis.cis_oci import OCICIS +from prowler.lib.outputs.compliance.cis.cis_oraclecloud import OracleCloudCIS from prowler.lib.outputs.compliance.compliance import display_compliance_table from prowler.lib.outputs.compliance.ens.ens_aws import AWSENS from prowler.lib.outputs.compliance.ens.ens_azure import AzureENS @@ -334,7 +334,7 @@ def prowler(): output_options = IACOutputOptions(args, bulk_checks_metadata) elif provider == "llm": output_options = LLMOutputOptions(args, bulk_checks_metadata) - elif provider == "oci": + elif provider == "oraclecloud": output_options = OCIOutputOptions( args, bulk_checks_metadata, global_provider.identity ) @@ -969,7 +969,7 @@ def prowler(): generated_outputs["compliance"].append(generic_compliance) generic_compliance.batch_write_data_to_file() - elif provider == "oci": + elif provider == "oraclecloud": for compliance_name in input_compliance_frameworks: if compliance_name.startswith("cis_"): # Generate CIS Finding Object @@ -977,7 +977,7 @@ def prowler(): f"{output_options.output_directory}/compliance/" f"{output_options.output_filename}_{compliance_name}.csv" ) - cis = OCICIS( + cis = OracleCloudCIS( findings=finding_outputs, compliance=bulk_compliance_frameworks[compliance_name], file_path=filename, diff --git a/prowler/compliance/oci/__init__.py b/prowler/compliance/oraclecloud/__init__.py similarity index 100% rename from prowler/compliance/oci/__init__.py rename to prowler/compliance/oraclecloud/__init__.py diff --git a/prowler/compliance/oci/cis_3.0_oci.json b/prowler/compliance/oraclecloud/cis_3.0_oraclecloud.json similarity index 99% rename from prowler/compliance/oci/cis_3.0_oci.json rename to prowler/compliance/oraclecloud/cis_3.0_oraclecloud.json index 033a0845e5..76ff7cd7ef 100644 --- a/prowler/compliance/oci/cis_3.0_oci.json +++ b/prowler/compliance/oraclecloud/cis_3.0_oraclecloud.json @@ -2,7 +2,7 @@ "Framework": "CIS", "Name": "CIS Oracle Cloud Infrastructure Foundations Benchmark v3.0.0", "Version": "3.0", - "Provider": "OCI", + "Provider": "OracleCloud", "Description": "The CIS Oracle Cloud Infrastructure Foundations Benchmark provides prescriptive guidance for configuring security options for Oracle Cloud Infrastructure with an emphasis on foundational, testable, and architecture agnostic settings.", "Requirements": [ { diff --git a/prowler/config/config.py b/prowler/config/config.py index b8fbe91074..d925a37d31 100644 --- a/prowler/config/config.py +++ b/prowler/config/config.py @@ -33,7 +33,7 @@ class Provider(str, Enum): IAC = "iac" NHN = "nhn" MONGODBATLAS = "mongodbatlas" - OCI = "oci" + ORACLECLOUD = "oraclecloud" # Compliance diff --git a/prowler/lib/check/check.py b/prowler/lib/check/check.py index 0925c14925..d8f395d7ba 100644 --- a/prowler/lib/check/check.py +++ b/prowler/lib/check/check.py @@ -438,16 +438,8 @@ def execute_checks( service = check_name.split("_")[0] try: try: - # Map CLI provider names to directory names (for cases where they differ) - provider_directory_map = { - "oci": "oraclecloud", # OCI SDK conflict avoidance - } - provider_directory = provider_directory_map.get( - global_provider.type, global_provider.type - ) - # Import check module - check_module_path = f"prowler.providers.{provider_directory}.services.{service}.{check_name}.{check_name}" + check_module_path = f"prowler.providers.{global_provider.type}.services.{service}.{check_name}.{check_name}" lib = import_check(check_module_path) # Recover functions from check check_to_execute = getattr(lib, check_name) @@ -526,16 +518,8 @@ def execute_checks( ) try: try: - # Map CLI provider names to directory names (for cases where they differ) - provider_directory_map = { - "oci": "oraclecloud", # oci SDK conflict avoidance - } - provider_directory = provider_directory_map.get( - global_provider.type, global_provider.type - ) - # Import check module - check_module_path = f"prowler.providers.{provider_directory}.services.{service}.{check_name}.{check_name}" + check_module_path = f"prowler.providers.{global_provider.type}.services.{service}.{check_name}.{check_name}" lib = import_check(check_module_path) # Recover functions from check check_to_execute = getattr(lib, check_name) diff --git a/prowler/lib/check/utils.py b/prowler/lib/check/utils.py index 67dd5cda20..8cf37817c9 100644 --- a/prowler/lib/check/utils.py +++ b/prowler/lib/check/utils.py @@ -46,14 +46,8 @@ def recover_checks_from_provider( # List all available modules in the selected provider and service def list_modules(provider: str, service: str): - # Map CLI provider names to directory names (for cases where they differ) - provider_directory_map = { - "oci": "oraclecloud", # OCI SDK conflict avoidance - } - provider_directory = provider_directory_map.get(provider, provider) - # This module path requires the full path including "prowler." - module_path = f"prowler.providers.{provider_directory}.services" + module_path = f"prowler.providers.{provider}.services" if service: module_path += f".{service}" return walk_packages( diff --git a/prowler/lib/cli/parser.py b/prowler/lib/cli/parser.py index aaeda914bb..07327e5334 100644 --- a/prowler/lib/cli/parser.py +++ b/prowler/lib/cli/parser.py @@ -26,17 +26,17 @@ class ProwlerArgumentParser: self.parser = argparse.ArgumentParser( prog="prowler", formatter_class=RawTextHelpFormatter, - usage="prowler [-h] [--version] {aws,azure,gcp,kubernetes,m365,github,nhn,mongodbatlas,oci,dashboard,iac} ...", + usage="prowler [-h] [--version] {aws,azure,gcp,kubernetes,m365,github,nhn,mongodbatlas,oraclecloud,dashboard,iac} ...", epilog=""" Available Cloud Providers: - {aws,azure,gcp,kubernetes,m365,github,iac,llm,nhn,mongodbatlas,oci} + {aws,azure,gcp,kubernetes,m365,github,iac,llm,nhn,mongodbatlas,oraclecloud} aws AWS Provider azure Azure Provider gcp GCP Provider kubernetes Kubernetes Provider m365 Microsoft 365 Provider github GitHub Provider - oci Oracle Cloud Infrastructure Provider + oraclecloud Oracle Cloud Infrastructure Provider iac IaC Provider (Beta) llm LLM Provider (Beta) nhn NHN Provider (Unofficial) @@ -113,6 +113,9 @@ Detailed documentation at https://docs.prowler.com # Microsoft 365 elif sys.argv[1] == "microsoft365": sys.argv[1] = "m365" + # Oracle Cloud Infrastructure + elif sys.argv[1] == "oci": + sys.argv[1] = "oraclecloud" # Parse arguments args = self.parser.parse_args() diff --git a/prowler/lib/outputs/compliance/cis/cis_oci.py b/prowler/lib/outputs/compliance/cis/cis_oraclecloud.py similarity index 92% rename from prowler/lib/outputs/compliance/cis/cis_oci.py rename to prowler/lib/outputs/compliance/cis/cis_oraclecloud.py index 6d11bedbef..19e6e1d8c8 100644 --- a/prowler/lib/outputs/compliance/cis/cis_oci.py +++ b/prowler/lib/outputs/compliance/cis/cis_oraclecloud.py @@ -1,20 +1,20 @@ from prowler.config.config import timestamp from prowler.lib.check.compliance_models import Compliance -from prowler.lib.outputs.compliance.cis.models import OCICISModel +from prowler.lib.outputs.compliance.cis.models import OracleCloudCISModel from prowler.lib.outputs.compliance.compliance_output import ComplianceOutput from prowler.lib.outputs.finding import Finding -class OCICIS(ComplianceOutput): +class OracleCloudCIS(ComplianceOutput): """ - This class represents the OCI CIS compliance output. + This class represents the Oracle Cloud CIS compliance output. Attributes: - _data (list): A list to store transformed data from findings. - _file_descriptor (TextIOWrapper): A file descriptor to write data to a file. Methods: - - transform: Transforms findings into OCI CIS compliance format. + - transform: Transforms findings into Oracle Cloud CIS compliance format. """ def transform( @@ -24,7 +24,7 @@ class OCICIS(ComplianceOutput): compliance_name: str, ) -> None: """ - Transforms a list of findings into OCI CIS compliance format. + Transforms a list of findings into Oracle Cloud CIS compliance format. Parameters: - findings (list): A list of findings. @@ -40,7 +40,7 @@ class OCICIS(ComplianceOutput): for requirement in compliance.Requirements: if requirement.Id in finding_requirements: for attribute in requirement.Attributes: - compliance_row = OCICISModel( + compliance_row = OracleCloudCISModel( Provider=finding.provider, Description=compliance.Description, TenancyId=finding.account_uid, @@ -74,7 +74,7 @@ class OCICIS(ComplianceOutput): for requirement in compliance.Requirements: if not requirement.Checks: for attribute in requirement.Attributes: - compliance_row = OCICISModel( + compliance_row = OracleCloudCISModel( Provider=compliance.Provider.lower(), Description=compliance.Description, TenancyId="", diff --git a/prowler/lib/outputs/compliance/cis/models.py b/prowler/lib/outputs/compliance/cis/models.py index 3168a8c04c..6f3bb45c5f 100644 --- a/prowler/lib/outputs/compliance/cis/models.py +++ b/prowler/lib/outputs/compliance/cis/models.py @@ -207,9 +207,9 @@ class GithubCISModel(BaseModel): Name: str -class OCICISModel(BaseModel): +class OracleCloudCISModel(BaseModel): """ - OCICISModel generates a finding's output in OCI CIS Compliance format. + OracleCloudCISModel generates a finding's output in Oracle Cloud CIS Compliance format. """ Provider: str @@ -248,7 +248,7 @@ CIS_GCP = GCPCISModel CIS_Kubernetes = KubernetesCISModel CIS_M365 = M365CISModel CIS_Github = GithubCISModel -CIS_OCI = OCICISModel +CIS_OracleCloud = OracleCloudCISModel # TODO: Create a parent class for the common fields of CIS and have the specific classes from each provider to inherit from it. diff --git a/prowler/lib/outputs/finding.py b/prowler/lib/outputs/finding.py index 1a558fd11d..87db251156 100644 --- a/prowler/lib/outputs/finding.py +++ b/prowler/lib/outputs/finding.py @@ -330,7 +330,7 @@ class Finding(BaseModel): output_data["resource_uid"] = check_output.model output_data["region"] = check_output.model - elif provider.type == "oci": + elif provider.type == "oraclecloud": output_data["auth_method"] = ( f"Profile: {get_nested_attribute(provider, 'session.profile')}" ) @@ -418,7 +418,7 @@ class Finding(BaseModel): # For IaC, we don't have resource_line_range in the Finding model # It would need to be extracted from the resource metadata if needed finding.resource_line_range = "" # Set empty for compatibility - elif provider.type == "oci": + elif provider.type == "oraclecloud": finding.compartment_id = getattr(finding, "compartment_id", "") finding.check_metadata = CheckMetadata( diff --git a/prowler/lib/outputs/outputs.py b/prowler/lib/outputs/outputs.py index d7f1f6435a..11355ea5f7 100644 --- a/prowler/lib/outputs/outputs.py +++ b/prowler/lib/outputs/outputs.py @@ -28,7 +28,7 @@ def stdout_report(finding, color, verbose, status, fix): details = finding.check_metadata.CheckID if finding.check_metadata.Provider == "iac": details = finding.check_metadata.CheckID - if finding.check_metadata.Provider == "oci": + if finding.check_metadata.Provider == "oraclecloud": details = finding.region if (verbose or fix) and (not status or finding.status in status): diff --git a/prowler/lib/outputs/summary_table.py b/prowler/lib/outputs/summary_table.py index 03ca23453a..747bae1821 100644 --- a/prowler/lib/outputs/summary_table.py +++ b/prowler/lib/outputs/summary_table.py @@ -67,7 +67,7 @@ def display_summary_table( elif provider.type == "llm": entity_type = "LLM" audited_entities = provider.model - elif provider.type == "oci": + elif provider.type == "oraclecloud": entity_type = "Tenancy" audited_entities = ( provider.identity.tenancy_name diff --git a/prowler/lib/scan/scan.py b/prowler/lib/scan/scan.py index 062ea80738..61bc6dd684 100644 --- a/prowler/lib/scan/scan.py +++ b/prowler/lib/scan/scan.py @@ -351,16 +351,8 @@ class Scan: # Recover service from check name service = get_service_name_from_check_name(check_name) try: - # Map CLI provider names to directory names (for cases where they differ) - provider_directory_map = { - "oci": "oraclecloud", # OCI SDK conflict avoidance - } - provider_directory = provider_directory_map.get( - self._provider.type, self._provider.type - ) - # Import check module - check_module_path = f"prowler.providers.{provider_directory}.services.{service}.{check_name}.{check_name}" + check_module_path = f"prowler.providers.{self._provider.type}.services.{service}.{check_name}.{check_name}" lib = import_check(check_module_path) # Recover functions from check check_to_execute = getattr(lib, check_name) diff --git a/prowler/providers/common/arguments.py b/prowler/providers/common/arguments.py index f2f72cd481..f0af3a283c 100644 --- a/prowler/providers/common/arguments.py +++ b/prowler/providers/common/arguments.py @@ -16,15 +16,9 @@ def init_providers_parser(self): providers = Provider.get_available_providers() for provider in providers: try: - # Map CLI provider names to directory names (for cases where they differ) - provider_directory_map = { - "oci": "oraclecloud", # OCI SDK conflict avoidance - } - provider_directory = provider_directory_map.get(provider, provider) - getattr( import_module( - f"{providers_path}.{provider_directory}.{provider_arguments_lib_path}" + f"{providers_path}.{provider}.{provider_arguments_lib_path}" ), init_provider_arguments_function, )(self) @@ -38,18 +32,10 @@ def init_providers_parser(self): def validate_provider_arguments(arguments: Namespace) -> tuple[bool, str]: """validate_provider_arguments returns {True, "} if the provider arguments passed are valid and can be used together""" try: - # Map CLI provider names to directory names (for cases where they differ) - provider_directory_map = { - "oci": "oraclecloud", # OCI SDK conflict avoidance - } - provider_directory = provider_directory_map.get( - arguments.provider, arguments.provider - ) - # Provider function must be located at prowler.providers..lib.arguments.arguments.validate_arguments return getattr( import_module( - f"{providers_path}.{provider_directory}.{provider_arguments_lib_path}" + f"{providers_path}.{arguments.provider}.{provider_arguments_lib_path}" ), validate_provider_arguments_function, )(arguments) diff --git a/prowler/providers/common/provider.py b/prowler/providers/common/provider.py index 1f4493015b..c19d0c468e 100644 --- a/prowler/providers/common/provider.py +++ b/prowler/providers/common/provider.py @@ -146,24 +146,8 @@ class Provider(ABC): @staticmethod def init_global_provider(arguments: Namespace) -> None: try: - # Map CLI provider names to directory names (for cases where they differ) - provider_directory_map = { - "oci": "oraclecloud", # oci SDK conflict avoidance - } - # Map CLI provider names to provider file names (for cases where they differ) - provider_file_map = { - "oci": "oci", # oraclecloud directory but oci_provider.py file - } - - provider_directory = provider_directory_map.get( - arguments.provider, arguments.provider - ) - provider_file = provider_file_map.get( - arguments.provider, arguments.provider - ) - provider_class_path = ( - f"{providers_path}.{provider_directory}.{provider_file}_provider" + f"{providers_path}.{arguments.provider}.{arguments.provider}_provider" ) provider_class_name = f"{arguments.provider.capitalize()}Provider" provider_class = getattr( @@ -291,7 +275,7 @@ class Provider(ABC): mutelist_path=arguments.mutelist_file, fixer_config=fixer_config, ) - elif "oci" in provider_class_name.lower(): + elif "oraclecloud" in provider_class_name.lower(): provider_class( oci_config_file=arguments.oci_config_file, profile=arguments.profile, diff --git a/prowler/providers/oraclecloud/lib/arguments/arguments.py b/prowler/providers/oraclecloud/lib/arguments/arguments.py index bdbd6b7642..66971d0a58 100644 --- a/prowler/providers/oraclecloud/lib/arguments/arguments.py +++ b/prowler/providers/oraclecloud/lib/arguments/arguments.py @@ -5,9 +5,11 @@ from prowler.providers.oraclecloud.config import OCI_DEFAULT_CONFIG_FILE, OCI_RE def init_parser(self): - """Init the OCI Provider CLI parser""" + """Init the Oracle Cloud Infrastructure Provider CLI parser""" oci_parser = self.subparsers.add_parser( - "oci", parents=[self.common_providers_parser], help="OCI Provider" + "oraclecloud", + parents=[self.common_providers_parser], + help="Oracle Cloud Infrastructure Provider", ) # Config File Authentication Options @@ -109,15 +111,4 @@ def validate_arguments(arguments: Namespace) -> tuple[bool, str]: "Cannot use --use-instance-principal with --oci-config-file or --profile options", ) - # # Validate compartment OCIDs if provided - # if arguments.compartment_id: - # for compartment_id in arguments.compartment_id: - # if not OciProvider.validate_ocid(compartment_id, "compartment"): - # # Check if it's a tenancy OCID (root compartment) - # if not OciProvider.validate_ocid(compartment_id, "tenancy"): - # return ( - # False, - # f"Invalid compartment OCID: {compartment_id}", - # ) - return (True, "") diff --git a/prowler/providers/oraclecloud/lib/service/service.py b/prowler/providers/oraclecloud/lib/service/service.py index 7007eba384..971c1fe31f 100644 --- a/prowler/providers/oraclecloud/lib/service/service.py +++ b/prowler/providers/oraclecloud/lib/service/service.py @@ -1,7 +1,7 @@ from concurrent.futures import ThreadPoolExecutor, as_completed from prowler.lib.logger import logger -from prowler.providers.oraclecloud.oci_provider import OciProvider +from prowler.providers.oraclecloud.oraclecloud_provider import OraclecloudProvider MAX_WORKERS = 10 @@ -16,13 +16,13 @@ class OCIService: - Handles compartment traversal """ - def __init__(self, service: str, provider: OciProvider): + def __init__(self, service: str, provider: OraclecloudProvider): """ Initialize the OCIService base class. Args: service (str): The OCI service name (e.g., 'compute', 'object_storage'). - provider (OciProvider): The OCI provider instance. + provider (OraclecloudProvider): The Oracle Cloud Infrastructure provider instance. """ # Audit Information self.provider = provider diff --git a/prowler/providers/oraclecloud/oci_provider.py b/prowler/providers/oraclecloud/oraclecloud_provider.py similarity index 97% rename from prowler/providers/oraclecloud/oci_provider.py rename to prowler/providers/oraclecloud/oraclecloud_provider.py index 5735415386..08d654d580 100644 --- a/prowler/providers/oraclecloud/oci_provider.py +++ b/prowler/providers/oraclecloud/oraclecloud_provider.py @@ -40,9 +40,9 @@ from prowler.providers.oraclecloud.models import ( ) -class OciProvider(Provider): +class OraclecloudProvider(Provider): """ - OciProvider class is the main class for the OCI provider. + OraclecloudProvider class is the main class for the Oracle Cloud Infrastructure provider. This class is responsible for initializing the OCI provider, setting up the OCI session, validating the OCI credentials, getting the OCI identity, and managing compartments and regions. @@ -58,7 +58,7 @@ class OciProvider(Provider): audit_metadata (Audit_Metadata): The audit metadata. """ - _type: str = "oci" + _type: str = "oraclecloud" _identity: OCIIdentityInfo _session: OCISession _audit_config: dict @@ -118,11 +118,11 @@ class OciProvider(Provider): or - export OCI_CLI_AUTH=instance_principal (for instance principal) - To create a new OCI provider object: - - oci = OciProvider() - - oci = OciProvider(profile="profile_name") - - oci = OciProvider(oci_config_file="/path/to/config") - - oci = OciProvider(use_instance_principal=True) - - oci = OciProvider(user="ocid1...", fingerprint="...", key_content="...", tenancy="ocid1...", region="us-ashburn-1") + - oci = OraclecloudProvider() + - oci = OraclecloudProvider(profile="profile_name") + - oci = OraclecloudProvider(oci_config_file="/path/to/config") + - oci = OraclecloudProvider(use_instance_principal=True) + - oci = OraclecloudProvider(user="ocid1...", fingerprint="...", key_content="...", tenancy="ocid1...", region="us-ashburn-1") """ logger.info("Initializing OCI provider ...") @@ -439,7 +439,7 @@ class OciProvider(Provider): ) # Validate tenancy OCID format - if not OciProvider.validate_ocid(tenancy_id, "tenancy"): + if not OraclecloudProvider.validate_ocid(tenancy_id, "tenancy"): raise OCIInvalidTenancyError( file=pathlib.Path(__file__).name, message=f"Invalid tenancy OCID format: {tenancy_id}", @@ -817,11 +817,11 @@ class OciProvider(Provider): Exception: If there is an unexpected error. Examples: - >>> OciProvider.test_connection(profile="DEFAULT", raise_on_exception=False) + >>> OraclecloudProvider.test_connection(profile="DEFAULT", raise_on_exception=False) Connection(is_connected=True, Error=None) - >>> OciProvider.test_connection(use_instance_principal=True, raise_on_exception=False) + >>> OraclecloudProvider.test_connection(use_instance_principal=True, raise_on_exception=False) Connection(is_connected=True, Error=None) - >>> OciProvider.test_connection( + >>> OraclecloudProvider.test_connection( user="ocid1.user.oc1..aaaaaa...", fingerprint="12:34:56:78:...", key_content="base64_encoded_key", @@ -890,13 +890,13 @@ class OciProvider(Provider): session = OCISession(config=config, signer=None, profile=None) else: # Use traditional config file or instance principal authentication - session = OciProvider.setup_session( + session = OraclecloudProvider.setup_session( oci_config_file=oci_config_file, profile=profile, use_instance_principal=use_instance_principal, ) - identity = OciProvider.set_identity( + identity = OraclecloudProvider.set_identity( session=session, region=region, ) @@ -1032,7 +1032,7 @@ class OciProvider(Provider): set: A set of region names. Example: - >>> OciProvider.get_regions() + >>> OraclecloudProvider.get_regions() {"us-ashburn-1", "us-phoenix-1", ...} """ return set(OCI_REGIONS.keys()) diff --git a/prowler/providers/oraclecloud/services/analytics/analytics_instance_access_restricted/analytics_instance_access_restricted.metadata.json b/prowler/providers/oraclecloud/services/analytics/analytics_instance_access_restricted/analytics_instance_access_restricted.metadata.json index e456efe559..17828fc2c4 100644 --- a/prowler/providers/oraclecloud/services/analytics/analytics_instance_access_restricted/analytics_instance_access_restricted.metadata.json +++ b/prowler/providers/oraclecloud/services/analytics/analytics_instance_access_restricted/analytics_instance_access_restricted.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "analytics_instance_access_restricted", "CheckTitle": "Ensure Oracle Analytics Cloud (OAC) access is restricted to allowed sources or deployed within a Virtual Cloud Network", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/audit/audit_log_retention_period_365_days/audit_log_retention_period_365_days.metadata.json b/prowler/providers/oraclecloud/services/audit/audit_log_retention_period_365_days/audit_log_retention_period_365_days.metadata.json index 9089dff880..c31bcbdd02 100644 --- a/prowler/providers/oraclecloud/services/audit/audit_log_retention_period_365_days/audit_log_retention_period_365_days.metadata.json +++ b/prowler/providers/oraclecloud/services/audit/audit_log_retention_period_365_days/audit_log_retention_period_365_days.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "audit_log_retention_period_365_days", "CheckTitle": "Ensure audit log retention period is set to 365 days or greater", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/blockstorage/blockstorage_block_volume_encrypted_with_cmk/blockstorage_block_volume_encrypted_with_cmk.metadata.json b/prowler/providers/oraclecloud/services/blockstorage/blockstorage_block_volume_encrypted_with_cmk/blockstorage_block_volume_encrypted_with_cmk.metadata.json index bfde317c9d..741f9f731c 100644 --- a/prowler/providers/oraclecloud/services/blockstorage/blockstorage_block_volume_encrypted_with_cmk/blockstorage_block_volume_encrypted_with_cmk.metadata.json +++ b/prowler/providers/oraclecloud/services/blockstorage/blockstorage_block_volume_encrypted_with_cmk/blockstorage_block_volume_encrypted_with_cmk.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "blockstorage_block_volume_encrypted_with_cmk", "CheckTitle": "Ensure Block Volumes are encrypted with Customer Managed Keys", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/blockstorage/blockstorage_boot_volume_encrypted_with_cmk/blockstorage_boot_volume_encrypted_with_cmk.metadata.json b/prowler/providers/oraclecloud/services/blockstorage/blockstorage_boot_volume_encrypted_with_cmk/blockstorage_boot_volume_encrypted_with_cmk.metadata.json index 553b9c6ae0..638ce51d01 100644 --- a/prowler/providers/oraclecloud/services/blockstorage/blockstorage_boot_volume_encrypted_with_cmk/blockstorage_boot_volume_encrypted_with_cmk.metadata.json +++ b/prowler/providers/oraclecloud/services/blockstorage/blockstorage_boot_volume_encrypted_with_cmk/blockstorage_boot_volume_encrypted_with_cmk.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "blockstorage_boot_volume_encrypted_with_cmk", "CheckTitle": "Ensure Boot Volumes are encrypted with Customer Managed Key", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/cloudguard/cloudguard_enabled/cloudguard_enabled.metadata.json b/prowler/providers/oraclecloud/services/cloudguard/cloudguard_enabled/cloudguard_enabled.metadata.json index 09a09d3f1e..7e0722f9a1 100644 --- a/prowler/providers/oraclecloud/services/cloudguard/cloudguard_enabled/cloudguard_enabled.metadata.json +++ b/prowler/providers/oraclecloud/services/cloudguard/cloudguard_enabled/cloudguard_enabled.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "cloudguard_enabled", "CheckTitle": "Ensure Cloud Guard is enabled in the root compartment of the tenancy", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/compute/compute_instance_in_transit_encryption_enabled/compute_instance_in_transit_encryption_enabled.metadata.json b/prowler/providers/oraclecloud/services/compute/compute_instance_in_transit_encryption_enabled/compute_instance_in_transit_encryption_enabled.metadata.json index 06af08544e..cd6d9302e0 100644 --- a/prowler/providers/oraclecloud/services/compute/compute_instance_in_transit_encryption_enabled/compute_instance_in_transit_encryption_enabled.metadata.json +++ b/prowler/providers/oraclecloud/services/compute/compute_instance_in_transit_encryption_enabled/compute_instance_in_transit_encryption_enabled.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "compute_instance_in_transit_encryption_enabled", "CheckTitle": "Ensure In-transit Encryption is enabled on Compute Instance", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/compute/compute_instance_legacy_metadata_endpoint_disabled/compute_instance_legacy_metadata_endpoint_disabled.metadata.json b/prowler/providers/oraclecloud/services/compute/compute_instance_legacy_metadata_endpoint_disabled/compute_instance_legacy_metadata_endpoint_disabled.metadata.json index 58162d2587..c2a525e0ad 100644 --- a/prowler/providers/oraclecloud/services/compute/compute_instance_legacy_metadata_endpoint_disabled/compute_instance_legacy_metadata_endpoint_disabled.metadata.json +++ b/prowler/providers/oraclecloud/services/compute/compute_instance_legacy_metadata_endpoint_disabled/compute_instance_legacy_metadata_endpoint_disabled.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "compute_instance_legacy_metadata_endpoint_disabled", "CheckTitle": "Ensure Compute Instance Legacy Metadata service endpoint is disabled", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/compute/compute_instance_secure_boot_enabled/compute_instance_secure_boot_enabled.metadata.json b/prowler/providers/oraclecloud/services/compute/compute_instance_secure_boot_enabled/compute_instance_secure_boot_enabled.metadata.json index 1ecdf4de16..ef459a15f8 100644 --- a/prowler/providers/oraclecloud/services/compute/compute_instance_secure_boot_enabled/compute_instance_secure_boot_enabled.metadata.json +++ b/prowler/providers/oraclecloud/services/compute/compute_instance_secure_boot_enabled/compute_instance_secure_boot_enabled.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "compute_instance_secure_boot_enabled", "CheckTitle": "Ensure Secure Boot is enabled on Compute Instance", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/database/database_autonomous_database_access_restricted/database_autonomous_database_access_restricted.metadata.json b/prowler/providers/oraclecloud/services/database/database_autonomous_database_access_restricted/database_autonomous_database_access_restricted.metadata.json index ced824cc2a..f2fd7a600f 100644 --- a/prowler/providers/oraclecloud/services/database/database_autonomous_database_access_restricted/database_autonomous_database_access_restricted.metadata.json +++ b/prowler/providers/oraclecloud/services/database/database_autonomous_database_access_restricted/database_autonomous_database_access_restricted.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "database_autonomous_database_access_restricted", "CheckTitle": "Ensure Oracle Autonomous Shared Database (ADB) access is restricted or deployed within a VCN", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/events/events_notification_topic_and_subscription_exists/events_notification_topic_and_subscription_exists.metadata.json b/prowler/providers/oraclecloud/services/events/events_notification_topic_and_subscription_exists/events_notification_topic_and_subscription_exists.metadata.json index d07852ddd7..aeea44d734 100644 --- a/prowler/providers/oraclecloud/services/events/events_notification_topic_and_subscription_exists/events_notification_topic_and_subscription_exists.metadata.json +++ b/prowler/providers/oraclecloud/services/events/events_notification_topic_and_subscription_exists/events_notification_topic_and_subscription_exists.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "events_notification_topic_and_subscription_exists", "CheckTitle": "Create at least one notification topic and subscription to receive monitoring alerts", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/events/events_rule_cloudguard_problems/events_rule_cloudguard_problems.metadata.json b/prowler/providers/oraclecloud/services/events/events_rule_cloudguard_problems/events_rule_cloudguard_problems.metadata.json index db5abd08e7..17285acece 100644 --- a/prowler/providers/oraclecloud/services/events/events_rule_cloudguard_problems/events_rule_cloudguard_problems.metadata.json +++ b/prowler/providers/oraclecloud/services/events/events_rule_cloudguard_problems/events_rule_cloudguard_problems.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "events_rule_cloudguard_problems", "CheckTitle": "Ensure a notification is configured for Oracle Cloud Guard problems detected", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/events/events_rule_iam_group_changes/events_rule_iam_group_changes.metadata.json b/prowler/providers/oraclecloud/services/events/events_rule_iam_group_changes/events_rule_iam_group_changes.metadata.json index a871956a9d..16840d2477 100644 --- a/prowler/providers/oraclecloud/services/events/events_rule_iam_group_changes/events_rule_iam_group_changes.metadata.json +++ b/prowler/providers/oraclecloud/services/events/events_rule_iam_group_changes/events_rule_iam_group_changes.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "events_rule_iam_group_changes", "CheckTitle": "Ensure a notification is configured for IAM group changes", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/events/events_rule_iam_policy_changes/events_rule_iam_policy_changes.metadata.json b/prowler/providers/oraclecloud/services/events/events_rule_iam_policy_changes/events_rule_iam_policy_changes.metadata.json index 05b9553b7d..b2251abce9 100644 --- a/prowler/providers/oraclecloud/services/events/events_rule_iam_policy_changes/events_rule_iam_policy_changes.metadata.json +++ b/prowler/providers/oraclecloud/services/events/events_rule_iam_policy_changes/events_rule_iam_policy_changes.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "events_rule_iam_policy_changes", "CheckTitle": "Ensure a notification is configured for IAM policy changes", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/events/events_rule_identity_provider_changes/events_rule_identity_provider_changes.metadata.json b/prowler/providers/oraclecloud/services/events/events_rule_identity_provider_changes/events_rule_identity_provider_changes.metadata.json index e23e26f18e..b5cbf2990d 100644 --- a/prowler/providers/oraclecloud/services/events/events_rule_identity_provider_changes/events_rule_identity_provider_changes.metadata.json +++ b/prowler/providers/oraclecloud/services/events/events_rule_identity_provider_changes/events_rule_identity_provider_changes.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "events_rule_identity_provider_changes", "CheckTitle": "Ensure a notification is configured for Identity Provider changes", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/events/events_rule_idp_group_mapping_changes/events_rule_idp_group_mapping_changes.metadata.json b/prowler/providers/oraclecloud/services/events/events_rule_idp_group_mapping_changes/events_rule_idp_group_mapping_changes.metadata.json index ffe8b65901..4869f2330a 100644 --- a/prowler/providers/oraclecloud/services/events/events_rule_idp_group_mapping_changes/events_rule_idp_group_mapping_changes.metadata.json +++ b/prowler/providers/oraclecloud/services/events/events_rule_idp_group_mapping_changes/events_rule_idp_group_mapping_changes.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "events_rule_idp_group_mapping_changes", "CheckTitle": "Ensure a notification is configured for IdP group mapping changes", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/events/events_rule_local_user_authentication/events_rule_local_user_authentication.metadata.json b/prowler/providers/oraclecloud/services/events/events_rule_local_user_authentication/events_rule_local_user_authentication.metadata.json index 6a022932ac..4225e5c028 100644 --- a/prowler/providers/oraclecloud/services/events/events_rule_local_user_authentication/events_rule_local_user_authentication.metadata.json +++ b/prowler/providers/oraclecloud/services/events/events_rule_local_user_authentication/events_rule_local_user_authentication.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "events_rule_local_user_authentication", "CheckTitle": "Ensure a notification is configured for Local OCI User Authentication", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/events/events_rule_network_gateway_changes/events_rule_network_gateway_changes.metadata.json b/prowler/providers/oraclecloud/services/events/events_rule_network_gateway_changes/events_rule_network_gateway_changes.metadata.json index 11433e77f9..bb3461a66c 100644 --- a/prowler/providers/oraclecloud/services/events/events_rule_network_gateway_changes/events_rule_network_gateway_changes.metadata.json +++ b/prowler/providers/oraclecloud/services/events/events_rule_network_gateway_changes/events_rule_network_gateway_changes.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "events_rule_network_gateway_changes", "CheckTitle": "Ensure a notification is configured for changes to network gateways", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/events/events_rule_network_security_group_changes/events_rule_network_security_group_changes.metadata.json b/prowler/providers/oraclecloud/services/events/events_rule_network_security_group_changes/events_rule_network_security_group_changes.metadata.json index 6fba97f5c1..abf62a726f 100644 --- a/prowler/providers/oraclecloud/services/events/events_rule_network_security_group_changes/events_rule_network_security_group_changes.metadata.json +++ b/prowler/providers/oraclecloud/services/events/events_rule_network_security_group_changes/events_rule_network_security_group_changes.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "events_rule_network_security_group_changes", "CheckTitle": "Ensure a notification is configured for network security group changes", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/events/events_rule_route_table_changes/events_rule_route_table_changes.metadata.json b/prowler/providers/oraclecloud/services/events/events_rule_route_table_changes/events_rule_route_table_changes.metadata.json index 8653611cf4..aa5f454e5c 100644 --- a/prowler/providers/oraclecloud/services/events/events_rule_route_table_changes/events_rule_route_table_changes.metadata.json +++ b/prowler/providers/oraclecloud/services/events/events_rule_route_table_changes/events_rule_route_table_changes.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "events_rule_route_table_changes", "CheckTitle": "Ensure a notification is configured for changes to route tables", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/events/events_rule_security_list_changes/events_rule_security_list_changes.metadata.json b/prowler/providers/oraclecloud/services/events/events_rule_security_list_changes/events_rule_security_list_changes.metadata.json index f7e944d0fd..2a35524632 100644 --- a/prowler/providers/oraclecloud/services/events/events_rule_security_list_changes/events_rule_security_list_changes.metadata.json +++ b/prowler/providers/oraclecloud/services/events/events_rule_security_list_changes/events_rule_security_list_changes.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "events_rule_security_list_changes", "CheckTitle": "Ensure a notification is configured for security list changes", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/events/events_rule_user_changes/events_rule_user_changes.metadata.json b/prowler/providers/oraclecloud/services/events/events_rule_user_changes/events_rule_user_changes.metadata.json index a0e23329e3..206dfd0136 100644 --- a/prowler/providers/oraclecloud/services/events/events_rule_user_changes/events_rule_user_changes.metadata.json +++ b/prowler/providers/oraclecloud/services/events/events_rule_user_changes/events_rule_user_changes.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "events_rule_user_changes", "CheckTitle": "Ensure a notification is configured for user changes", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/events/events_rule_vcn_changes/events_rule_vcn_changes.metadata.json b/prowler/providers/oraclecloud/services/events/events_rule_vcn_changes/events_rule_vcn_changes.metadata.json index 29d311d283..cf3c71a379 100644 --- a/prowler/providers/oraclecloud/services/events/events_rule_vcn_changes/events_rule_vcn_changes.metadata.json +++ b/prowler/providers/oraclecloud/services/events/events_rule_vcn_changes/events_rule_vcn_changes.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "events_rule_vcn_changes", "CheckTitle": "Ensure a notification is configured for VCN changes", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/filestorage/filestorage_file_system_encrypted_with_cmk/filestorage_file_system_encrypted_with_cmk.metadata.json b/prowler/providers/oraclecloud/services/filestorage/filestorage_file_system_encrypted_with_cmk/filestorage_file_system_encrypted_with_cmk.metadata.json index 9fd7be5782..41848707ba 100644 --- a/prowler/providers/oraclecloud/services/filestorage/filestorage_file_system_encrypted_with_cmk/filestorage_file_system_encrypted_with_cmk.metadata.json +++ b/prowler/providers/oraclecloud/services/filestorage/filestorage_file_system_encrypted_with_cmk/filestorage_file_system_encrypted_with_cmk.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "filestorage_file_system_encrypted_with_cmk", "CheckTitle": "Ensure File Storage Systems are encrypted with Customer Managed Keys", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/identity/identity_iam_admins_cannot_update_tenancy_admins/identity_iam_admins_cannot_update_tenancy_admins.metadata.json b/prowler/providers/oraclecloud/services/identity/identity_iam_admins_cannot_update_tenancy_admins/identity_iam_admins_cannot_update_tenancy_admins.metadata.json index 4e196d701c..9d4ec0bf26 100644 --- a/prowler/providers/oraclecloud/services/identity/identity_iam_admins_cannot_update_tenancy_admins/identity_iam_admins_cannot_update_tenancy_admins.metadata.json +++ b/prowler/providers/oraclecloud/services/identity/identity_iam_admins_cannot_update_tenancy_admins/identity_iam_admins_cannot_update_tenancy_admins.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "identity_iam_admins_cannot_update_tenancy_admins", "CheckTitle": "Ensure IAM administrators cannot update tenancy Administrators group", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/identity/identity_instance_principal_used/identity_instance_principal_used.metadata.json b/prowler/providers/oraclecloud/services/identity/identity_instance_principal_used/identity_instance_principal_used.metadata.json index 8e79ed8f9e..8c7e03d5c7 100644 --- a/prowler/providers/oraclecloud/services/identity/identity_instance_principal_used/identity_instance_principal_used.metadata.json +++ b/prowler/providers/oraclecloud/services/identity/identity_instance_principal_used/identity_instance_principal_used.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "identity_instance_principal_used", "CheckTitle": "Ensure Instance Principal authentication is used for OCI instances, OCI Cloud Databases and OCI Functions to access OCI resources", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/identity/identity_no_resources_in_root_compartment/identity_no_resources_in_root_compartment.metadata.json b/prowler/providers/oraclecloud/services/identity/identity_no_resources_in_root_compartment/identity_no_resources_in_root_compartment.metadata.json index bcfd9b6a7a..510e4ddaf8 100644 --- a/prowler/providers/oraclecloud/services/identity/identity_no_resources_in_root_compartment/identity_no_resources_in_root_compartment.metadata.json +++ b/prowler/providers/oraclecloud/services/identity/identity_no_resources_in_root_compartment/identity_no_resources_in_root_compartment.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "identity_no_resources_in_root_compartment", "CheckTitle": "Ensure no resources are created in the root compartment", "CheckType": [], diff --git a/prowler/providers/oraclecloud/services/identity/identity_non_root_compartment_exists/identity_non_root_compartment_exists.metadata.json b/prowler/providers/oraclecloud/services/identity/identity_non_root_compartment_exists/identity_non_root_compartment_exists.metadata.json index b8dad7067d..41e0714daf 100644 --- a/prowler/providers/oraclecloud/services/identity/identity_non_root_compartment_exists/identity_non_root_compartment_exists.metadata.json +++ b/prowler/providers/oraclecloud/services/identity/identity_non_root_compartment_exists/identity_non_root_compartment_exists.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "identity_non_root_compartment_exists", "CheckTitle": "Create at least one non-root compartment in your tenancy to store cloud resources", "CheckType": [], diff --git a/prowler/providers/oraclecloud/services/identity/identity_password_policy_expires_within_365_days/identity_password_policy_expires_within_365_days.metadata.json b/prowler/providers/oraclecloud/services/identity/identity_password_policy_expires_within_365_days/identity_password_policy_expires_within_365_days.metadata.json index 13837295e8..ae4f3f810f 100644 --- a/prowler/providers/oraclecloud/services/identity/identity_password_policy_expires_within_365_days/identity_password_policy_expires_within_365_days.metadata.json +++ b/prowler/providers/oraclecloud/services/identity/identity_password_policy_expires_within_365_days/identity_password_policy_expires_within_365_days.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "identity_password_policy_expires_within_365_days", "CheckTitle": "Ensure IAM password policy expires passwords within 365 days", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/identity/identity_password_policy_minimum_length_14/identity_password_policy_minimum_length_14.metadata.json b/prowler/providers/oraclecloud/services/identity/identity_password_policy_minimum_length_14/identity_password_policy_minimum_length_14.metadata.json index f8e75d073a..b279d9e162 100644 --- a/prowler/providers/oraclecloud/services/identity/identity_password_policy_minimum_length_14/identity_password_policy_minimum_length_14.metadata.json +++ b/prowler/providers/oraclecloud/services/identity/identity_password_policy_minimum_length_14/identity_password_policy_minimum_length_14.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "identity_password_policy_minimum_length_14", "CheckTitle": "Ensure IAM password policy requires minimum length of 14 or greater", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/identity/identity_password_policy_prevents_reuse/identity_password_policy_prevents_reuse.metadata.json b/prowler/providers/oraclecloud/services/identity/identity_password_policy_prevents_reuse/identity_password_policy_prevents_reuse.metadata.json index 66d0fd9e42..552e8e8608 100644 --- a/prowler/providers/oraclecloud/services/identity/identity_password_policy_prevents_reuse/identity_password_policy_prevents_reuse.metadata.json +++ b/prowler/providers/oraclecloud/services/identity/identity_password_policy_prevents_reuse/identity_password_policy_prevents_reuse.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "identity_password_policy_prevents_reuse", "CheckTitle": "Ensure IAM password policy prevents password reuse", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/identity/identity_service_level_admins_exist/identity_service_level_admins_exist.metadata.json b/prowler/providers/oraclecloud/services/identity/identity_service_level_admins_exist/identity_service_level_admins_exist.metadata.json index 8c39459df8..156307f269 100644 --- a/prowler/providers/oraclecloud/services/identity/identity_service_level_admins_exist/identity_service_level_admins_exist.metadata.json +++ b/prowler/providers/oraclecloud/services/identity/identity_service_level_admins_exist/identity_service_level_admins_exist.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "identity_service_level_admins_exist", "CheckTitle": "Ensure service level admins are created to manage resources of particular service", "CheckType": [], diff --git a/prowler/providers/oraclecloud/services/identity/identity_tenancy_admin_permissions_limited/identity_tenancy_admin_permissions_limited.metadata.json b/prowler/providers/oraclecloud/services/identity/identity_tenancy_admin_permissions_limited/identity_tenancy_admin_permissions_limited.metadata.json index 0e78b3d72b..48e008db1f 100644 --- a/prowler/providers/oraclecloud/services/identity/identity_tenancy_admin_permissions_limited/identity_tenancy_admin_permissions_limited.metadata.json +++ b/prowler/providers/oraclecloud/services/identity/identity_tenancy_admin_permissions_limited/identity_tenancy_admin_permissions_limited.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "identity_tenancy_admin_permissions_limited", "CheckTitle": "Ensure permissions on all resources are given only to the tenancy administrator group", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/identity/identity_tenancy_admin_users_no_api_keys/identity_tenancy_admin_users_no_api_keys.metadata.json b/prowler/providers/oraclecloud/services/identity/identity_tenancy_admin_users_no_api_keys/identity_tenancy_admin_users_no_api_keys.metadata.json index cf915adba5..daa831f862 100644 --- a/prowler/providers/oraclecloud/services/identity/identity_tenancy_admin_users_no_api_keys/identity_tenancy_admin_users_no_api_keys.metadata.json +++ b/prowler/providers/oraclecloud/services/identity/identity_tenancy_admin_users_no_api_keys/identity_tenancy_admin_users_no_api_keys.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "identity_tenancy_admin_users_no_api_keys", "CheckTitle": "Ensure API keys are not created for tenancy administrator users", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/identity/identity_user_api_keys_rotated_90_days/identity_user_api_keys_rotated_90_days.metadata.json b/prowler/providers/oraclecloud/services/identity/identity_user_api_keys_rotated_90_days/identity_user_api_keys_rotated_90_days.metadata.json index 30d6354fcd..0621d213af 100644 --- a/prowler/providers/oraclecloud/services/identity/identity_user_api_keys_rotated_90_days/identity_user_api_keys_rotated_90_days.metadata.json +++ b/prowler/providers/oraclecloud/services/identity/identity_user_api_keys_rotated_90_days/identity_user_api_keys_rotated_90_days.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "identity_user_api_keys_rotated_90_days", "CheckTitle": "Ensure user API keys rotate within 90 days or less", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/identity/identity_user_auth_tokens_rotated_90_days/identity_user_auth_tokens_rotated_90_days.metadata.json b/prowler/providers/oraclecloud/services/identity/identity_user_auth_tokens_rotated_90_days/identity_user_auth_tokens_rotated_90_days.metadata.json index 2863fa21fb..f0f170f1db 100644 --- a/prowler/providers/oraclecloud/services/identity/identity_user_auth_tokens_rotated_90_days/identity_user_auth_tokens_rotated_90_days.metadata.json +++ b/prowler/providers/oraclecloud/services/identity/identity_user_auth_tokens_rotated_90_days/identity_user_auth_tokens_rotated_90_days.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "identity_user_auth_tokens_rotated_90_days", "CheckTitle": "Ensure user auth tokens rotate within 90 days or less", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/identity/identity_user_customer_secret_keys_rotated_90_days/identity_user_customer_secret_keys_rotated_90_days.metadata.json b/prowler/providers/oraclecloud/services/identity/identity_user_customer_secret_keys_rotated_90_days/identity_user_customer_secret_keys_rotated_90_days.metadata.json index bc98570d89..9d6da4c7b5 100644 --- a/prowler/providers/oraclecloud/services/identity/identity_user_customer_secret_keys_rotated_90_days/identity_user_customer_secret_keys_rotated_90_days.metadata.json +++ b/prowler/providers/oraclecloud/services/identity/identity_user_customer_secret_keys_rotated_90_days/identity_user_customer_secret_keys_rotated_90_days.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "identity_user_customer_secret_keys_rotated_90_days", "CheckTitle": "Ensure user customer secret keys rotate within 90 days or less", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/identity/identity_user_db_passwords_rotated_90_days/identity_user_db_passwords_rotated_90_days.metadata.json b/prowler/providers/oraclecloud/services/identity/identity_user_db_passwords_rotated_90_days/identity_user_db_passwords_rotated_90_days.metadata.json index 8f0e103a4d..0aa3e5d12c 100644 --- a/prowler/providers/oraclecloud/services/identity/identity_user_db_passwords_rotated_90_days/identity_user_db_passwords_rotated_90_days.metadata.json +++ b/prowler/providers/oraclecloud/services/identity/identity_user_db_passwords_rotated_90_days/identity_user_db_passwords_rotated_90_days.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "identity_user_db_passwords_rotated_90_days", "CheckTitle": "Ensure user IAM Database Passwords rotate within 90 days", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/identity/identity_user_mfa_enabled_console_access/identity_user_mfa_enabled_console_access.metadata.json b/prowler/providers/oraclecloud/services/identity/identity_user_mfa_enabled_console_access/identity_user_mfa_enabled_console_access.metadata.json index cd3bf404b4..283fe65412 100644 --- a/prowler/providers/oraclecloud/services/identity/identity_user_mfa_enabled_console_access/identity_user_mfa_enabled_console_access.metadata.json +++ b/prowler/providers/oraclecloud/services/identity/identity_user_mfa_enabled_console_access/identity_user_mfa_enabled_console_access.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "identity_user_mfa_enabled_console_access", "CheckTitle": "Ensure MFA is enabled for all users with a console password", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/identity/identity_user_valid_email_address/identity_user_valid_email_address.metadata.json b/prowler/providers/oraclecloud/services/identity/identity_user_valid_email_address/identity_user_valid_email_address.metadata.json index 73dd2e309e..c1af4c37b2 100644 --- a/prowler/providers/oraclecloud/services/identity/identity_user_valid_email_address/identity_user_valid_email_address.metadata.json +++ b/prowler/providers/oraclecloud/services/identity/identity_user_valid_email_address/identity_user_valid_email_address.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "identity_user_valid_email_address", "CheckTitle": "Ensure all OCI IAM user accounts have a valid and current email address", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/integration/integration_instance_access_restricted/integration_instance_access_restricted.metadata.json b/prowler/providers/oraclecloud/services/integration/integration_instance_access_restricted/integration_instance_access_restricted.metadata.json index f73a4625a8..20673e5f60 100644 --- a/prowler/providers/oraclecloud/services/integration/integration_instance_access_restricted/integration_instance_access_restricted.metadata.json +++ b/prowler/providers/oraclecloud/services/integration/integration_instance_access_restricted/integration_instance_access_restricted.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "integration_instance_access_restricted", "CheckTitle": "Ensure Oracle Integration Cloud (OIC) access is restricted to allowed sources", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/kms/kms_key_rotation_enabled/kms_key_rotation_enabled.metadata.json b/prowler/providers/oraclecloud/services/kms/kms_key_rotation_enabled/kms_key_rotation_enabled.metadata.json index 036d889011..2c6cfe47a8 100644 --- a/prowler/providers/oraclecloud/services/kms/kms_key_rotation_enabled/kms_key_rotation_enabled.metadata.json +++ b/prowler/providers/oraclecloud/services/kms/kms_key_rotation_enabled/kms_key_rotation_enabled.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "kms_key_rotation_enabled", "CheckTitle": "Ensure customer created Customer Managed Key (CMK) is rotated at least annually", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/network/network_default_security_list_restricts_traffic/network_default_security_list_restricts_traffic.metadata.json b/prowler/providers/oraclecloud/services/network/network_default_security_list_restricts_traffic/network_default_security_list_restricts_traffic.metadata.json index 71a2e69c2b..b7c43eedc3 100644 --- a/prowler/providers/oraclecloud/services/network/network_default_security_list_restricts_traffic/network_default_security_list_restricts_traffic.metadata.json +++ b/prowler/providers/oraclecloud/services/network/network_default_security_list_restricts_traffic/network_default_security_list_restricts_traffic.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "network_default_security_list_restricts_traffic", "CheckTitle": "Ensure the default security list of every VCN restricts all traffic except ICMP", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_rdp_port/network_security_group_ingress_from_internet_to_rdp_port.metadata.json b/prowler/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_rdp_port/network_security_group_ingress_from_internet_to_rdp_port.metadata.json index 0b0016c0f7..b95bd0db6a 100644 --- a/prowler/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_rdp_port/network_security_group_ingress_from_internet_to_rdp_port.metadata.json +++ b/prowler/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_rdp_port/network_security_group_ingress_from_internet_to_rdp_port.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "network_security_group_ingress_from_internet_to_rdp_port", "CheckTitle": "Ensure no network security groups allow ingress from 0.0.0.0/0 to port 3389", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_ssh_port/network_security_group_ingress_from_internet_to_ssh_port.metadata.json b/prowler/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_ssh_port/network_security_group_ingress_from_internet_to_ssh_port.metadata.json index 05068d7c3b..b64e1ad5a1 100644 --- a/prowler/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_ssh_port/network_security_group_ingress_from_internet_to_ssh_port.metadata.json +++ b/prowler/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_ssh_port/network_security_group_ingress_from_internet_to_ssh_port.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "network_security_group_ingress_from_internet_to_ssh_port", "CheckTitle": "Ensure no network security groups allow ingress from 0.0.0.0/0 to port 22", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_rdp_port/network_security_list_ingress_from_internet_to_rdp_port.metadata.json b/prowler/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_rdp_port/network_security_list_ingress_from_internet_to_rdp_port.metadata.json index f6a8650a97..064a1a9986 100644 --- a/prowler/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_rdp_port/network_security_list_ingress_from_internet_to_rdp_port.metadata.json +++ b/prowler/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_rdp_port/network_security_list_ingress_from_internet_to_rdp_port.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "network_security_list_ingress_from_internet_to_rdp_port", "CheckTitle": "Ensure no security lists allow ingress from 0.0.0.0/0 to port 3389", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_ssh_port/network_security_list_ingress_from_internet_to_ssh_port.metadata.json b/prowler/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_ssh_port/network_security_list_ingress_from_internet_to_ssh_port.metadata.json index b380635a94..c94d6d85c5 100644 --- a/prowler/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_ssh_port/network_security_list_ingress_from_internet_to_ssh_port.metadata.json +++ b/prowler/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_ssh_port/network_security_list_ingress_from_internet_to_ssh_port.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "network_security_list_ingress_from_internet_to_ssh_port", "CheckTitle": "Ensure no security lists allow ingress from 0.0.0.0/0 to port 22", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/network/network_vcn_subnet_flow_logs_enabled/network_vcn_subnet_flow_logs_enabled.metadata.json b/prowler/providers/oraclecloud/services/network/network_vcn_subnet_flow_logs_enabled/network_vcn_subnet_flow_logs_enabled.metadata.json index 4fa542a15c..7abd9c44be 100644 --- a/prowler/providers/oraclecloud/services/network/network_vcn_subnet_flow_logs_enabled/network_vcn_subnet_flow_logs_enabled.metadata.json +++ b/prowler/providers/oraclecloud/services/network/network_vcn_subnet_flow_logs_enabled/network_vcn_subnet_flow_logs_enabled.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "network_vcn_subnet_flow_logs_enabled", "CheckTitle": "Ensure VCN flow logging is enabled for all subnets", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_encrypted_with_cmk/objectstorage_bucket_encrypted_with_cmk.metadata.json b/prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_encrypted_with_cmk/objectstorage_bucket_encrypted_with_cmk.metadata.json index f01fd3e4bf..2f58776f38 100644 --- a/prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_encrypted_with_cmk/objectstorage_bucket_encrypted_with_cmk.metadata.json +++ b/prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_encrypted_with_cmk/objectstorage_bucket_encrypted_with_cmk.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "objectstorage_bucket_encrypted_with_cmk", "CheckTitle": "Ensure Object Storage Buckets are encrypted with a Customer Managed Key (CMK)", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_logging_enabled/objectstorage_bucket_logging_enabled.metadata.json b/prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_logging_enabled/objectstorage_bucket_logging_enabled.metadata.json index 94ebcd4be3..73f77bcdce 100644 --- a/prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_logging_enabled/objectstorage_bucket_logging_enabled.metadata.json +++ b/prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_logging_enabled/objectstorage_bucket_logging_enabled.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "objectstorage_bucket_logging_enabled", "CheckTitle": "Ensure write level Object Storage logging is enabled for all buckets", "CheckType": [], diff --git a/prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_not_publicly_accessible/objectstorage_bucket_not_publicly_accessible.metadata.json b/prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_not_publicly_accessible/objectstorage_bucket_not_publicly_accessible.metadata.json index 2d9b38be45..433cc3b4a2 100644 --- a/prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_not_publicly_accessible/objectstorage_bucket_not_publicly_accessible.metadata.json +++ b/prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_not_publicly_accessible/objectstorage_bucket_not_publicly_accessible.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "objectstorage_bucket_not_publicly_accessible", "CheckTitle": "Ensure no Object Storage buckets are publicly visible", "CheckType": [ diff --git a/prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_versioning_enabled/objectstorage_bucket_versioning_enabled.metadata.json b/prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_versioning_enabled/objectstorage_bucket_versioning_enabled.metadata.json index 3ec7217d16..72df7b3e29 100644 --- a/prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_versioning_enabled/objectstorage_bucket_versioning_enabled.metadata.json +++ b/prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_versioning_enabled/objectstorage_bucket_versioning_enabled.metadata.json @@ -1,5 +1,5 @@ { - "Provider": "oci", + "Provider": "oraclecloud", "CheckID": "objectstorage_bucket_versioning_enabled", "CheckTitle": "Ensure Versioning is Enabled for Object Storage Buckets", "CheckType": [ diff --git a/tests/lib/cli/parser_test.py b/tests/lib/cli/parser_test.py index 9d04e050d1..c645a7b128 100644 --- a/tests/lib/cli/parser_test.py +++ b/tests/lib/cli/parser_test.py @@ -17,7 +17,7 @@ prowler_command = "prowler" # capsys # https://docs.pytest.org/en/7.1.x/how-to/capture-stdout-stderr.html -prowler_default_usage_error = "usage: prowler [-h] [--version] {aws,azure,gcp,kubernetes,m365,github,nhn,mongodbatlas,oci,dashboard,iac} ..." +prowler_default_usage_error = "usage: prowler [-h] [--version] {aws,azure,gcp,kubernetes,m365,github,nhn,mongodbatlas,oraclecloud,dashboard,iac} ..." def mock_get_available_providers(): @@ -31,7 +31,7 @@ def mock_get_available_providers(): "iac", "nhn", "mongodbatlas", - "oci", + "oraclecloud", ] diff --git a/tests/providers/oraclecloud/conftest.py b/tests/providers/oraclecloud/conftest.py index aeeb41f043..1c29b64cdf 100644 --- a/tests/providers/oraclecloud/conftest.py +++ b/tests/providers/oraclecloud/conftest.py @@ -18,27 +18,27 @@ class MockOCIModule(MagicMock): return MagicMock() -# Only mock if oci import fails (missing dependencies) +# Only mock if oraclecloud import fails (missing dependencies) try: pass except (ImportError, ModuleNotFoundError): # Create mock OCI module mock_oci = MockOCIModule() - sys.modules["oci"] = mock_oci - sys.modules["oci.auth"] = mock_oci.auth - sys.modules["oci.config"] = mock_oci.config - sys.modules["oci.identity"] = mock_oci.identity - sys.modules["oci.core"] = mock_oci.core - sys.modules["oci.object_storage"] = mock_oci.object_storage - sys.modules["oci.key_management"] = mock_oci.key_management - sys.modules["oci.file_storage"] = mock_oci.file_storage - sys.modules["oci.block_storage"] = mock_oci.block_storage - sys.modules["oci.database"] = mock_oci.database - sys.modules["oci.events"] = mock_oci.events - sys.modules["oci.cloud_guard"] = mock_oci.cloud_guard - sys.modules["oci.audit"] = mock_oci.audit - sys.modules["oci.analytics"] = mock_oci.analytics - sys.modules["oci.integration"] = mock_oci.integration - sys.modules["oci.logging"] = mock_oci.logging - sys.modules["oci.pagination"] = mock_oci.pagination - sys.modules["oci.exceptions"] = mock_oci.exceptions + sys.modules["oraclecloud"] = mock_oci + sys.modules["oraclecloud.auth"] = mock_oci.auth + sys.modules["oraclecloud.config"] = mock_oci.config + sys.modules["oraclecloud.identity"] = mock_oci.identity + sys.modules["oraclecloud.core"] = mock_oci.core + sys.modules["oraclecloud.object_storage"] = mock_oci.object_storage + sys.modules["oraclecloud.key_management"] = mock_oci.key_management + sys.modules["oraclecloud.file_storage"] = mock_oci.file_storage + sys.modules["oraclecloud.block_storage"] = mock_oci.block_storage + sys.modules["oraclecloud.database"] = mock_oci.database + sys.modules["oraclecloud.events"] = mock_oci.events + sys.modules["oraclecloud.cloud_guard"] = mock_oci.cloud_guard + sys.modules["oraclecloud.audit"] = mock_oci.audit + sys.modules["oraclecloud.analytics"] = mock_oci.analytics + sys.modules["oraclecloud.integration"] = mock_oci.integration + sys.modules["oraclecloud.logging"] = mock_oci.logging + sys.modules["oraclecloud.pagination"] = mock_oci.pagination + sys.modules["oraclecloud.exceptions"] = mock_oci.exceptions diff --git a/tests/providers/oraclecloud/oci_fixtures.py b/tests/providers/oraclecloud/oci_fixtures.py index a83a44cb2d..b1ebef62d9 100644 --- a/tests/providers/oraclecloud/oci_fixtures.py +++ b/tests/providers/oraclecloud/oci_fixtures.py @@ -16,7 +16,7 @@ OCI_USER_ID = "ocid1.user.oc1..aaaaaaaexample" OCI_REGION = "us-ashburn-1" -def set_mocked_oci_provider( +def set_mocked_oraclecloud_provider( tenancy_id: str = OCI_TENANCY_ID, tenancy_name: str = OCI_TENANCY_NAME, user_id: str = OCI_USER_ID, @@ -24,7 +24,7 @@ def set_mocked_oci_provider( ) -> MagicMock: """Create a mocked OCI provider for testing""" provider = MagicMock() - provider.type = "oci" + provider.type = "oraclecloud" # Mock session provider.session = OCISession( diff --git a/tests/providers/oraclecloud/services/analytics/analytics_instance_access_restricted/analytics_instance_access_restricted_test.py b/tests/providers/oraclecloud/services/analytics/analytics_instance_access_restricted/analytics_instance_access_restricted_test.py index af44a791e2..79ad464540 100644 --- a/tests/providers/oraclecloud/services/analytics/analytics_instance_access_restricted/analytics_instance_access_restricted_test.py +++ b/tests/providers/oraclecloud/services/analytics/analytics_instance_access_restricted/analytics_instance_access_restricted_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_analytics_instance_access_restricted: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.analytics.analytics_instance_access_restricted.analytics_instance_access_restricted.analytics_client", @@ -102,7 +102,7 @@ class Test_analytics_instance_access_restricted: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.analytics.analytics_instance_access_restricted.analytics_instance_access_restricted.analytics_client", @@ -136,7 +136,7 @@ class Test_analytics_instance_access_restricted: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "analytics_instance_access_restricted" @@ -187,7 +187,7 @@ class Test_analytics_instance_access_restricted: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.analytics.analytics_instance_access_restricted.analytics_instance_access_restricted.analytics_client", @@ -221,7 +221,7 @@ class Test_analytics_instance_access_restricted: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "analytics_instance_access_restricted" diff --git a/tests/providers/oraclecloud/services/analytics/analytics_service_test.py b/tests/providers/oraclecloud/services/analytics/analytics_service_test.py index bfafd798e1..02267a8c0e 100644 --- a/tests/providers/oraclecloud/services/analytics/analytics_service_test.py +++ b/tests/providers/oraclecloud/services/analytics/analytics_service_test.py @@ -1,12 +1,12 @@ from unittest.mock import patch -from tests.providers.oraclecloud.oci_fixtures import set_mocked_oci_provider +from tests.providers.oraclecloud.oci_fixtures import set_mocked_oraclecloud_provider class TestAnalyticsService: def test_service(self): """Test that analytics service can be instantiated and mocked""" - oci_provider = set_mocked_oci_provider() + oraclecloud_provider = set_mocked_oraclecloud_provider() # Mock the entire service initialization with patch( @@ -17,14 +17,14 @@ class TestAnalyticsService: Analytics, ) - analytics_client = Analytics(oci_provider) + analytics_client = Analytics(oraclecloud_provider) # Manually set required attributes since __init__ was mocked analytics_client.service = "analytics" - analytics_client.provider = oci_provider + analytics_client.provider = oraclecloud_provider analytics_client.audited_compartments = {} analytics_client.regional_clients = {} # Verify service name assert analytics_client.service == "analytics" - assert analytics_client.provider == oci_provider + assert analytics_client.provider == oraclecloud_provider diff --git a/tests/providers/oraclecloud/services/audit/audit_log_retention_period_365_days/audit_log_retention_period_365_days_test.py b/tests/providers/oraclecloud/services/audit/audit_log_retention_period_365_days/audit_log_retention_period_365_days_test.py index d5e7488721..972e261a57 100644 --- a/tests/providers/oraclecloud/services/audit/audit_log_retention_period_365_days/audit_log_retention_period_365_days_test.py +++ b/tests/providers/oraclecloud/services/audit/audit_log_retention_period_365_days/audit_log_retention_period_365_days_test.py @@ -3,7 +3,7 @@ from unittest import mock from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -18,7 +18,7 @@ class Test_audit_log_retention_period_365_days: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.audit.audit_log_retention_period_365_days.audit_log_retention_period_365_days.audit_client", @@ -51,7 +51,7 @@ class Test_audit_log_retention_period_365_days: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.audit.audit_log_retention_period_365_days.audit_log_retention_period_365_days.audit_client", @@ -84,7 +84,7 @@ class Test_audit_log_retention_period_365_days: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.audit.audit_log_retention_period_365_days.audit_log_retention_period_365_days.audit_client", diff --git a/tests/providers/oraclecloud/services/audit/audit_service_test.py b/tests/providers/oraclecloud/services/audit/audit_service_test.py index 06adc4576b..ab3710fa3d 100644 --- a/tests/providers/oraclecloud/services/audit/audit_service_test.py +++ b/tests/providers/oraclecloud/services/audit/audit_service_test.py @@ -1,12 +1,12 @@ from unittest.mock import patch -from tests.providers.oraclecloud.oci_fixtures import set_mocked_oci_provider +from tests.providers.oraclecloud.oci_fixtures import set_mocked_oraclecloud_provider class TestAuditService: def test_service(self): """Test that audit service can be instantiated and mocked""" - oci_provider = set_mocked_oci_provider() + oraclecloud_provider = set_mocked_oraclecloud_provider() # Mock the entire service initialization with patch( @@ -15,14 +15,14 @@ class TestAuditService: ): from prowler.providers.oraclecloud.services.audit.audit_service import Audit - audit_client = Audit(oci_provider) + audit_client = Audit(oraclecloud_provider) # Manually set required attributes since __init__ was mocked audit_client.service = "audit" - audit_client.provider = oci_provider + audit_client.provider = oraclecloud_provider audit_client.audited_compartments = {} audit_client.regional_clients = {} # Verify service name assert audit_client.service == "audit" - assert audit_client.provider == oci_provider + assert audit_client.provider == oraclecloud_provider diff --git a/tests/providers/oraclecloud/services/blockstorage/blockstorage_block_volume_encrypted_with_cmk/blockstorage_block_volume_encrypted_with_cmk_test.py b/tests/providers/oraclecloud/services/blockstorage/blockstorage_block_volume_encrypted_with_cmk/blockstorage_block_volume_encrypted_with_cmk_test.py index c201f35168..7a8aea77ef 100644 --- a/tests/providers/oraclecloud/services/blockstorage/blockstorage_block_volume_encrypted_with_cmk/blockstorage_block_volume_encrypted_with_cmk_test.py +++ b/tests/providers/oraclecloud/services/blockstorage/blockstorage_block_volume_encrypted_with_cmk/blockstorage_block_volume_encrypted_with_cmk_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -43,7 +43,7 @@ class Test_blockstorage_block_volume_encrypted_with_cmk: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.blockstorage.blockstorage_block_volume_encrypted_with_cmk.blockstorage_block_volume_encrypted_with_cmk.blockstorage_client", @@ -106,7 +106,7 @@ class Test_blockstorage_block_volume_encrypted_with_cmk: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.blockstorage.blockstorage_block_volume_encrypted_with_cmk.blockstorage_block_volume_encrypted_with_cmk.blockstorage_client", @@ -140,7 +140,7 @@ class Test_blockstorage_block_volume_encrypted_with_cmk: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "blockstorage_block_volume_encrypted_with_cmk" @@ -193,7 +193,7 @@ class Test_blockstorage_block_volume_encrypted_with_cmk: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.blockstorage.blockstorage_block_volume_encrypted_with_cmk.blockstorage_block_volume_encrypted_with_cmk.blockstorage_client", @@ -227,7 +227,7 @@ class Test_blockstorage_block_volume_encrypted_with_cmk: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "blockstorage_block_volume_encrypted_with_cmk" diff --git a/tests/providers/oraclecloud/services/blockstorage/blockstorage_boot_volume_encrypted_with_cmk/blockstorage_boot_volume_encrypted_with_cmk_test.py b/tests/providers/oraclecloud/services/blockstorage/blockstorage_boot_volume_encrypted_with_cmk/blockstorage_boot_volume_encrypted_with_cmk_test.py index e2e9ef489e..272a6fe3af 100644 --- a/tests/providers/oraclecloud/services/blockstorage/blockstorage_boot_volume_encrypted_with_cmk/blockstorage_boot_volume_encrypted_with_cmk_test.py +++ b/tests/providers/oraclecloud/services/blockstorage/blockstorage_boot_volume_encrypted_with_cmk/blockstorage_boot_volume_encrypted_with_cmk_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -43,7 +43,7 @@ class Test_blockstorage_boot_volume_encrypted_with_cmk: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.blockstorage.blockstorage_boot_volume_encrypted_with_cmk.blockstorage_boot_volume_encrypted_with_cmk.blockstorage_client", @@ -106,7 +106,7 @@ class Test_blockstorage_boot_volume_encrypted_with_cmk: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.blockstorage.blockstorage_boot_volume_encrypted_with_cmk.blockstorage_boot_volume_encrypted_with_cmk.blockstorage_client", @@ -140,7 +140,7 @@ class Test_blockstorage_boot_volume_encrypted_with_cmk: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "blockstorage_boot_volume_encrypted_with_cmk" @@ -193,7 +193,7 @@ class Test_blockstorage_boot_volume_encrypted_with_cmk: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.blockstorage.blockstorage_boot_volume_encrypted_with_cmk.blockstorage_boot_volume_encrypted_with_cmk.blockstorage_client", @@ -227,7 +227,7 @@ class Test_blockstorage_boot_volume_encrypted_with_cmk: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "blockstorage_boot_volume_encrypted_with_cmk" diff --git a/tests/providers/oraclecloud/services/blockstorage/blockstorage_service_test.py b/tests/providers/oraclecloud/services/blockstorage/blockstorage_service_test.py index 0dcba40f19..e6abd6d0d9 100644 --- a/tests/providers/oraclecloud/services/blockstorage/blockstorage_service_test.py +++ b/tests/providers/oraclecloud/services/blockstorage/blockstorage_service_test.py @@ -1,12 +1,12 @@ from unittest.mock import patch -from tests.providers.oraclecloud.oci_fixtures import set_mocked_oci_provider +from tests.providers.oraclecloud.oci_fixtures import set_mocked_oraclecloud_provider class TestBlockStorageService: def test_service(self): """Test that blockstorage service can be instantiated and mocked""" - oci_provider = set_mocked_oci_provider() + oraclecloud_provider = set_mocked_oraclecloud_provider() # Mock the entire service initialization with patch( @@ -17,14 +17,14 @@ class TestBlockStorageService: BlockStorage, ) - blockstorage_client = BlockStorage(oci_provider) + blockstorage_client = BlockStorage(oraclecloud_provider) # Manually set required attributes since __init__ was mocked blockstorage_client.service = "blockstorage" - blockstorage_client.provider = oci_provider + blockstorage_client.provider = oraclecloud_provider blockstorage_client.audited_compartments = {} blockstorage_client.regional_clients = {} # Verify service name assert blockstorage_client.service == "blockstorage" - assert blockstorage_client.provider == oci_provider + assert blockstorage_client.provider == oraclecloud_provider diff --git a/tests/providers/oraclecloud/services/cloudguard/cloudguard_enabled/cloudguard_enabled_test.py b/tests/providers/oraclecloud/services/cloudguard/cloudguard_enabled/cloudguard_enabled_test.py index 4aa3cd6635..c45304edcc 100644 --- a/tests/providers/oraclecloud/services/cloudguard/cloudguard_enabled/cloudguard_enabled_test.py +++ b/tests/providers/oraclecloud/services/cloudguard/cloudguard_enabled/cloudguard_enabled_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_cloudguard_enabled: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.cloudguard.cloudguard_enabled.cloudguard_enabled.cloudguard_client", @@ -102,7 +102,7 @@ class Test_cloudguard_enabled: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.cloudguard.cloudguard_enabled.cloudguard_enabled.cloudguard_client", @@ -136,7 +136,7 @@ class Test_cloudguard_enabled: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "cloudguard_enabled" ) @@ -186,7 +186,7 @@ class Test_cloudguard_enabled: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.cloudguard.cloudguard_enabled.cloudguard_enabled.cloudguard_client", @@ -220,7 +220,7 @@ class Test_cloudguard_enabled: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "cloudguard_enabled" ) diff --git a/tests/providers/oraclecloud/services/cloudguard/cloudguard_service_test.py b/tests/providers/oraclecloud/services/cloudguard/cloudguard_service_test.py index 53317d475b..e379b9f83c 100644 --- a/tests/providers/oraclecloud/services/cloudguard/cloudguard_service_test.py +++ b/tests/providers/oraclecloud/services/cloudguard/cloudguard_service_test.py @@ -1,12 +1,12 @@ from unittest.mock import patch -from tests.providers.oraclecloud.oci_fixtures import set_mocked_oci_provider +from tests.providers.oraclecloud.oci_fixtures import set_mocked_oraclecloud_provider class TestCloudguardService: def test_service(self): """Test that cloudguard service can be instantiated and mocked""" - oci_provider = set_mocked_oci_provider() + oraclecloud_provider = set_mocked_oraclecloud_provider() # Mock the entire service initialization with patch( @@ -17,14 +17,14 @@ class TestCloudguardService: CloudGuard, ) - cloudguard_client = CloudGuard(oci_provider) + cloudguard_client = CloudGuard(oraclecloud_provider) # Manually set required attributes since __init__ was mocked cloudguard_client.service = "cloudguard" - cloudguard_client.provider = oci_provider + cloudguard_client.provider = oraclecloud_provider cloudguard_client.audited_compartments = {} cloudguard_client.regional_clients = {} # Verify service name assert cloudguard_client.service == "cloudguard" - assert cloudguard_client.provider == oci_provider + assert cloudguard_client.provider == oraclecloud_provider diff --git a/tests/providers/oraclecloud/services/compute/compute_instance_in_transit_encryption_enabled/compute_instance_in_transit_encryption_enabled_test.py b/tests/providers/oraclecloud/services/compute/compute_instance_in_transit_encryption_enabled/compute_instance_in_transit_encryption_enabled_test.py index 807a364460..207672352a 100644 --- a/tests/providers/oraclecloud/services/compute/compute_instance_in_transit_encryption_enabled/compute_instance_in_transit_encryption_enabled_test.py +++ b/tests/providers/oraclecloud/services/compute/compute_instance_in_transit_encryption_enabled/compute_instance_in_transit_encryption_enabled_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_compute_instance_in_transit_encryption_enabled: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.compute.compute_instance_in_transit_encryption_enabled.compute_instance_in_transit_encryption_enabled.compute_client", @@ -102,7 +102,7 @@ class Test_compute_instance_in_transit_encryption_enabled: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.compute.compute_instance_in_transit_encryption_enabled.compute_instance_in_transit_encryption_enabled.compute_client", @@ -136,7 +136,7 @@ class Test_compute_instance_in_transit_encryption_enabled: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "compute_instance_in_transit_encryption_enabled" @@ -187,7 +187,7 @@ class Test_compute_instance_in_transit_encryption_enabled: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.compute.compute_instance_in_transit_encryption_enabled.compute_instance_in_transit_encryption_enabled.compute_client", @@ -221,7 +221,7 @@ class Test_compute_instance_in_transit_encryption_enabled: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "compute_instance_in_transit_encryption_enabled" diff --git a/tests/providers/oraclecloud/services/compute/compute_instance_legacy_metadata_endpoint_disabled/compute_instance_legacy_metadata_endpoint_disabled_test.py b/tests/providers/oraclecloud/services/compute/compute_instance_legacy_metadata_endpoint_disabled/compute_instance_legacy_metadata_endpoint_disabled_test.py index d695e8324e..22ed19ce92 100644 --- a/tests/providers/oraclecloud/services/compute/compute_instance_legacy_metadata_endpoint_disabled/compute_instance_legacy_metadata_endpoint_disabled_test.py +++ b/tests/providers/oraclecloud/services/compute/compute_instance_legacy_metadata_endpoint_disabled/compute_instance_legacy_metadata_endpoint_disabled_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_compute_instance_legacy_metadata_endpoint_disabled: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.compute.compute_instance_legacy_metadata_endpoint_disabled.compute_instance_legacy_metadata_endpoint_disabled.compute_client", @@ -102,7 +102,7 @@ class Test_compute_instance_legacy_metadata_endpoint_disabled: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.compute.compute_instance_legacy_metadata_endpoint_disabled.compute_instance_legacy_metadata_endpoint_disabled.compute_client", @@ -136,7 +136,7 @@ class Test_compute_instance_legacy_metadata_endpoint_disabled: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "compute_instance_legacy_metadata_endpoint_disabled" @@ -187,7 +187,7 @@ class Test_compute_instance_legacy_metadata_endpoint_disabled: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.compute.compute_instance_legacy_metadata_endpoint_disabled.compute_instance_legacy_metadata_endpoint_disabled.compute_client", @@ -221,7 +221,7 @@ class Test_compute_instance_legacy_metadata_endpoint_disabled: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "compute_instance_legacy_metadata_endpoint_disabled" diff --git a/tests/providers/oraclecloud/services/compute/compute_instance_secure_boot_enabled/compute_instance_secure_boot_enabled_test.py b/tests/providers/oraclecloud/services/compute/compute_instance_secure_boot_enabled/compute_instance_secure_boot_enabled_test.py index e5be514363..62a80086e5 100644 --- a/tests/providers/oraclecloud/services/compute/compute_instance_secure_boot_enabled/compute_instance_secure_boot_enabled_test.py +++ b/tests/providers/oraclecloud/services/compute/compute_instance_secure_boot_enabled/compute_instance_secure_boot_enabled_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_compute_instance_secure_boot_enabled: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.compute.compute_instance_secure_boot_enabled.compute_instance_secure_boot_enabled.compute_client", @@ -102,7 +102,7 @@ class Test_compute_instance_secure_boot_enabled: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.compute.compute_instance_secure_boot_enabled.compute_instance_secure_boot_enabled.compute_client", @@ -136,7 +136,7 @@ class Test_compute_instance_secure_boot_enabled: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "compute_instance_secure_boot_enabled" @@ -187,7 +187,7 @@ class Test_compute_instance_secure_boot_enabled: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.compute.compute_instance_secure_boot_enabled.compute_instance_secure_boot_enabled.compute_client", @@ -221,7 +221,7 @@ class Test_compute_instance_secure_boot_enabled: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "compute_instance_secure_boot_enabled" diff --git a/tests/providers/oraclecloud/services/compute/compute_service_test.py b/tests/providers/oraclecloud/services/compute/compute_service_test.py index cd5a11ff09..f8adf08200 100644 --- a/tests/providers/oraclecloud/services/compute/compute_service_test.py +++ b/tests/providers/oraclecloud/services/compute/compute_service_test.py @@ -1,12 +1,12 @@ from unittest.mock import patch -from tests.providers.oraclecloud.oci_fixtures import set_mocked_oci_provider +from tests.providers.oraclecloud.oci_fixtures import set_mocked_oraclecloud_provider class TestComputeService: def test_service(self): """Test that compute service can be instantiated and mocked""" - oci_provider = set_mocked_oci_provider() + oraclecloud_provider = set_mocked_oraclecloud_provider() # Mock the entire service initialization with patch( @@ -17,14 +17,14 @@ class TestComputeService: Compute, ) - compute_client = Compute(oci_provider) + compute_client = Compute(oraclecloud_provider) # Manually set required attributes since __init__ was mocked compute_client.service = "compute" - compute_client.provider = oci_provider + compute_client.provider = oraclecloud_provider compute_client.audited_compartments = {} compute_client.regional_clients = {} # Verify service name assert compute_client.service == "compute" - assert compute_client.provider == oci_provider + assert compute_client.provider == oraclecloud_provider diff --git a/tests/providers/oraclecloud/services/database/database_autonomous_database_access_restricted/database_autonomous_database_access_restricted_test.py b/tests/providers/oraclecloud/services/database/database_autonomous_database_access_restricted/database_autonomous_database_access_restricted_test.py index 38f4e8310e..a559fe6c8d 100644 --- a/tests/providers/oraclecloud/services/database/database_autonomous_database_access_restricted/database_autonomous_database_access_restricted_test.py +++ b/tests/providers/oraclecloud/services/database/database_autonomous_database_access_restricted/database_autonomous_database_access_restricted_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_database_autonomous_database_access_restricted: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.database.database_autonomous_database_access_restricted.database_autonomous_database_access_restricted.database_client", @@ -102,7 +102,7 @@ class Test_database_autonomous_database_access_restricted: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.database.database_autonomous_database_access_restricted.database_autonomous_database_access_restricted.database_client", @@ -136,7 +136,7 @@ class Test_database_autonomous_database_access_restricted: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "database_autonomous_database_access_restricted" @@ -187,7 +187,7 @@ class Test_database_autonomous_database_access_restricted: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.database.database_autonomous_database_access_restricted.database_autonomous_database_access_restricted.database_client", @@ -221,7 +221,7 @@ class Test_database_autonomous_database_access_restricted: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "database_autonomous_database_access_restricted" diff --git a/tests/providers/oraclecloud/services/database/database_service_test.py b/tests/providers/oraclecloud/services/database/database_service_test.py index 6715f3dbe8..49ce51a401 100644 --- a/tests/providers/oraclecloud/services/database/database_service_test.py +++ b/tests/providers/oraclecloud/services/database/database_service_test.py @@ -1,12 +1,12 @@ from unittest.mock import patch -from tests.providers.oraclecloud.oci_fixtures import set_mocked_oci_provider +from tests.providers.oraclecloud.oci_fixtures import set_mocked_oraclecloud_provider class TestDatabaseService: def test_service(self): """Test that database service can be instantiated and mocked""" - oci_provider = set_mocked_oci_provider() + oraclecloud_provider = set_mocked_oraclecloud_provider() # Mock the entire service initialization with patch( @@ -17,14 +17,14 @@ class TestDatabaseService: Database, ) - database_client = Database(oci_provider) + database_client = Database(oraclecloud_provider) # Manually set required attributes since __init__ was mocked database_client.service = "database" - database_client.provider = oci_provider + database_client.provider = oraclecloud_provider database_client.audited_compartments = {} database_client.regional_clients = {} # Verify service name assert database_client.service == "database" - assert database_client.provider == oci_provider + assert database_client.provider == oraclecloud_provider diff --git a/tests/providers/oraclecloud/services/events/events_notification_topic_and_subscription_exists/events_notification_topic_and_subscription_exists_test.py b/tests/providers/oraclecloud/services/events/events_notification_topic_and_subscription_exists/events_notification_topic_and_subscription_exists_test.py index 3d8ef06208..eeb39efd36 100644 --- a/tests/providers/oraclecloud/services/events/events_notification_topic_and_subscription_exists/events_notification_topic_and_subscription_exists_test.py +++ b/tests/providers/oraclecloud/services/events/events_notification_topic_and_subscription_exists/events_notification_topic_and_subscription_exists_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_events_notification_topic_and_subscription_exists: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_notification_topic_and_subscription_exists.events_notification_topic_and_subscription_exists.events_client", @@ -102,7 +102,7 @@ class Test_events_notification_topic_and_subscription_exists: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_notification_topic_and_subscription_exists.events_notification_topic_and_subscription_exists.events_client", @@ -136,7 +136,7 @@ class Test_events_notification_topic_and_subscription_exists: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "events_notification_topic_and_subscription_exists" @@ -187,7 +187,7 @@ class Test_events_notification_topic_and_subscription_exists: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_notification_topic_and_subscription_exists.events_notification_topic_and_subscription_exists.events_client", @@ -221,7 +221,7 @@ class Test_events_notification_topic_and_subscription_exists: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "events_notification_topic_and_subscription_exists" diff --git a/tests/providers/oraclecloud/services/events/events_rule_cloudguard_problems/events_rule_cloudguard_problems_test.py b/tests/providers/oraclecloud/services/events/events_rule_cloudguard_problems/events_rule_cloudguard_problems_test.py index 25305934db..7b0010265d 100644 --- a/tests/providers/oraclecloud/services/events/events_rule_cloudguard_problems/events_rule_cloudguard_problems_test.py +++ b/tests/providers/oraclecloud/services/events/events_rule_cloudguard_problems/events_rule_cloudguard_problems_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_events_rule_cloudguard_problems: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_cloudguard_problems.events_rule_cloudguard_problems.events_client", @@ -102,7 +102,7 @@ class Test_events_rule_cloudguard_problems: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_cloudguard_problems.events_rule_cloudguard_problems.events_client", @@ -136,7 +136,7 @@ class Test_events_rule_cloudguard_problems: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "events_rule_cloudguard_problems" @@ -187,7 +187,7 @@ class Test_events_rule_cloudguard_problems: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_cloudguard_problems.events_rule_cloudguard_problems.events_client", @@ -221,7 +221,7 @@ class Test_events_rule_cloudguard_problems: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "events_rule_cloudguard_problems" diff --git a/tests/providers/oraclecloud/services/events/events_rule_iam_group_changes/events_rule_iam_group_changes_test.py b/tests/providers/oraclecloud/services/events/events_rule_iam_group_changes/events_rule_iam_group_changes_test.py index 8cc8f179fc..0d17e9b8b5 100644 --- a/tests/providers/oraclecloud/services/events/events_rule_iam_group_changes/events_rule_iam_group_changes_test.py +++ b/tests/providers/oraclecloud/services/events/events_rule_iam_group_changes/events_rule_iam_group_changes_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_events_rule_iam_group_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_iam_group_changes.events_rule_iam_group_changes.events_client", @@ -102,7 +102,7 @@ class Test_events_rule_iam_group_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_iam_group_changes.events_rule_iam_group_changes.events_client", @@ -136,7 +136,7 @@ class Test_events_rule_iam_group_changes: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "events_rule_iam_group_changes" @@ -187,7 +187,7 @@ class Test_events_rule_iam_group_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_iam_group_changes.events_rule_iam_group_changes.events_client", @@ -221,7 +221,7 @@ class Test_events_rule_iam_group_changes: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "events_rule_iam_group_changes" diff --git a/tests/providers/oraclecloud/services/events/events_rule_iam_policy_changes/events_rule_iam_policy_changes_test.py b/tests/providers/oraclecloud/services/events/events_rule_iam_policy_changes/events_rule_iam_policy_changes_test.py index 699947c060..b37347f6d2 100644 --- a/tests/providers/oraclecloud/services/events/events_rule_iam_policy_changes/events_rule_iam_policy_changes_test.py +++ b/tests/providers/oraclecloud/services/events/events_rule_iam_policy_changes/events_rule_iam_policy_changes_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_events_rule_iam_policy_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_iam_policy_changes.events_rule_iam_policy_changes.events_client", @@ -102,7 +102,7 @@ class Test_events_rule_iam_policy_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_iam_policy_changes.events_rule_iam_policy_changes.events_client", @@ -136,7 +136,7 @@ class Test_events_rule_iam_policy_changes: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "events_rule_iam_policy_changes" @@ -187,7 +187,7 @@ class Test_events_rule_iam_policy_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_iam_policy_changes.events_rule_iam_policy_changes.events_client", @@ -221,7 +221,7 @@ class Test_events_rule_iam_policy_changes: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "events_rule_iam_policy_changes" diff --git a/tests/providers/oraclecloud/services/events/events_rule_identity_provider_changes/events_rule_identity_provider_changes_test.py b/tests/providers/oraclecloud/services/events/events_rule_identity_provider_changes/events_rule_identity_provider_changes_test.py index 9bc5da88fd..d8641551dc 100644 --- a/tests/providers/oraclecloud/services/events/events_rule_identity_provider_changes/events_rule_identity_provider_changes_test.py +++ b/tests/providers/oraclecloud/services/events/events_rule_identity_provider_changes/events_rule_identity_provider_changes_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_events_rule_identity_provider_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_identity_provider_changes.events_rule_identity_provider_changes.events_client", @@ -102,7 +102,7 @@ class Test_events_rule_identity_provider_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_identity_provider_changes.events_rule_identity_provider_changes.events_client", @@ -136,7 +136,7 @@ class Test_events_rule_identity_provider_changes: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "events_rule_identity_provider_changes" @@ -187,7 +187,7 @@ class Test_events_rule_identity_provider_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_identity_provider_changes.events_rule_identity_provider_changes.events_client", @@ -221,7 +221,7 @@ class Test_events_rule_identity_provider_changes: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "events_rule_identity_provider_changes" diff --git a/tests/providers/oraclecloud/services/events/events_rule_idp_group_mapping_changes/events_rule_idp_group_mapping_changes_test.py b/tests/providers/oraclecloud/services/events/events_rule_idp_group_mapping_changes/events_rule_idp_group_mapping_changes_test.py index deb4d8698d..a322bfae58 100644 --- a/tests/providers/oraclecloud/services/events/events_rule_idp_group_mapping_changes/events_rule_idp_group_mapping_changes_test.py +++ b/tests/providers/oraclecloud/services/events/events_rule_idp_group_mapping_changes/events_rule_idp_group_mapping_changes_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_events_rule_idp_group_mapping_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_idp_group_mapping_changes.events_rule_idp_group_mapping_changes.events_client", @@ -102,7 +102,7 @@ class Test_events_rule_idp_group_mapping_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_idp_group_mapping_changes.events_rule_idp_group_mapping_changes.events_client", @@ -136,7 +136,7 @@ class Test_events_rule_idp_group_mapping_changes: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "events_rule_idp_group_mapping_changes" @@ -187,7 +187,7 @@ class Test_events_rule_idp_group_mapping_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_idp_group_mapping_changes.events_rule_idp_group_mapping_changes.events_client", @@ -221,7 +221,7 @@ class Test_events_rule_idp_group_mapping_changes: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "events_rule_idp_group_mapping_changes" diff --git a/tests/providers/oraclecloud/services/events/events_rule_local_user_authentication/events_rule_local_user_authentication_test.py b/tests/providers/oraclecloud/services/events/events_rule_local_user_authentication/events_rule_local_user_authentication_test.py index cc7f3ef9f8..10c2941a15 100644 --- a/tests/providers/oraclecloud/services/events/events_rule_local_user_authentication/events_rule_local_user_authentication_test.py +++ b/tests/providers/oraclecloud/services/events/events_rule_local_user_authentication/events_rule_local_user_authentication_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_events_rule_local_user_authentication: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_local_user_authentication.events_rule_local_user_authentication.events_client", @@ -102,7 +102,7 @@ class Test_events_rule_local_user_authentication: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_local_user_authentication.events_rule_local_user_authentication.events_client", @@ -136,7 +136,7 @@ class Test_events_rule_local_user_authentication: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "events_rule_local_user_authentication" @@ -187,7 +187,7 @@ class Test_events_rule_local_user_authentication: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_local_user_authentication.events_rule_local_user_authentication.events_client", @@ -221,7 +221,7 @@ class Test_events_rule_local_user_authentication: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "events_rule_local_user_authentication" diff --git a/tests/providers/oraclecloud/services/events/events_rule_network_gateway_changes/events_rule_network_gateway_changes_test.py b/tests/providers/oraclecloud/services/events/events_rule_network_gateway_changes/events_rule_network_gateway_changes_test.py index b2aa44dace..0a14a54a4d 100644 --- a/tests/providers/oraclecloud/services/events/events_rule_network_gateway_changes/events_rule_network_gateway_changes_test.py +++ b/tests/providers/oraclecloud/services/events/events_rule_network_gateway_changes/events_rule_network_gateway_changes_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_events_rule_network_gateway_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_network_gateway_changes.events_rule_network_gateway_changes.events_client", @@ -102,7 +102,7 @@ class Test_events_rule_network_gateway_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_network_gateway_changes.events_rule_network_gateway_changes.events_client", @@ -136,7 +136,7 @@ class Test_events_rule_network_gateway_changes: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "events_rule_network_gateway_changes" @@ -187,7 +187,7 @@ class Test_events_rule_network_gateway_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_network_gateway_changes.events_rule_network_gateway_changes.events_client", @@ -221,7 +221,7 @@ class Test_events_rule_network_gateway_changes: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "events_rule_network_gateway_changes" diff --git a/tests/providers/oraclecloud/services/events/events_rule_network_security_group_changes/events_rule_network_security_group_changes_test.py b/tests/providers/oraclecloud/services/events/events_rule_network_security_group_changes/events_rule_network_security_group_changes_test.py index 80db1bb60e..d900e0a2a6 100644 --- a/tests/providers/oraclecloud/services/events/events_rule_network_security_group_changes/events_rule_network_security_group_changes_test.py +++ b/tests/providers/oraclecloud/services/events/events_rule_network_security_group_changes/events_rule_network_security_group_changes_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_events_rule_network_security_group_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_network_security_group_changes.events_rule_network_security_group_changes.events_client", @@ -102,7 +102,7 @@ class Test_events_rule_network_security_group_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_network_security_group_changes.events_rule_network_security_group_changes.events_client", @@ -136,7 +136,7 @@ class Test_events_rule_network_security_group_changes: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "events_rule_network_security_group_changes" @@ -187,7 +187,7 @@ class Test_events_rule_network_security_group_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_network_security_group_changes.events_rule_network_security_group_changes.events_client", @@ -221,7 +221,7 @@ class Test_events_rule_network_security_group_changes: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "events_rule_network_security_group_changes" diff --git a/tests/providers/oraclecloud/services/events/events_rule_route_table_changes/events_rule_route_table_changes_test.py b/tests/providers/oraclecloud/services/events/events_rule_route_table_changes/events_rule_route_table_changes_test.py index 545d8102e3..2a0e4f1bbd 100644 --- a/tests/providers/oraclecloud/services/events/events_rule_route_table_changes/events_rule_route_table_changes_test.py +++ b/tests/providers/oraclecloud/services/events/events_rule_route_table_changes/events_rule_route_table_changes_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_events_rule_route_table_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_route_table_changes.events_rule_route_table_changes.events_client", @@ -102,7 +102,7 @@ class Test_events_rule_route_table_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_route_table_changes.events_rule_route_table_changes.events_client", @@ -136,7 +136,7 @@ class Test_events_rule_route_table_changes: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "events_rule_route_table_changes" @@ -187,7 +187,7 @@ class Test_events_rule_route_table_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_route_table_changes.events_rule_route_table_changes.events_client", @@ -221,7 +221,7 @@ class Test_events_rule_route_table_changes: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "events_rule_route_table_changes" diff --git a/tests/providers/oraclecloud/services/events/events_rule_security_list_changes/events_rule_security_list_changes_test.py b/tests/providers/oraclecloud/services/events/events_rule_security_list_changes/events_rule_security_list_changes_test.py index 548bf7084a..64f9c61483 100644 --- a/tests/providers/oraclecloud/services/events/events_rule_security_list_changes/events_rule_security_list_changes_test.py +++ b/tests/providers/oraclecloud/services/events/events_rule_security_list_changes/events_rule_security_list_changes_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_events_rule_security_list_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_security_list_changes.events_rule_security_list_changes.events_client", @@ -102,7 +102,7 @@ class Test_events_rule_security_list_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_security_list_changes.events_rule_security_list_changes.events_client", @@ -136,7 +136,7 @@ class Test_events_rule_security_list_changes: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "events_rule_security_list_changes" @@ -187,7 +187,7 @@ class Test_events_rule_security_list_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_security_list_changes.events_rule_security_list_changes.events_client", @@ -221,7 +221,7 @@ class Test_events_rule_security_list_changes: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "events_rule_security_list_changes" diff --git a/tests/providers/oraclecloud/services/events/events_rule_user_changes/events_rule_user_changes_test.py b/tests/providers/oraclecloud/services/events/events_rule_user_changes/events_rule_user_changes_test.py index 91fb869fd0..cfe0e4b20a 100644 --- a/tests/providers/oraclecloud/services/events/events_rule_user_changes/events_rule_user_changes_test.py +++ b/tests/providers/oraclecloud/services/events/events_rule_user_changes/events_rule_user_changes_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_events_rule_user_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_user_changes.events_rule_user_changes.events_client", @@ -102,7 +102,7 @@ class Test_events_rule_user_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_user_changes.events_rule_user_changes.events_client", @@ -136,7 +136,7 @@ class Test_events_rule_user_changes: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "events_rule_user_changes" @@ -187,7 +187,7 @@ class Test_events_rule_user_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_user_changes.events_rule_user_changes.events_client", @@ -221,7 +221,7 @@ class Test_events_rule_user_changes: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "events_rule_user_changes" diff --git a/tests/providers/oraclecloud/services/events/events_rule_vcn_changes/events_rule_vcn_changes_test.py b/tests/providers/oraclecloud/services/events/events_rule_vcn_changes/events_rule_vcn_changes_test.py index 55967d1aa7..9181a57682 100644 --- a/tests/providers/oraclecloud/services/events/events_rule_vcn_changes/events_rule_vcn_changes_test.py +++ b/tests/providers/oraclecloud/services/events/events_rule_vcn_changes/events_rule_vcn_changes_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_events_rule_vcn_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_vcn_changes.events_rule_vcn_changes.events_client", @@ -102,7 +102,7 @@ class Test_events_rule_vcn_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_vcn_changes.events_rule_vcn_changes.events_client", @@ -136,7 +136,7 @@ class Test_events_rule_vcn_changes: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "events_rule_vcn_changes" @@ -187,7 +187,7 @@ class Test_events_rule_vcn_changes: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.events.events_rule_vcn_changes.events_rule_vcn_changes.events_client", @@ -221,7 +221,7 @@ class Test_events_rule_vcn_changes: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "events_rule_vcn_changes" diff --git a/tests/providers/oraclecloud/services/events/events_service_test.py b/tests/providers/oraclecloud/services/events/events_service_test.py index 37c202b773..70baf617f1 100644 --- a/tests/providers/oraclecloud/services/events/events_service_test.py +++ b/tests/providers/oraclecloud/services/events/events_service_test.py @@ -1,12 +1,12 @@ from unittest.mock import patch -from tests.providers.oraclecloud.oci_fixtures import set_mocked_oci_provider +from tests.providers.oraclecloud.oci_fixtures import set_mocked_oraclecloud_provider class TestEventsService: def test_service(self): """Test that events service can be instantiated and mocked""" - oci_provider = set_mocked_oci_provider() + oraclecloud_provider = set_mocked_oraclecloud_provider() # Mock the entire service initialization with patch( @@ -17,14 +17,14 @@ class TestEventsService: Events, ) - events_client = Events(oci_provider) + events_client = Events(oraclecloud_provider) # Manually set required attributes since __init__ was mocked events_client.service = "events" - events_client.provider = oci_provider + events_client.provider = oraclecloud_provider events_client.audited_compartments = {} events_client.regional_clients = {} # Verify service name assert events_client.service == "events" - assert events_client.provider == oci_provider + assert events_client.provider == oraclecloud_provider diff --git a/tests/providers/oraclecloud/services/filestorage/filestorage_file_system_encrypted_with_cmk/filestorage_file_system_encrypted_with_cmk_test.py b/tests/providers/oraclecloud/services/filestorage/filestorage_file_system_encrypted_with_cmk/filestorage_file_system_encrypted_with_cmk_test.py index ffca470502..58775d0413 100644 --- a/tests/providers/oraclecloud/services/filestorage/filestorage_file_system_encrypted_with_cmk/filestorage_file_system_encrypted_with_cmk_test.py +++ b/tests/providers/oraclecloud/services/filestorage/filestorage_file_system_encrypted_with_cmk/filestorage_file_system_encrypted_with_cmk_test.py @@ -5,7 +5,7 @@ import pytest from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -20,7 +20,7 @@ class Test_filestorage_file_system_encrypted_with_cmk: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.filestorage.filestorage_file_system_encrypted_with_cmk.filestorage_file_system_encrypted_with_cmk.filestorage_client", diff --git a/tests/providers/oraclecloud/services/filestorage/filestorage_service_test.py b/tests/providers/oraclecloud/services/filestorage/filestorage_service_test.py index 426b1d12f8..e9497f0d2d 100644 --- a/tests/providers/oraclecloud/services/filestorage/filestorage_service_test.py +++ b/tests/providers/oraclecloud/services/filestorage/filestorage_service_test.py @@ -1,12 +1,12 @@ from unittest.mock import patch -from tests.providers.oraclecloud.oci_fixtures import set_mocked_oci_provider +from tests.providers.oraclecloud.oci_fixtures import set_mocked_oraclecloud_provider class TestFilestorageService: def test_service(self): """Test that filestorage service can be instantiated and mocked""" - oci_provider = set_mocked_oci_provider() + oraclecloud_provider = set_mocked_oraclecloud_provider() # Mock the entire service initialization with patch( @@ -17,14 +17,14 @@ class TestFilestorageService: Filestorage, ) - filestorage_client = Filestorage(oci_provider) + filestorage_client = Filestorage(oraclecloud_provider) # Manually set required attributes since __init__ was mocked filestorage_client.service = "filestorage" - filestorage_client.provider = oci_provider + filestorage_client.provider = oraclecloud_provider filestorage_client.audited_compartments = {} filestorage_client.regional_clients = {} # Verify service name assert filestorage_client.service == "filestorage" - assert filestorage_client.provider == oci_provider + assert filestorage_client.provider == oraclecloud_provider diff --git a/tests/providers/oraclecloud/services/identity/identity_iam_admins_cannot_update_tenancy_admins/identity_iam_admins_cannot_update_tenancy_admins_test.py b/tests/providers/oraclecloud/services/identity/identity_iam_admins_cannot_update_tenancy_admins/identity_iam_admins_cannot_update_tenancy_admins_test.py index 1350fc69e6..0801effa32 100644 --- a/tests/providers/oraclecloud/services/identity/identity_iam_admins_cannot_update_tenancy_admins/identity_iam_admins_cannot_update_tenancy_admins_test.py +++ b/tests/providers/oraclecloud/services/identity/identity_iam_admins_cannot_update_tenancy_admins/identity_iam_admins_cannot_update_tenancy_admins_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_identity_iam_admins_cannot_update_tenancy_admins: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_iam_admins_cannot_update_tenancy_admins.identity_iam_admins_cannot_update_tenancy_admins.identity_client", @@ -102,7 +102,7 @@ class Test_identity_iam_admins_cannot_update_tenancy_admins: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_iam_admins_cannot_update_tenancy_admins.identity_iam_admins_cannot_update_tenancy_admins.identity_client", @@ -136,7 +136,7 @@ class Test_identity_iam_admins_cannot_update_tenancy_admins: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "identity_iam_admins_cannot_update_tenancy_admins" @@ -187,7 +187,7 @@ class Test_identity_iam_admins_cannot_update_tenancy_admins: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_iam_admins_cannot_update_tenancy_admins.identity_iam_admins_cannot_update_tenancy_admins.identity_client", @@ -221,7 +221,7 @@ class Test_identity_iam_admins_cannot_update_tenancy_admins: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "identity_iam_admins_cannot_update_tenancy_admins" diff --git a/tests/providers/oraclecloud/services/identity/identity_instance_principal_used/identity_instance_principal_used_test.py b/tests/providers/oraclecloud/services/identity/identity_instance_principal_used/identity_instance_principal_used_test.py index 622a9602ce..171bfbd3d8 100644 --- a/tests/providers/oraclecloud/services/identity/identity_instance_principal_used/identity_instance_principal_used_test.py +++ b/tests/providers/oraclecloud/services/identity/identity_instance_principal_used/identity_instance_principal_used_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_identity_instance_principal_used: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_instance_principal_used.identity_instance_principal_used.identity_client", @@ -102,7 +102,7 @@ class Test_identity_instance_principal_used: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_instance_principal_used.identity_instance_principal_used.identity_client", @@ -136,7 +136,7 @@ class Test_identity_instance_principal_used: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "identity_instance_principal_used" @@ -187,7 +187,7 @@ class Test_identity_instance_principal_used: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_instance_principal_used.identity_instance_principal_used.identity_client", @@ -221,7 +221,7 @@ class Test_identity_instance_principal_used: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "identity_instance_principal_used" diff --git a/tests/providers/oraclecloud/services/identity/identity_no_resources_in_root_compartment/identity_no_resources_in_root_compartment_test.py b/tests/providers/oraclecloud/services/identity/identity_no_resources_in_root_compartment/identity_no_resources_in_root_compartment_test.py index a8b6a72e04..d23b7cd4d8 100644 --- a/tests/providers/oraclecloud/services/identity/identity_no_resources_in_root_compartment/identity_no_resources_in_root_compartment_test.py +++ b/tests/providers/oraclecloud/services/identity/identity_no_resources_in_root_compartment/identity_no_resources_in_root_compartment_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_identity_no_resources_in_root_compartment: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_no_resources_in_root_compartment.identity_no_resources_in_root_compartment.identity_client", @@ -102,7 +102,7 @@ class Test_identity_no_resources_in_root_compartment: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_no_resources_in_root_compartment.identity_no_resources_in_root_compartment.identity_client", @@ -136,7 +136,7 @@ class Test_identity_no_resources_in_root_compartment: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "identity_no_resources_in_root_compartment" @@ -187,7 +187,7 @@ class Test_identity_no_resources_in_root_compartment: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_no_resources_in_root_compartment.identity_no_resources_in_root_compartment.identity_client", @@ -221,7 +221,7 @@ class Test_identity_no_resources_in_root_compartment: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "identity_no_resources_in_root_compartment" diff --git a/tests/providers/oraclecloud/services/identity/identity_non_root_compartment_exists/identity_non_root_compartment_exists_test.py b/tests/providers/oraclecloud/services/identity/identity_non_root_compartment_exists/identity_non_root_compartment_exists_test.py index 42d5ebe0e2..6da2c6b0d4 100644 --- a/tests/providers/oraclecloud/services/identity/identity_non_root_compartment_exists/identity_non_root_compartment_exists_test.py +++ b/tests/providers/oraclecloud/services/identity/identity_non_root_compartment_exists/identity_non_root_compartment_exists_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_identity_non_root_compartment_exists: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_non_root_compartment_exists.identity_non_root_compartment_exists.identity_client", @@ -102,7 +102,7 @@ class Test_identity_non_root_compartment_exists: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_non_root_compartment_exists.identity_non_root_compartment_exists.identity_client", @@ -136,7 +136,7 @@ class Test_identity_non_root_compartment_exists: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "identity_non_root_compartment_exists" @@ -187,7 +187,7 @@ class Test_identity_non_root_compartment_exists: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_non_root_compartment_exists.identity_non_root_compartment_exists.identity_client", @@ -221,7 +221,7 @@ class Test_identity_non_root_compartment_exists: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "identity_non_root_compartment_exists" diff --git a/tests/providers/oraclecloud/services/identity/identity_password_policy_expires_within_365_days/identity_password_policy_expires_within_365_days_test.py b/tests/providers/oraclecloud/services/identity/identity_password_policy_expires_within_365_days/identity_password_policy_expires_within_365_days_test.py index cbfd3df2e8..189aa115a5 100644 --- a/tests/providers/oraclecloud/services/identity/identity_password_policy_expires_within_365_days/identity_password_policy_expires_within_365_days_test.py +++ b/tests/providers/oraclecloud/services/identity/identity_password_policy_expires_within_365_days/identity_password_policy_expires_within_365_days_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_identity_password_policy_expires_within_365_days: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_password_policy_expires_within_365_days.identity_password_policy_expires_within_365_days.identity_client", @@ -102,7 +102,7 @@ class Test_identity_password_policy_expires_within_365_days: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_password_policy_expires_within_365_days.identity_password_policy_expires_within_365_days.identity_client", @@ -136,7 +136,7 @@ class Test_identity_password_policy_expires_within_365_days: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "identity_password_policy_expires_within_365_days" @@ -187,7 +187,7 @@ class Test_identity_password_policy_expires_within_365_days: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_password_policy_expires_within_365_days.identity_password_policy_expires_within_365_days.identity_client", @@ -221,7 +221,7 @@ class Test_identity_password_policy_expires_within_365_days: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "identity_password_policy_expires_within_365_days" diff --git a/tests/providers/oraclecloud/services/identity/identity_password_policy_minimum_length_14/identity_password_policy_minimum_length_14_test.py b/tests/providers/oraclecloud/services/identity/identity_password_policy_minimum_length_14/identity_password_policy_minimum_length_14_test.py index 40af84d011..f624bb3f14 100644 --- a/tests/providers/oraclecloud/services/identity/identity_password_policy_minimum_length_14/identity_password_policy_minimum_length_14_test.py +++ b/tests/providers/oraclecloud/services/identity/identity_password_policy_minimum_length_14/identity_password_policy_minimum_length_14_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_identity_password_policy_minimum_length_14: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_password_policy_minimum_length_14.identity_password_policy_minimum_length_14.identity_client", @@ -102,7 +102,7 @@ class Test_identity_password_policy_minimum_length_14: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_password_policy_minimum_length_14.identity_password_policy_minimum_length_14.identity_client", @@ -136,7 +136,7 @@ class Test_identity_password_policy_minimum_length_14: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "identity_password_policy_minimum_length_14" @@ -187,7 +187,7 @@ class Test_identity_password_policy_minimum_length_14: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_password_policy_minimum_length_14.identity_password_policy_minimum_length_14.identity_client", @@ -221,7 +221,7 @@ class Test_identity_password_policy_minimum_length_14: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "identity_password_policy_minimum_length_14" diff --git a/tests/providers/oraclecloud/services/identity/identity_password_policy_prevents_reuse/identity_password_policy_prevents_reuse_test.py b/tests/providers/oraclecloud/services/identity/identity_password_policy_prevents_reuse/identity_password_policy_prevents_reuse_test.py index 68713b7832..07a168ab4c 100644 --- a/tests/providers/oraclecloud/services/identity/identity_password_policy_prevents_reuse/identity_password_policy_prevents_reuse_test.py +++ b/tests/providers/oraclecloud/services/identity/identity_password_policy_prevents_reuse/identity_password_policy_prevents_reuse_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_identity_password_policy_prevents_reuse: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_password_policy_prevents_reuse.identity_password_policy_prevents_reuse.identity_client", @@ -102,7 +102,7 @@ class Test_identity_password_policy_prevents_reuse: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_password_policy_prevents_reuse.identity_password_policy_prevents_reuse.identity_client", @@ -136,7 +136,7 @@ class Test_identity_password_policy_prevents_reuse: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "identity_password_policy_prevents_reuse" @@ -187,7 +187,7 @@ class Test_identity_password_policy_prevents_reuse: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_password_policy_prevents_reuse.identity_password_policy_prevents_reuse.identity_client", @@ -221,7 +221,7 @@ class Test_identity_password_policy_prevents_reuse: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "identity_password_policy_prevents_reuse" diff --git a/tests/providers/oraclecloud/services/identity/identity_service_level_admins_exist/identity_service_level_admins_exist_test.py b/tests/providers/oraclecloud/services/identity/identity_service_level_admins_exist/identity_service_level_admins_exist_test.py index d85008c6c1..6c03723fa0 100644 --- a/tests/providers/oraclecloud/services/identity/identity_service_level_admins_exist/identity_service_level_admins_exist_test.py +++ b/tests/providers/oraclecloud/services/identity/identity_service_level_admins_exist/identity_service_level_admins_exist_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_identity_service_level_admins_exist: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_service_level_admins_exist.identity_service_level_admins_exist.identity_client", @@ -102,7 +102,7 @@ class Test_identity_service_level_admins_exist: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_service_level_admins_exist.identity_service_level_admins_exist.identity_client", @@ -136,7 +136,7 @@ class Test_identity_service_level_admins_exist: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "identity_service_level_admins_exist" @@ -187,7 +187,7 @@ class Test_identity_service_level_admins_exist: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_service_level_admins_exist.identity_service_level_admins_exist.identity_client", @@ -221,7 +221,7 @@ class Test_identity_service_level_admins_exist: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "identity_service_level_admins_exist" diff --git a/tests/providers/oraclecloud/services/identity/identity_service_test.py b/tests/providers/oraclecloud/services/identity/identity_service_test.py index 37284a273c..bb695d7128 100644 --- a/tests/providers/oraclecloud/services/identity/identity_service_test.py +++ b/tests/providers/oraclecloud/services/identity/identity_service_test.py @@ -1,12 +1,12 @@ from unittest.mock import patch -from tests.providers.oraclecloud.oci_fixtures import set_mocked_oci_provider +from tests.providers.oraclecloud.oci_fixtures import set_mocked_oraclecloud_provider class TestIdentityService: def test_service(self): """Test that identity service can be instantiated and mocked""" - oci_provider = set_mocked_oci_provider() + oraclecloud_provider = set_mocked_oraclecloud_provider() # Mock the entire service initialization with patch( @@ -17,14 +17,14 @@ class TestIdentityService: Identity, ) - identity_client = Identity(oci_provider) + identity_client = Identity(oraclecloud_provider) # Manually set required attributes since __init__ was mocked identity_client.service = "identity" - identity_client.provider = oci_provider + identity_client.provider = oraclecloud_provider identity_client.audited_compartments = {} identity_client.regional_clients = {} # Verify service name assert identity_client.service == "identity" - assert identity_client.provider == oci_provider + assert identity_client.provider == oraclecloud_provider diff --git a/tests/providers/oraclecloud/services/identity/identity_tenancy_admin_permissions_limited/identity_tenancy_admin_permissions_limited_test.py b/tests/providers/oraclecloud/services/identity/identity_tenancy_admin_permissions_limited/identity_tenancy_admin_permissions_limited_test.py index 1514052306..ba9ecfba33 100644 --- a/tests/providers/oraclecloud/services/identity/identity_tenancy_admin_permissions_limited/identity_tenancy_admin_permissions_limited_test.py +++ b/tests/providers/oraclecloud/services/identity/identity_tenancy_admin_permissions_limited/identity_tenancy_admin_permissions_limited_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_identity_tenancy_admin_permissions_limited: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_tenancy_admin_permissions_limited.identity_tenancy_admin_permissions_limited.identity_client", @@ -102,7 +102,7 @@ class Test_identity_tenancy_admin_permissions_limited: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_tenancy_admin_permissions_limited.identity_tenancy_admin_permissions_limited.identity_client", @@ -136,7 +136,7 @@ class Test_identity_tenancy_admin_permissions_limited: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "identity_tenancy_admin_permissions_limited" @@ -187,7 +187,7 @@ class Test_identity_tenancy_admin_permissions_limited: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_tenancy_admin_permissions_limited.identity_tenancy_admin_permissions_limited.identity_client", @@ -221,7 +221,7 @@ class Test_identity_tenancy_admin_permissions_limited: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "identity_tenancy_admin_permissions_limited" diff --git a/tests/providers/oraclecloud/services/identity/identity_tenancy_admin_users_no_api_keys/identity_tenancy_admin_users_no_api_keys_test.py b/tests/providers/oraclecloud/services/identity/identity_tenancy_admin_users_no_api_keys/identity_tenancy_admin_users_no_api_keys_test.py index 51a2ab3609..664d3f1ed6 100644 --- a/tests/providers/oraclecloud/services/identity/identity_tenancy_admin_users_no_api_keys/identity_tenancy_admin_users_no_api_keys_test.py +++ b/tests/providers/oraclecloud/services/identity/identity_tenancy_admin_users_no_api_keys/identity_tenancy_admin_users_no_api_keys_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_identity_tenancy_admin_users_no_api_keys: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_tenancy_admin_users_no_api_keys.identity_tenancy_admin_users_no_api_keys.identity_client", @@ -102,7 +102,7 @@ class Test_identity_tenancy_admin_users_no_api_keys: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_tenancy_admin_users_no_api_keys.identity_tenancy_admin_users_no_api_keys.identity_client", @@ -136,7 +136,7 @@ class Test_identity_tenancy_admin_users_no_api_keys: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "identity_tenancy_admin_users_no_api_keys" @@ -187,7 +187,7 @@ class Test_identity_tenancy_admin_users_no_api_keys: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_tenancy_admin_users_no_api_keys.identity_tenancy_admin_users_no_api_keys.identity_client", @@ -221,7 +221,7 @@ class Test_identity_tenancy_admin_users_no_api_keys: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "identity_tenancy_admin_users_no_api_keys" diff --git a/tests/providers/oraclecloud/services/identity/identity_user_api_keys_rotated_90_days/identity_user_api_keys_rotated_90_days_test.py b/tests/providers/oraclecloud/services/identity/identity_user_api_keys_rotated_90_days/identity_user_api_keys_rotated_90_days_test.py index 0167d60e7d..0c42ea1c4e 100644 --- a/tests/providers/oraclecloud/services/identity/identity_user_api_keys_rotated_90_days/identity_user_api_keys_rotated_90_days_test.py +++ b/tests/providers/oraclecloud/services/identity/identity_user_api_keys_rotated_90_days/identity_user_api_keys_rotated_90_days_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_identity_user_api_keys_rotated_90_days: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_user_api_keys_rotated_90_days.identity_user_api_keys_rotated_90_days.identity_client", @@ -102,7 +102,7 @@ class Test_identity_user_api_keys_rotated_90_days: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_user_api_keys_rotated_90_days.identity_user_api_keys_rotated_90_days.identity_client", @@ -136,7 +136,7 @@ class Test_identity_user_api_keys_rotated_90_days: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "identity_user_api_keys_rotated_90_days" @@ -187,7 +187,7 @@ class Test_identity_user_api_keys_rotated_90_days: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_user_api_keys_rotated_90_days.identity_user_api_keys_rotated_90_days.identity_client", @@ -221,7 +221,7 @@ class Test_identity_user_api_keys_rotated_90_days: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "identity_user_api_keys_rotated_90_days" diff --git a/tests/providers/oraclecloud/services/identity/identity_user_auth_tokens_rotated_90_days/identity_user_auth_tokens_rotated_90_days_test.py b/tests/providers/oraclecloud/services/identity/identity_user_auth_tokens_rotated_90_days/identity_user_auth_tokens_rotated_90_days_test.py index 4079a795c8..d0b7f8781f 100644 --- a/tests/providers/oraclecloud/services/identity/identity_user_auth_tokens_rotated_90_days/identity_user_auth_tokens_rotated_90_days_test.py +++ b/tests/providers/oraclecloud/services/identity/identity_user_auth_tokens_rotated_90_days/identity_user_auth_tokens_rotated_90_days_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_identity_user_auth_tokens_rotated_90_days: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_user_auth_tokens_rotated_90_days.identity_user_auth_tokens_rotated_90_days.identity_client", @@ -102,7 +102,7 @@ class Test_identity_user_auth_tokens_rotated_90_days: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_user_auth_tokens_rotated_90_days.identity_user_auth_tokens_rotated_90_days.identity_client", @@ -136,7 +136,7 @@ class Test_identity_user_auth_tokens_rotated_90_days: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "identity_user_auth_tokens_rotated_90_days" @@ -187,7 +187,7 @@ class Test_identity_user_auth_tokens_rotated_90_days: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_user_auth_tokens_rotated_90_days.identity_user_auth_tokens_rotated_90_days.identity_client", @@ -221,7 +221,7 @@ class Test_identity_user_auth_tokens_rotated_90_days: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "identity_user_auth_tokens_rotated_90_days" diff --git a/tests/providers/oraclecloud/services/identity/identity_user_customer_secret_keys_rotated_90_days/identity_user_customer_secret_keys_rotated_90_days_test.py b/tests/providers/oraclecloud/services/identity/identity_user_customer_secret_keys_rotated_90_days/identity_user_customer_secret_keys_rotated_90_days_test.py index b17428f1f6..c5e98ac6b3 100644 --- a/tests/providers/oraclecloud/services/identity/identity_user_customer_secret_keys_rotated_90_days/identity_user_customer_secret_keys_rotated_90_days_test.py +++ b/tests/providers/oraclecloud/services/identity/identity_user_customer_secret_keys_rotated_90_days/identity_user_customer_secret_keys_rotated_90_days_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_identity_user_customer_secret_keys_rotated_90_days: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_user_customer_secret_keys_rotated_90_days.identity_user_customer_secret_keys_rotated_90_days.identity_client", @@ -102,7 +102,7 @@ class Test_identity_user_customer_secret_keys_rotated_90_days: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_user_customer_secret_keys_rotated_90_days.identity_user_customer_secret_keys_rotated_90_days.identity_client", @@ -136,7 +136,7 @@ class Test_identity_user_customer_secret_keys_rotated_90_days: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "identity_user_customer_secret_keys_rotated_90_days" @@ -187,7 +187,7 @@ class Test_identity_user_customer_secret_keys_rotated_90_days: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_user_customer_secret_keys_rotated_90_days.identity_user_customer_secret_keys_rotated_90_days.identity_client", @@ -221,7 +221,7 @@ class Test_identity_user_customer_secret_keys_rotated_90_days: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "identity_user_customer_secret_keys_rotated_90_days" diff --git a/tests/providers/oraclecloud/services/identity/identity_user_db_passwords_rotated_90_days/identity_user_db_passwords_rotated_90_days_test.py b/tests/providers/oraclecloud/services/identity/identity_user_db_passwords_rotated_90_days/identity_user_db_passwords_rotated_90_days_test.py index 7e362e9d85..8d031640db 100644 --- a/tests/providers/oraclecloud/services/identity/identity_user_db_passwords_rotated_90_days/identity_user_db_passwords_rotated_90_days_test.py +++ b/tests/providers/oraclecloud/services/identity/identity_user_db_passwords_rotated_90_days/identity_user_db_passwords_rotated_90_days_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_identity_user_db_passwords_rotated_90_days: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_user_db_passwords_rotated_90_days.identity_user_db_passwords_rotated_90_days.identity_client", @@ -102,7 +102,7 @@ class Test_identity_user_db_passwords_rotated_90_days: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_user_db_passwords_rotated_90_days.identity_user_db_passwords_rotated_90_days.identity_client", @@ -136,7 +136,7 @@ class Test_identity_user_db_passwords_rotated_90_days: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "identity_user_db_passwords_rotated_90_days" @@ -187,7 +187,7 @@ class Test_identity_user_db_passwords_rotated_90_days: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_user_db_passwords_rotated_90_days.identity_user_db_passwords_rotated_90_days.identity_client", @@ -221,7 +221,7 @@ class Test_identity_user_db_passwords_rotated_90_days: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "identity_user_db_passwords_rotated_90_days" diff --git a/tests/providers/oraclecloud/services/identity/identity_user_mfa_enabled_console_access/identity_user_mfa_enabled_console_access_test.py b/tests/providers/oraclecloud/services/identity/identity_user_mfa_enabled_console_access/identity_user_mfa_enabled_console_access_test.py index b55dd61581..534d40b22a 100644 --- a/tests/providers/oraclecloud/services/identity/identity_user_mfa_enabled_console_access/identity_user_mfa_enabled_console_access_test.py +++ b/tests/providers/oraclecloud/services/identity/identity_user_mfa_enabled_console_access/identity_user_mfa_enabled_console_access_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_identity_user_mfa_enabled_console_access: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_user_mfa_enabled_console_access.identity_user_mfa_enabled_console_access.identity_client", @@ -102,7 +102,7 @@ class Test_identity_user_mfa_enabled_console_access: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_user_mfa_enabled_console_access.identity_user_mfa_enabled_console_access.identity_client", @@ -136,7 +136,7 @@ class Test_identity_user_mfa_enabled_console_access: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "identity_user_mfa_enabled_console_access" @@ -187,7 +187,7 @@ class Test_identity_user_mfa_enabled_console_access: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_user_mfa_enabled_console_access.identity_user_mfa_enabled_console_access.identity_client", @@ -221,7 +221,7 @@ class Test_identity_user_mfa_enabled_console_access: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "identity_user_mfa_enabled_console_access" diff --git a/tests/providers/oraclecloud/services/identity/identity_user_valid_email_address/identity_user_valid_email_address_test.py b/tests/providers/oraclecloud/services/identity/identity_user_valid_email_address/identity_user_valid_email_address_test.py index b476be1e87..c1e661b7db 100644 --- a/tests/providers/oraclecloud/services/identity/identity_user_valid_email_address/identity_user_valid_email_address_test.py +++ b/tests/providers/oraclecloud/services/identity/identity_user_valid_email_address/identity_user_valid_email_address_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_identity_user_valid_email_address: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_user_valid_email_address.identity_user_valid_email_address.identity_client", @@ -102,7 +102,7 @@ class Test_identity_user_valid_email_address: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_user_valid_email_address.identity_user_valid_email_address.identity_client", @@ -136,7 +136,7 @@ class Test_identity_user_valid_email_address: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "identity_user_valid_email_address" @@ -187,7 +187,7 @@ class Test_identity_user_valid_email_address: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.identity.identity_user_valid_email_address.identity_user_valid_email_address.identity_client", @@ -221,7 +221,7 @@ class Test_identity_user_valid_email_address: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "identity_user_valid_email_address" diff --git a/tests/providers/oraclecloud/services/integration/integration_instance_access_restricted/integration_instance_access_restricted_test.py b/tests/providers/oraclecloud/services/integration/integration_instance_access_restricted/integration_instance_access_restricted_test.py index 99ea00d511..42def0ee5b 100644 --- a/tests/providers/oraclecloud/services/integration/integration_instance_access_restricted/integration_instance_access_restricted_test.py +++ b/tests/providers/oraclecloud/services/integration/integration_instance_access_restricted/integration_instance_access_restricted_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_integration_instance_access_restricted: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.integration.integration_instance_access_restricted.integration_instance_access_restricted.integration_client", @@ -102,7 +102,7 @@ class Test_integration_instance_access_restricted: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.integration.integration_instance_access_restricted.integration_instance_access_restricted.integration_client", @@ -136,7 +136,7 @@ class Test_integration_instance_access_restricted: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "integration_instance_access_restricted" @@ -187,7 +187,7 @@ class Test_integration_instance_access_restricted: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.integration.integration_instance_access_restricted.integration_instance_access_restricted.integration_client", @@ -221,7 +221,7 @@ class Test_integration_instance_access_restricted: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "integration_instance_access_restricted" diff --git a/tests/providers/oraclecloud/services/integration/integration_service_test.py b/tests/providers/oraclecloud/services/integration/integration_service_test.py index 27170bb0c2..a1f8cf3825 100644 --- a/tests/providers/oraclecloud/services/integration/integration_service_test.py +++ b/tests/providers/oraclecloud/services/integration/integration_service_test.py @@ -1,12 +1,12 @@ from unittest.mock import patch -from tests.providers.oraclecloud.oci_fixtures import set_mocked_oci_provider +from tests.providers.oraclecloud.oci_fixtures import set_mocked_oraclecloud_provider class TestIntegrationService: def test_service(self): """Test that integration service can be instantiated and mocked""" - oci_provider = set_mocked_oci_provider() + oraclecloud_provider = set_mocked_oraclecloud_provider() # Mock the entire service initialization with patch( @@ -17,14 +17,14 @@ class TestIntegrationService: Integration, ) - integration_client = Integration(oci_provider) + integration_client = Integration(oraclecloud_provider) # Manually set required attributes since __init__ was mocked integration_client.service = "integration" - integration_client.provider = oci_provider + integration_client.provider = oraclecloud_provider integration_client.audited_compartments = {} integration_client.regional_clients = {} # Verify service name assert integration_client.service == "integration" - assert integration_client.provider == oci_provider + assert integration_client.provider == oraclecloud_provider diff --git a/tests/providers/oraclecloud/services/kms/kms_key_rotation_enabled/kms_key_rotation_enabled_test.py b/tests/providers/oraclecloud/services/kms/kms_key_rotation_enabled/kms_key_rotation_enabled_test.py index 51ee56d597..bc9ec964a8 100644 --- a/tests/providers/oraclecloud/services/kms/kms_key_rotation_enabled/kms_key_rotation_enabled_test.py +++ b/tests/providers/oraclecloud/services/kms/kms_key_rotation_enabled/kms_key_rotation_enabled_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_kms_key_rotation_enabled: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.kms.kms_key_rotation_enabled.kms_key_rotation_enabled.kms_client", @@ -102,7 +102,7 @@ class Test_kms_key_rotation_enabled: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.kms.kms_key_rotation_enabled.kms_key_rotation_enabled.kms_client", @@ -136,7 +136,7 @@ class Test_kms_key_rotation_enabled: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "kms_key_rotation_enabled" @@ -187,7 +187,7 @@ class Test_kms_key_rotation_enabled: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.kms.kms_key_rotation_enabled.kms_key_rotation_enabled.kms_client", @@ -221,7 +221,7 @@ class Test_kms_key_rotation_enabled: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "kms_key_rotation_enabled" diff --git a/tests/providers/oraclecloud/services/kms/kms_service_test.py b/tests/providers/oraclecloud/services/kms/kms_service_test.py index 7b63287b62..3b87771ab8 100644 --- a/tests/providers/oraclecloud/services/kms/kms_service_test.py +++ b/tests/providers/oraclecloud/services/kms/kms_service_test.py @@ -1,12 +1,12 @@ from unittest.mock import patch -from tests.providers.oraclecloud.oci_fixtures import set_mocked_oci_provider +from tests.providers.oraclecloud.oci_fixtures import set_mocked_oraclecloud_provider class TestKmsService: def test_service(self): """Test that kms service can be instantiated and mocked""" - oci_provider = set_mocked_oci_provider() + oraclecloud_provider = set_mocked_oraclecloud_provider() # Mock the entire service initialization with patch( @@ -15,14 +15,14 @@ class TestKmsService: ): from prowler.providers.oraclecloud.services.kms.kms_service import Kms - kms_client = Kms(oci_provider) + kms_client = Kms(oraclecloud_provider) # Manually set required attributes since __init__ was mocked kms_client.service = "kms" - kms_client.provider = oci_provider + kms_client.provider = oraclecloud_provider kms_client.audited_compartments = {} kms_client.regional_clients = {} # Verify service name assert kms_client.service == "kms" - assert kms_client.provider == oci_provider + assert kms_client.provider == oraclecloud_provider diff --git a/tests/providers/oraclecloud/services/logging/logging_service_test.py b/tests/providers/oraclecloud/services/logging/logging_service_test.py index 3cea56d26b..dc52845a9f 100644 --- a/tests/providers/oraclecloud/services/logging/logging_service_test.py +++ b/tests/providers/oraclecloud/services/logging/logging_service_test.py @@ -1,12 +1,12 @@ from unittest.mock import patch -from tests.providers.oraclecloud.oci_fixtures import set_mocked_oci_provider +from tests.providers.oraclecloud.oci_fixtures import set_mocked_oraclecloud_provider class TestLoggingService: def test_service(self): """Test that logging service can be instantiated and mocked""" - oci_provider = set_mocked_oci_provider() + oraclecloud_provider = set_mocked_oraclecloud_provider() # Mock the entire service initialization with patch( @@ -17,14 +17,14 @@ class TestLoggingService: Logging, ) - logging_client = Logging(oci_provider) + logging_client = Logging(oraclecloud_provider) # Manually set required attributes since __init__ was mocked logging_client.service = "logging" - logging_client.provider = oci_provider + logging_client.provider = oraclecloud_provider logging_client.audited_compartments = {} logging_client.regional_clients = {} # Verify service name assert logging_client.service == "logging" - assert logging_client.provider == oci_provider + assert logging_client.provider == oraclecloud_provider diff --git a/tests/providers/oraclecloud/services/network/network_default_security_list_restricts_traffic/network_default_security_list_restricts_traffic_test.py b/tests/providers/oraclecloud/services/network/network_default_security_list_restricts_traffic/network_default_security_list_restricts_traffic_test.py index 0678d7e5a2..c79c934146 100644 --- a/tests/providers/oraclecloud/services/network/network_default_security_list_restricts_traffic/network_default_security_list_restricts_traffic_test.py +++ b/tests/providers/oraclecloud/services/network/network_default_security_list_restricts_traffic/network_default_security_list_restricts_traffic_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_network_default_security_list_restricts_traffic: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.network.network_default_security_list_restricts_traffic.network_default_security_list_restricts_traffic.network_client", @@ -102,7 +102,7 @@ class Test_network_default_security_list_restricts_traffic: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.network.network_default_security_list_restricts_traffic.network_default_security_list_restricts_traffic.network_client", @@ -136,7 +136,7 @@ class Test_network_default_security_list_restricts_traffic: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "network_default_security_list_restricts_traffic" @@ -187,7 +187,7 @@ class Test_network_default_security_list_restricts_traffic: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.network.network_default_security_list_restricts_traffic.network_default_security_list_restricts_traffic.network_client", @@ -221,7 +221,7 @@ class Test_network_default_security_list_restricts_traffic: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "network_default_security_list_restricts_traffic" diff --git a/tests/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_rdp_port/network_security_group_ingress_from_internet_to_rdp_port_test.py b/tests/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_rdp_port/network_security_group_ingress_from_internet_to_rdp_port_test.py index ec27474df6..55f94563c3 100644 --- a/tests/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_rdp_port/network_security_group_ingress_from_internet_to_rdp_port_test.py +++ b/tests/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_rdp_port/network_security_group_ingress_from_internet_to_rdp_port_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_network_security_group_ingress_from_internet_to_rdp_port: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.network.network_security_group_ingress_from_internet_to_rdp_port.network_security_group_ingress_from_internet_to_rdp_port.network_client", @@ -102,7 +102,7 @@ class Test_network_security_group_ingress_from_internet_to_rdp_port: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.network.network_security_group_ingress_from_internet_to_rdp_port.network_security_group_ingress_from_internet_to_rdp_port.network_client", @@ -136,7 +136,7 @@ class Test_network_security_group_ingress_from_internet_to_rdp_port: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "network_security_group_ingress_from_internet_to_rdp_port" @@ -187,7 +187,7 @@ class Test_network_security_group_ingress_from_internet_to_rdp_port: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.network.network_security_group_ingress_from_internet_to_rdp_port.network_security_group_ingress_from_internet_to_rdp_port.network_client", @@ -221,7 +221,7 @@ class Test_network_security_group_ingress_from_internet_to_rdp_port: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "network_security_group_ingress_from_internet_to_rdp_port" diff --git a/tests/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_ssh_port/network_security_group_ingress_from_internet_to_ssh_port_test.py b/tests/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_ssh_port/network_security_group_ingress_from_internet_to_ssh_port_test.py index 691256149b..baa7c49f12 100644 --- a/tests/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_ssh_port/network_security_group_ingress_from_internet_to_ssh_port_test.py +++ b/tests/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_ssh_port/network_security_group_ingress_from_internet_to_ssh_port_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_network_security_group_ingress_from_internet_to_ssh_port: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.network.network_security_group_ingress_from_internet_to_ssh_port.network_security_group_ingress_from_internet_to_ssh_port.network_client", @@ -102,7 +102,7 @@ class Test_network_security_group_ingress_from_internet_to_ssh_port: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.network.network_security_group_ingress_from_internet_to_ssh_port.network_security_group_ingress_from_internet_to_ssh_port.network_client", @@ -136,7 +136,7 @@ class Test_network_security_group_ingress_from_internet_to_ssh_port: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "network_security_group_ingress_from_internet_to_ssh_port" @@ -187,7 +187,7 @@ class Test_network_security_group_ingress_from_internet_to_ssh_port: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.network.network_security_group_ingress_from_internet_to_ssh_port.network_security_group_ingress_from_internet_to_ssh_port.network_client", @@ -221,7 +221,7 @@ class Test_network_security_group_ingress_from_internet_to_ssh_port: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "network_security_group_ingress_from_internet_to_ssh_port" diff --git a/tests/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_rdp_port/network_security_list_ingress_from_internet_to_rdp_port_test.py b/tests/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_rdp_port/network_security_list_ingress_from_internet_to_rdp_port_test.py index 7d8651deda..5d4cdb8875 100644 --- a/tests/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_rdp_port/network_security_list_ingress_from_internet_to_rdp_port_test.py +++ b/tests/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_rdp_port/network_security_list_ingress_from_internet_to_rdp_port_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_network_security_list_ingress_from_internet_to_rdp_port: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.network.network_security_list_ingress_from_internet_to_rdp_port.network_security_list_ingress_from_internet_to_rdp_port.network_client", @@ -102,7 +102,7 @@ class Test_network_security_list_ingress_from_internet_to_rdp_port: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.network.network_security_list_ingress_from_internet_to_rdp_port.network_security_list_ingress_from_internet_to_rdp_port.network_client", @@ -136,7 +136,7 @@ class Test_network_security_list_ingress_from_internet_to_rdp_port: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "network_security_list_ingress_from_internet_to_rdp_port" @@ -187,7 +187,7 @@ class Test_network_security_list_ingress_from_internet_to_rdp_port: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.network.network_security_list_ingress_from_internet_to_rdp_port.network_security_list_ingress_from_internet_to_rdp_port.network_client", @@ -221,7 +221,7 @@ class Test_network_security_list_ingress_from_internet_to_rdp_port: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "network_security_list_ingress_from_internet_to_rdp_port" diff --git a/tests/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_ssh_port/network_security_list_ingress_from_internet_to_ssh_port_test.py b/tests/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_ssh_port/network_security_list_ingress_from_internet_to_ssh_port_test.py index d8fef5465d..cb7c2875b7 100644 --- a/tests/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_ssh_port/network_security_list_ingress_from_internet_to_ssh_port_test.py +++ b/tests/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_ssh_port/network_security_list_ingress_from_internet_to_ssh_port_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_network_security_list_ingress_from_internet_to_ssh_port: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.network.network_security_list_ingress_from_internet_to_ssh_port.network_security_list_ingress_from_internet_to_ssh_port.network_client", @@ -102,7 +102,7 @@ class Test_network_security_list_ingress_from_internet_to_ssh_port: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.network.network_security_list_ingress_from_internet_to_ssh_port.network_security_list_ingress_from_internet_to_ssh_port.network_client", @@ -136,7 +136,7 @@ class Test_network_security_list_ingress_from_internet_to_ssh_port: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "network_security_list_ingress_from_internet_to_ssh_port" @@ -187,7 +187,7 @@ class Test_network_security_list_ingress_from_internet_to_ssh_port: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.network.network_security_list_ingress_from_internet_to_ssh_port.network_security_list_ingress_from_internet_to_ssh_port.network_client", @@ -221,7 +221,7 @@ class Test_network_security_list_ingress_from_internet_to_ssh_port: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "network_security_list_ingress_from_internet_to_ssh_port" diff --git a/tests/providers/oraclecloud/services/network/network_service_test.py b/tests/providers/oraclecloud/services/network/network_service_test.py index c73df8319c..6960e1d931 100644 --- a/tests/providers/oraclecloud/services/network/network_service_test.py +++ b/tests/providers/oraclecloud/services/network/network_service_test.py @@ -1,12 +1,12 @@ from unittest.mock import patch -from tests.providers.oraclecloud.oci_fixtures import set_mocked_oci_provider +from tests.providers.oraclecloud.oci_fixtures import set_mocked_oraclecloud_provider class TestNetworkService: def test_service(self): """Test that network service can be instantiated and mocked""" - oci_provider = set_mocked_oci_provider() + oraclecloud_provider = set_mocked_oraclecloud_provider() # Mock the entire service initialization with patch( @@ -17,14 +17,14 @@ class TestNetworkService: Network, ) - network_client = Network(oci_provider) + network_client = Network(oraclecloud_provider) # Manually set required attributes since __init__ was mocked network_client.service = "network" - network_client.provider = oci_provider + network_client.provider = oraclecloud_provider network_client.audited_compartments = {} network_client.regional_clients = {} # Verify service name assert network_client.service == "network" - assert network_client.provider == oci_provider + assert network_client.provider == oraclecloud_provider diff --git a/tests/providers/oraclecloud/services/network/network_vcn_subnet_flow_logs_enabled/network_vcn_subnet_flow_logs_enabled_test.py b/tests/providers/oraclecloud/services/network/network_vcn_subnet_flow_logs_enabled/network_vcn_subnet_flow_logs_enabled_test.py index 286dae00f4..ce41c90733 100644 --- a/tests/providers/oraclecloud/services/network/network_vcn_subnet_flow_logs_enabled/network_vcn_subnet_flow_logs_enabled_test.py +++ b/tests/providers/oraclecloud/services/network/network_vcn_subnet_flow_logs_enabled/network_vcn_subnet_flow_logs_enabled_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -41,7 +41,7 @@ class Test_network_vcn_subnet_flow_logs_enabled: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.network.network_vcn_subnet_flow_logs_enabled.network_vcn_subnet_flow_logs_enabled.network_client", @@ -102,7 +102,7 @@ class Test_network_vcn_subnet_flow_logs_enabled: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.network.network_vcn_subnet_flow_logs_enabled.network_vcn_subnet_flow_logs_enabled.network_client", @@ -136,7 +136,7 @@ class Test_network_vcn_subnet_flow_logs_enabled: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "network_vcn_subnet_flow_logs_enabled" @@ -187,7 +187,7 @@ class Test_network_vcn_subnet_flow_logs_enabled: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.network.network_vcn_subnet_flow_logs_enabled.network_vcn_subnet_flow_logs_enabled.network_client", @@ -221,7 +221,7 @@ class Test_network_vcn_subnet_flow_logs_enabled: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "network_vcn_subnet_flow_logs_enabled" diff --git a/tests/providers/oraclecloud/services/objectstorage/objectstorage_bucket_encrypted_with_cmk/objectstorage_bucket_encrypted_with_cmk_test.py b/tests/providers/oraclecloud/services/objectstorage/objectstorage_bucket_encrypted_with_cmk/objectstorage_bucket_encrypted_with_cmk_test.py index ab0231996b..2632c61f8f 100644 --- a/tests/providers/oraclecloud/services/objectstorage/objectstorage_bucket_encrypted_with_cmk/objectstorage_bucket_encrypted_with_cmk_test.py +++ b/tests/providers/oraclecloud/services/objectstorage/objectstorage_bucket_encrypted_with_cmk/objectstorage_bucket_encrypted_with_cmk_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -43,7 +43,7 @@ class Test_objectstorage_bucket_encrypted_with_cmk: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.objectstorage.objectstorage_bucket_encrypted_with_cmk.objectstorage_bucket_encrypted_with_cmk.objectstorage_client", @@ -106,7 +106,7 @@ class Test_objectstorage_bucket_encrypted_with_cmk: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.objectstorage.objectstorage_bucket_encrypted_with_cmk.objectstorage_bucket_encrypted_with_cmk.objectstorage_client", @@ -140,7 +140,7 @@ class Test_objectstorage_bucket_encrypted_with_cmk: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "objectstorage_bucket_encrypted_with_cmk" @@ -193,7 +193,7 @@ class Test_objectstorage_bucket_encrypted_with_cmk: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.objectstorage.objectstorage_bucket_encrypted_with_cmk.objectstorage_bucket_encrypted_with_cmk.objectstorage_client", @@ -227,7 +227,7 @@ class Test_objectstorage_bucket_encrypted_with_cmk: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "objectstorage_bucket_encrypted_with_cmk" diff --git a/tests/providers/oraclecloud/services/objectstorage/objectstorage_bucket_logging_enabled/objectstorage_bucket_logging_enabled_test.py b/tests/providers/oraclecloud/services/objectstorage/objectstorage_bucket_logging_enabled/objectstorage_bucket_logging_enabled_test.py index 708ae586a7..66239195ad 100644 --- a/tests/providers/oraclecloud/services/objectstorage/objectstorage_bucket_logging_enabled/objectstorage_bucket_logging_enabled_test.py +++ b/tests/providers/oraclecloud/services/objectstorage/objectstorage_bucket_logging_enabled/objectstorage_bucket_logging_enabled_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -43,7 +43,7 @@ class Test_objectstorage_bucket_logging_enabled: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.objectstorage.objectstorage_bucket_logging_enabled.objectstorage_bucket_logging_enabled.objectstorage_client", @@ -106,7 +106,7 @@ class Test_objectstorage_bucket_logging_enabled: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.objectstorage.objectstorage_bucket_logging_enabled.objectstorage_bucket_logging_enabled.objectstorage_client", @@ -140,7 +140,7 @@ class Test_objectstorage_bucket_logging_enabled: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "objectstorage_bucket_logging_enabled" @@ -193,7 +193,7 @@ class Test_objectstorage_bucket_logging_enabled: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.objectstorage.objectstorage_bucket_logging_enabled.objectstorage_bucket_logging_enabled.objectstorage_client", @@ -227,7 +227,7 @@ class Test_objectstorage_bucket_logging_enabled: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "objectstorage_bucket_logging_enabled" diff --git a/tests/providers/oraclecloud/services/objectstorage/objectstorage_bucket_not_publicly_accessible/objectstorage_bucket_not_publicly_accessible_test.py b/tests/providers/oraclecloud/services/objectstorage/objectstorage_bucket_not_publicly_accessible/objectstorage_bucket_not_publicly_accessible_test.py index 6c1e8b200e..14e940dd6a 100644 --- a/tests/providers/oraclecloud/services/objectstorage/objectstorage_bucket_not_publicly_accessible/objectstorage_bucket_not_publicly_accessible_test.py +++ b/tests/providers/oraclecloud/services/objectstorage/objectstorage_bucket_not_publicly_accessible/objectstorage_bucket_not_publicly_accessible_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -43,7 +43,7 @@ class Test_objectstorage_bucket_not_publicly_accessible: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.objectstorage.objectstorage_bucket_not_publicly_accessible.objectstorage_bucket_not_publicly_accessible.objectstorage_client", @@ -106,7 +106,7 @@ class Test_objectstorage_bucket_not_publicly_accessible: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.objectstorage.objectstorage_bucket_not_publicly_accessible.objectstorage_bucket_not_publicly_accessible.objectstorage_client", @@ -140,7 +140,7 @@ class Test_objectstorage_bucket_not_publicly_accessible: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "objectstorage_bucket_not_publicly_accessible" @@ -193,7 +193,7 @@ class Test_objectstorage_bucket_not_publicly_accessible: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.objectstorage.objectstorage_bucket_not_publicly_accessible.objectstorage_bucket_not_publicly_accessible.objectstorage_client", @@ -227,7 +227,7 @@ class Test_objectstorage_bucket_not_publicly_accessible: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "objectstorage_bucket_not_publicly_accessible" diff --git a/tests/providers/oraclecloud/services/objectstorage/objectstorage_bucket_versioning_enabled/objectstorage_bucket_versioning_enabled_test.py b/tests/providers/oraclecloud/services/objectstorage/objectstorage_bucket_versioning_enabled/objectstorage_bucket_versioning_enabled_test.py index 432db038ac..ce5d13c0ab 100644 --- a/tests/providers/oraclecloud/services/objectstorage/objectstorage_bucket_versioning_enabled/objectstorage_bucket_versioning_enabled_test.py +++ b/tests/providers/oraclecloud/services/objectstorage/objectstorage_bucket_versioning_enabled/objectstorage_bucket_versioning_enabled_test.py @@ -4,7 +4,7 @@ from tests.providers.oraclecloud.oci_fixtures import ( OCI_COMPARTMENT_ID, OCI_REGION, OCI_TENANCY_ID, - set_mocked_oci_provider, + set_mocked_oraclecloud_provider, ) @@ -43,7 +43,7 @@ class Test_objectstorage_bucket_versioning_enabled: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.objectstorage.objectstorage_bucket_versioning_enabled.objectstorage_bucket_versioning_enabled.objectstorage_client", @@ -106,7 +106,7 @@ class Test_objectstorage_bucket_versioning_enabled: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.objectstorage.objectstorage_bucket_versioning_enabled.objectstorage_bucket_versioning_enabled.objectstorage_client", @@ -140,7 +140,7 @@ class Test_objectstorage_bucket_versioning_enabled: assert pass_results[0].compartment_id is not None # Verify metadata - assert pass_results[0].check_metadata.Provider == "oci" + assert pass_results[0].check_metadata.Provider == "oraclecloud" assert ( pass_results[0].check_metadata.CheckID == "objectstorage_bucket_versioning_enabled" @@ -193,7 +193,7 @@ class Test_objectstorage_bucket_versioning_enabled: with ( mock.patch( "prowler.providers.common.provider.Provider.get_global_provider", - return_value=set_mocked_oci_provider(), + return_value=set_mocked_oraclecloud_provider(), ), mock.patch( "prowler.providers.oraclecloud.services.objectstorage.objectstorage_bucket_versioning_enabled.objectstorage_bucket_versioning_enabled.objectstorage_client", @@ -227,7 +227,7 @@ class Test_objectstorage_bucket_versioning_enabled: assert fail_results[0].compartment_id is not None # Verify metadata - assert fail_results[0].check_metadata.Provider == "oci" + assert fail_results[0].check_metadata.Provider == "oraclecloud" assert ( fail_results[0].check_metadata.CheckID == "objectstorage_bucket_versioning_enabled" diff --git a/tests/providers/oraclecloud/services/objectstorage/objectstorage_service_test.py b/tests/providers/oraclecloud/services/objectstorage/objectstorage_service_test.py index f4cbe05f87..1000dcea7a 100644 --- a/tests/providers/oraclecloud/services/objectstorage/objectstorage_service_test.py +++ b/tests/providers/oraclecloud/services/objectstorage/objectstorage_service_test.py @@ -1,12 +1,12 @@ from unittest.mock import patch -from tests.providers.oraclecloud.oci_fixtures import set_mocked_oci_provider +from tests.providers.oraclecloud.oci_fixtures import set_mocked_oraclecloud_provider class TestObjectStorageService: def test_service(self): """Test that objectstorage service can be instantiated and mocked""" - oci_provider = set_mocked_oci_provider() + oraclecloud_provider = set_mocked_oraclecloud_provider() # Mock the entire service initialization with patch( @@ -17,14 +17,14 @@ class TestObjectStorageService: ObjectStorage, ) - objectstorage_client = ObjectStorage(oci_provider) + objectstorage_client = ObjectStorage(oraclecloud_provider) # Manually set required attributes since __init__ was mocked objectstorage_client.service = "objectstorage" - objectstorage_client.provider = oci_provider + objectstorage_client.provider = oraclecloud_provider objectstorage_client.audited_compartments = {} objectstorage_client.regional_clients = {} # Verify service name assert objectstorage_client.service == "objectstorage" - assert objectstorage_client.provider == oci_provider + assert objectstorage_client.provider == oraclecloud_provider From 02489a5eefc75dba74e53732caa54fb701dce651 Mon Sep 17 00:00:00 2001 From: Pepe Fagoaga Date: Tue, 4 Nov 2025 18:31:00 +0100 Subject: [PATCH 13/37] docs: get latest version to install Prowler App (#9163) --- .../installation/prowler-app.mdx | 57 +++++++++---------- 1 file changed, 26 insertions(+), 31 deletions(-) diff --git a/docs/getting-started/installation/prowler-app.mdx b/docs/getting-started/installation/prowler-app.mdx index 4c49b8d4f0..f404180791 100644 --- a/docs/getting-started/installation/prowler-app.mdx +++ b/docs/getting-started/installation/prowler-app.mdx @@ -1,5 +1,5 @@ --- -title: 'Installation' +title: "Installation" --- ### Installation @@ -9,41 +9,40 @@ Prowler App supports multiple installation methods based on your environment. Refer to the [Prowler App Tutorial](/user-guide/tutorials/prowler-app) for detailed usage instructions. -Prowler configuration is based in `.env` files. Every version of Prowler can have differences on that file, so, please, use the file that corresponds with that version or repository branch or tag. - + Prowler configuration is based in `.env` files. Every version of Prowler can have differences on that file, so, please, use the file that corresponds with that version or repository branch or tag. + _Requirements_: - * `Docker Compose` installed: https://docs.docker.com/compose/install/. + - `Docker Compose` installed: https://docs.docker.com/compose/install/. _Commands_: - ``` bash - curl -LO https://raw.githubusercontent.com/prowler-cloud/prowler/refs/heads/master/docker-compose.yml - curl -LO https://raw.githubusercontent.com/prowler-cloud/prowler/refs/heads/master/.env + ```bash + VERSION=$(curl -s https://api.github.com/repos/prowler-cloud/prowler/releases/latest | jq -r .tag_name) + curl -sLO "https://raw.githubusercontent.com/prowler-cloud/prowler/refs/tags/${VERSION}/docker-compose.yml" + curl -sLO "https://raw.githubusercontent.com/prowler-cloud/prowler/refs/tags/${VERSION}/.env" docker compose up -d ``` > Containers are built for `linux/amd64`. If your workstation's architecture is different, please set `DOCKER_DEFAULT_PLATFORM=linux/amd64` in your environment or use the `--platform linux/amd64` flag in the docker command. - _Requirements_: - * `git` installed. - * `poetry` installed: [poetry installation](https://python-poetry.org/docs/#installation). - * `npm` installed: [npm installation](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm). - * `Docker Compose` installed: https://docs.docker.com/compose/install/. + - `git` installed. + - `poetry` installed: [poetry installation](https://python-poetry.org/docs/#installation). + - `npm` installed: [npm installation](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm). + - `Docker Compose` installed: https://docs.docker.com/compose/install/. - Make sure to have `api/.env` and `ui/.env.local` files with the required environment variables. You can find the required environment variables in the [`api/.env.template`](https://github.com/prowler-cloud/prowler/blob/master/api/.env.example) and [`ui/.env.template`](https://github.com/prowler-cloud/prowler/blob/master/ui/.env.template) files. + Make sure to have `api/.env` and `ui/.env.local` files with the required environment variables. You can find the required environment variables in the [`api/.env.template`](https://github.com/prowler-cloud/prowler/blob/master/api/.env.example) and [`ui/.env.template`](https://github.com/prowler-cloud/prowler/blob/master/ui/.env.template) files. - _Commands to run the API_: - ``` bash + ```bash git clone https://github.com/prowler-cloud/prowler \ cd prowler/api \ poetry install \ @@ -57,17 +56,15 @@ Prowler configuration is based in `.env` files. Every version of Prowler can hav ``` - Starting from Poetry v2.0.0, `poetry shell` has been deprecated in favor of `poetry env activate`. + Starting from Poetry v2.0.0, `poetry shell` has been deprecated in favor of `poetry env activate`. - If your poetry version is below 2.0.0 you must keep using `poetry shell` to activate your environment. - In case you have any doubts, consult the Poetry environment activation guide: https://python-poetry.org/docs/managing-environments/#activating-the-environment + If your poetry version is below 2.0.0 you must keep using `poetry shell` to activate your environment. In case you have any doubts, consult the Poetry environment activation guide: https://python-poetry.org/docs/managing-environments/#activating-the-environment - > Now, you can access the API documentation at http://localhost:8080/api/v1/docs. _Commands to run the API Worker_: - ``` bash + ```bash git clone https://github.com/prowler-cloud/prowler \ cd prowler/api \ poetry install \ @@ -80,7 +77,7 @@ Prowler configuration is based in `.env` files. Every version of Prowler can hav _Commands to run the API Scheduler_: - ``` bash + ```bash git clone https://github.com/prowler-cloud/prowler \ cd prowler/api \ poetry install \ @@ -93,7 +90,7 @@ Prowler configuration is based in `.env` files. Every version of Prowler can hav _Commands to run the UI_: - ``` bash + ```bash git clone https://github.com/prowler-cloud/prowler \ cd prowler/ui \ npm install \ @@ -104,10 +101,11 @@ Prowler configuration is based in `.env` files. Every version of Prowler can hav > Enjoy Prowler App at http://localhost:3000 by signing up with your email and password. - Google and GitHub authentication is only available in [Prowler Cloud](https://prowler.com). + Google and GitHub authentication is only available in [Prowler Cloud](https://prowler.com). + ### Update Prowler App Upgrade Prowler App installation using one of two options: @@ -129,13 +127,12 @@ docker compose pull --policy always The `--policy always` flag ensures that Docker pulls the latest images even if they already exist locally. - -**What Gets Preserved During Upgrade** - -Everything is preserved, nothing will be deleted after the update. + **What Gets Preserved During Upgrade** + Everything is preserved, nothing will be deleted after the update. + ### Troubleshooting If containers don't start, check logs for errors: @@ -155,7 +152,6 @@ docker compose pull docker compose up -d ``` - ### Container versions The available versions of Prowler CLI are the following: @@ -171,6 +167,5 @@ The available versions of Prowler CLI are the following: The container images are available here: - Prowler App: - - - [DockerHub - Prowler UI](https://hub.docker.com/r/prowlercloud/prowler-ui/tags) - - [DockerHub - Prowler API](https://hub.docker.com/r/prowlercloud/prowler-api/tags) + - [DockerHub - Prowler UI](https://hub.docker.com/r/prowlercloud/prowler-ui/tags) + - [DockerHub - Prowler API](https://hub.docker.com/r/prowlercloud/prowler-api/tags) From 5b20fd1b3bf970a7e7889ab5e0c1c1da583d6214 Mon Sep 17 00:00:00 2001 From: Andoni Alonso <14891798+andoniaf@users.noreply.github.com> Date: Wed, 5 Nov 2025 09:20:18 +0100 Subject: [PATCH 14/37] docs(iac): add IaC getting started in Cloud/App (#9152) --- README.md | 24 +++++------ docs/images/providers/add-iac-repo.png | Bin 0 -> 240587 bytes docs/images/providers/iac-authentication.png | Bin 0 -> 242075 bytes .../providers/iac-verify-connection.png | Bin 0 -> 335901 bytes docs/images/providers/select-iac.png | Bin 0 -> 304961 bytes .../providers/iac/getting-started-iac.mdx | 39 ++++++++++++++++++ 6 files changed, 51 insertions(+), 12 deletions(-) create mode 100644 docs/images/providers/add-iac-repo.png create mode 100644 docs/images/providers/iac-authentication.png create mode 100644 docs/images/providers/iac-verify-connection.png create mode 100644 docs/images/providers/select-iac.png diff --git a/README.md b/README.md index 6c9110f441..bda691722b 100644 --- a/README.md +++ b/README.md @@ -80,19 +80,19 @@ prowler dashboard > 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) | Support | Stage | Interface | -|---|---|---|---|---|---|---|---| -| AWS | 576 | 82 | 38 | 10 | Official | Stable | UI, API, CLI | -| GCP | 79 | 13 | 12 | 3 | Official | Stable | UI, API, CLI | -| Azure | 162 | 19 | 12 | 4 | Official | Stable | UI, API, CLI | -| Kubernetes | 83 | 7 | 5 | 7 | Official | Stable | UI, API, CLI | +| 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) | Support | Interface | +|---|---|---|---|---|---|---| +| AWS | 576 | 82 | 38 | 10 | Official | UI, API, CLI | +| GCP | 79 | 13 | 12 | 3 | Official | UI, API, CLI | +| Azure | 162 | 19 | 12 | 4 | Official | UI, API, CLI | +| Kubernetes | 83 | 7 | 5 | 7 | Official | UI, API, CLI | | GitHub | 17 | 2 | 1 | 0 | Official | Stable | UI, API, CLI | -| M365 | 70 | 7 | 3 | 2 | Official | Stable | UI, API, CLI | -| OCI | 51 | 13 | 1 | 10 | Official | Stable | UI, API, CLI | -| IaC | [See `trivy` docs.](https://trivy.dev/latest/docs/coverage/iac/) | N/A | N/A | N/A | Official | Beta | CLI | -| MongoDB Atlas | 10 | 3 | 0 | 0 | Official | Beta | CLI | -| LLM | [See `promptfoo` docs.](https://www.promptfoo.dev/docs/red-team/plugins/) | N/A | N/A | N/A | Official | Beta | CLI | -| NHN | 6 | 2 | 1 | 0 | Unofficial | Beta | CLI | +| M365 | 70 | 7 | 3 | 2 | Official | UI, API, CLI | +| OCI | 51 | 13 | 1 | 10 | Official | UI, API, CLI | +| IaC | [See `trivy` docs.](https://trivy.dev/latest/docs/coverage/iac/) | N/A | N/A | N/A | Official | UI, API, CLI | +| MongoDB Atlas | 10 | 3 | 0 | 0 | Official | CLI | +| LLM | [See `promptfoo` docs.](https://www.promptfoo.dev/docs/red-team/plugins/) | N/A | N/A | N/A | Official | CLI | +| NHN | 6 | 2 | 1 | 0 | Unofficial | CLI | > [!Note] > The numbers in the table are updated periodically. diff --git a/docs/images/providers/add-iac-repo.png b/docs/images/providers/add-iac-repo.png new file mode 100644 index 0000000000000000000000000000000000000000..31981e7fd1faed8ee7488ed8b55749f1fb8caefc GIT binary patch literal 240587 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 o11Y(o9}OWAq@S(MxjVde%rhS8R}Kx?XGy$Qh+9 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≤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

<^H0+b?j)-*5t|Eih9LB|E@NAt@Hm~(@ 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%0DO9 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
A$(C3< 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�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%0AaW97L##Q9-8N; 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 literal 0 HcmV?d00001 diff --git a/docs/user-guide/providers/iac/getting-started-iac.mdx b/docs/user-guide/providers/iac/getting-started-iac.mdx index a3efb0f2df..315afafed4 100644 --- a/docs/user-guide/providers/iac/getting-started-iac.mdx +++ b/docs/user-guide/providers/iac/getting-started-iac.mdx @@ -1,6 +1,7 @@ --- title: "Getting Started with the IaC Provider" --- +import { VersionBadge } from "/snippets/version-badge.mdx" Prowler's Infrastructure as Code (IaC) provider enables scanning of local or remote infrastructure code for security and compliance issues using [Trivy](https://trivy.dev/). This provider supports a wide range of IaC frameworks, allowing assessment of code before deployment. @@ -22,8 +23,46 @@ The IaC provider leverages [Trivy](https://trivy.dev/latest/docs/scanner/vulnera - Mutelist logic ([filtering](https://trivy.dev/latest/docs/configuration/filtering/)) is handled by Trivy, not Prowler. - Results are output in the same formats as other Prowler providers (CSV, JSON, HTML, etc.). +## Prowler App + + + +### Step 1: Access Prowler Cloud/App + +1. Navigate to [Prowler Cloud](https://cloud.prowler.com/) or launch [Prowler App](/user-guide/tutorials/prowler-app) +2. Go to "Configuration" > "Cloud Providers" + + ![Cloud Providers Page](/images/prowler-app/cloud-providers-page.png) + +3. Click "Add Cloud Provider" + + ![Add a Cloud Provider](/images/prowler-app/add-cloud-provider.png) + +4. Select "Infrastructure as Code" + + ![Select Infrastructure as Code](/images/providers/select-iac.png) + +5. Add the Repository URL and an optional alias, then click "Next" + + ![Add IaC Repository URL](/images/providers/add-iac-repo.png) + +### Step 2: Enter Authentication Details + +6. Optionally provide the [authentication](/user-guide/providers/iac/authentication) details for private repositories, then click "Next" + + ![IaC Authentication](/images/providers/iac-authentication.png) + +### Step 3: Verify Connection & Start Scan + +7. Review the provider configuration and click "Launch scan" to initiate the scan + + ![Verify Connection & Start Scan](/images/providers/iac-verify-connection.png) + + ## Prowler CLI + + ### Usage Use the `iac` argument to run Prowler with the IaC provider. Specify the directory or repository to scan, frameworks to include, and paths to exclude. From 191d51675ca25bfd589124c79fd5cb48a6a49198 Mon Sep 17 00:00:00 2001 From: Sergio Garcia Date: Wed, 5 Nov 2025 08:59:55 -0500 Subject: [PATCH 15/37] chore(ui): rename OCI provider to oraclecloud (#9166) --- .../(prowler)/new-overview/components/accounts-selector.tsx | 2 +- .../new-overview/components/provider-type-selector.tsx | 2 +- ui/components/filters/custom-select-provider.tsx | 2 +- .../overview/provider-overview/provider-overview.tsx | 4 ++-- ui/components/providers/enhanced-provider-selector.tsx | 2 +- ui/components/providers/radio-group-provider.tsx | 2 +- .../providers/workflow/forms/base-credentials-form.tsx | 2 +- .../providers/workflow/forms/connect-account-form.tsx | 2 +- ui/components/ui/entities/get-provider-logo.tsx | 4 ++-- ui/hooks/use-credentials-form.ts | 2 +- ui/lib/external-urls.ts | 4 ++-- ui/lib/provider-credentials/build-crendentials.ts | 2 +- ui/types/formSchemas.ts | 4 ++-- ui/types/providers.ts | 2 +- 14 files changed, 18 insertions(+), 18 deletions(-) diff --git a/ui/app/(prowler)/new-overview/components/accounts-selector.tsx b/ui/app/(prowler)/new-overview/components/accounts-selector.tsx index 2d20ace068..210e1f6f6d 100644 --- a/ui/app/(prowler)/new-overview/components/accounts-selector.tsx +++ b/ui/app/(prowler)/new-overview/components/accounts-selector.tsx @@ -30,7 +30,7 @@ const PROVIDER_ICON: Record = { m365: , github: , iac: , - oci: , + oraclecloud: , }; interface AccountsSelectorProps { diff --git a/ui/app/(prowler)/new-overview/components/provider-type-selector.tsx b/ui/app/(prowler)/new-overview/components/provider-type-selector.tsx index 8329a13282..a4c3da7b14 100644 --- a/ui/app/(prowler)/new-overview/components/provider-type-selector.tsx +++ b/ui/app/(prowler)/new-overview/components/provider-type-selector.tsx @@ -91,7 +91,7 @@ const PROVIDER_DATA: Record< label: "Infrastructure as Code", icon: IacProviderBadge, }, - oci: { + oraclecloud: { label: "Oracle Cloud Infrastructure", icon: OracleCloudProviderBadge, }, diff --git a/ui/components/filters/custom-select-provider.tsx b/ui/components/filters/custom-select-provider.tsx index e2958110ab..5d0e4db52e 100644 --- a/ui/components/filters/custom-select-provider.tsx +++ b/ui/components/filters/custom-select-provider.tsx @@ -49,7 +49,7 @@ const providerDisplayData: Record< label: "Infrastructure as Code", component: , }, - oci: { + oraclecloud: { label: "Oracle Cloud Infrastructure", component: , }, diff --git a/ui/components/overview/provider-overview/provider-overview.tsx b/ui/components/overview/provider-overview/provider-overview.tsx index 03dbeb744c..e40dc25494 100644 --- a/ui/components/overview/provider-overview/provider-overview.tsx +++ b/ui/components/overview/provider-overview/provider-overview.tsx @@ -41,7 +41,7 @@ export const ProvidersOverview = ({ return ; case "iac": return ; - case "oci": + case "oraclecloud": return ; default: return null; @@ -56,7 +56,7 @@ export const ProvidersOverview = ({ kubernetes: "Kubernetes", github: "GitHub", iac: "IaC", - oci: "OCI", + oraclecloud: "OCI", }; const providers = PROVIDER_TYPES.map((providerType) => ({ diff --git a/ui/components/providers/enhanced-provider-selector.tsx b/ui/components/providers/enhanced-provider-selector.tsx index cd1453c3bf..3282ede810 100644 --- a/ui/components/providers/enhanced-provider-selector.tsx +++ b/ui/components/providers/enhanced-provider-selector.tsx @@ -18,7 +18,7 @@ const providerTypeLabels: Record = { kubernetes: "Kubernetes", github: "GitHub", iac: "Infrastructure as Code", - oci: "Oracle Cloud Infrastructure", + oraclecloud: "Oracle Cloud Infrastructure", }; interface EnhancedProviderSelectorProps { diff --git a/ui/components/providers/radio-group-provider.tsx b/ui/components/providers/radio-group-provider.tsx index c507823593..3b04cba457 100644 --- a/ui/components/providers/radio-group-provider.tsx +++ b/ui/components/providers/radio-group-provider.tsx @@ -88,7 +88,7 @@ export const RadioGroupProvider: React.FC = ({

diff --git a/ui/components/providers/workflow/forms/base-credentials-form.tsx b/ui/components/providers/workflow/forms/base-credentials-form.tsx index 670c8b0bae..d7835386c9 100644 --- a/ui/components/providers/workflow/forms/base-credentials-form.tsx +++ b/ui/components/providers/workflow/forms/base-credentials-form.tsx @@ -167,7 +167,7 @@ export const BaseCredentialsForm = ({ control={form.control as unknown as Control} /> )} - {providerType === "oci" && ( + {providerType === "oraclecloud" && ( } /> diff --git a/ui/components/providers/workflow/forms/connect-account-form.tsx b/ui/components/providers/workflow/forms/connect-account-form.tsx index 5fbdb48692..f0ede535bf 100644 --- a/ui/components/providers/workflow/forms/connect-account-form.tsx +++ b/ui/components/providers/workflow/forms/connect-account-form.tsx @@ -56,7 +56,7 @@ const getProviderFieldDetails = (providerType?: ProviderType) => { label: "Repository URL", placeholder: "e.g. https://github.com/user/repo", }; - case "oci": + case "oraclecloud": return { label: "Tenancy OCID", placeholder: "e.g. ocid1.tenancy.oc1..aaaaaaa...", diff --git a/ui/components/ui/entities/get-provider-logo.tsx b/ui/components/ui/entities/get-provider-logo.tsx index 590688729b..918dd30c6c 100644 --- a/ui/components/ui/entities/get-provider-logo.tsx +++ b/ui/components/ui/entities/get-provider-logo.tsx @@ -28,7 +28,7 @@ export const getProviderLogo = (provider: ProviderType) => { return ; case "iac": return ; - case "oci": + case "oraclecloud": return ; default: return null; @@ -51,7 +51,7 @@ export const getProviderName = (provider: ProviderType): string => { return "GitHub"; case "iac": return "Infrastructure as Code"; - case "oci": + case "oraclecloud": return "Oracle Cloud Infrastructure"; default: return "Unknown Provider"; diff --git a/ui/hooks/use-credentials-form.ts b/ui/hooks/use-credentials-form.ts index 01b7c60fef..a9a6215ba3 100644 --- a/ui/hooks/use-credentials-form.ts +++ b/ui/hooks/use-credentials-form.ts @@ -157,7 +157,7 @@ export const useCredentialsForm = ({ }; } return baseDefaults; - case "oci": + case "oraclecloud": return { ...baseDefaults, [ProviderCredentialFields.OCI_USER]: "", diff --git a/ui/lib/external-urls.ts b/ui/lib/external-urls.ts index d59d5dd729..9a7385ecce 100644 --- a/ui/lib/external-urls.ts +++ b/ui/lib/external-urls.ts @@ -37,10 +37,10 @@ export const getProviderHelpText = (provider: string) => { text: "Need help scanning your Infrastructure as Code repository?", link: "https://goto.prowler.com/provider-iac", }; - case "oci": + case "oraclecloud": return { text: "Need help connecting your Oracle Cloud account?", - link: "https://goto.prowler.com/provider-oci", + link: "https://goto.prowler.com/provider-oraclecloud", }; default: return { diff --git a/ui/lib/provider-credentials/build-crendentials.ts b/ui/lib/provider-credentials/build-crendentials.ts index 5435296d7b..4972b5a7e0 100644 --- a/ui/lib/provider-credentials/build-crendentials.ts +++ b/ui/lib/provider-credentials/build-crendentials.ts @@ -304,7 +304,7 @@ export const buildSecretConfig = ( secretType: "static", secret: buildIacSecret(formData), }), - oci: () => ({ + oraclecloud: () => ({ secretType: "static", secret: buildOracleCloudSecret(formData, providerUid), }), diff --git a/ui/types/formSchemas.ts b/ui/types/formSchemas.ts index d5cca88218..a0d073d3a4 100644 --- a/ui/types/formSchemas.ts +++ b/ui/types/formSchemas.ts @@ -116,7 +116,7 @@ export const addProviderFormSchema = z providerUid: z.string(), }), z.object({ - providerType: z.literal("oci"), + providerType: z.literal("oraclecloud"), [ProviderCredentialFields.PROVIDER_ALIAS]: z.string(), providerUid: z.string(), }), @@ -210,7 +210,7 @@ export const addCredentialsFormSchema = ( .string() .optional(), } - : providerType === "oci" + : providerType === "oraclecloud" ? { [ProviderCredentialFields.OCI_USER]: z .string() diff --git a/ui/types/providers.ts b/ui/types/providers.ts index 9b2de65eb2..adbc717ccd 100644 --- a/ui/types/providers.ts +++ b/ui/types/providers.ts @@ -6,7 +6,7 @@ export const PROVIDER_TYPES = [ "m365", "github", "iac", - "oci", + "oraclecloud", ] as const; export type ProviderType = (typeof PROVIDER_TYPES)[number]; From b25ed9fd27921b9f0c535dd7eb3247263af83d91 Mon Sep 17 00:00:00 2001 From: Andoni Alonso <14891798+andoniaf@users.noreply.github.com> Date: Wed, 5 Nov 2025 15:57:41 +0100 Subject: [PATCH 16/37] feat(github): add external resource link (#9153) Co-authored-by: alejandrobailo --- tests/providers/iac/iac_fixtures.py | 20 ++ ui/CHANGELOG.md | 1 + .../findings/table/finding-detail.tsx | 56 +++++- .../resources/table/resource-detail.tsx | 35 +++- ui/components/ui/custom/custom-section.tsx | 8 +- .../ui/entities/copy-link-button.tsx | 41 ---- ui/components/ui/entities/index.ts | 1 - ui/lib/iac-utils.ts | 188 ++++++++++++++++++ 8 files changed, 295 insertions(+), 55 deletions(-) delete mode 100644 ui/components/ui/entities/copy-link-button.tsx create mode 100644 ui/lib/iac-utils.ts diff --git a/tests/providers/iac/iac_fixtures.py b/tests/providers/iac/iac_fixtures.py index 9e4c1105f4..2e769a732a 100644 --- a/tests/providers/iac/iac_fixtures.py +++ b/tests/providers/iac/iac_fixtures.py @@ -17,6 +17,10 @@ SAMPLE_TRIVY_OUTPUT = { "Severity": "LOW", "PrimaryURL": "https://avd.aquasec.com/misconfig/aws/s3/avd-aws-0001", "RuleID": "AVD-AWS-0001", + "CauseMetadata": { + "StartLine": 10, + "EndLine": 15, + }, }, { "ID": "AVD-AWS-0002", @@ -27,6 +31,10 @@ SAMPLE_TRIVY_OUTPUT = { "Severity": "LOW", "PrimaryURL": "https://avd.aquasec.com/misconfig/aws/s3/avd-aws-0002", "RuleID": "AVD-AWS-0002", + "CauseMetadata": { + "StartLine": 20, + "EndLine": 25, + }, }, ], "Vulnerabilities": [], @@ -46,6 +54,10 @@ SAMPLE_TRIVY_OUTPUT = { "Severity": "LOW", "PrimaryURL": "https://avd.aquasec.com/misconfig/aws/s3/avd-aws-0003", "RuleID": "AVD-AWS-0003", + "CauseMetadata": { + "StartLine": 30, + "EndLine": 35, + }, } ], "Vulnerabilities": [], @@ -67,6 +79,10 @@ SAMPLE_FAILED_CHECK = { "Severity": "low", "PrimaryURL": "https://avd.aquasec.com/misconfig/aws/s3/avd-aws-0001", "RuleID": "AVD-AWS-0001", + "CauseMetadata": { + "StartLine": 10, + "EndLine": 15, + }, } SAMPLE_PASSED_CHECK = { @@ -78,6 +94,10 @@ SAMPLE_PASSED_CHECK = { "Severity": "low", "PrimaryURL": "https://avd.aquasec.com/misconfig/aws/s3/avd-aws-0003", "RuleID": "AVD-AWS-0003", + "CauseMetadata": { + "StartLine": 30, + "EndLine": 35, + }, } # Additional sample checks diff --git a/ui/CHANGELOG.md b/ui/CHANGELOG.md index e81eef512f..1e4ef29e0a 100644 --- a/ui/CHANGELOG.md +++ b/ui/CHANGELOG.md @@ -9,6 +9,7 @@ All notable changes to the **Prowler UI** are documented in this file. - RSS feeds support [(#9109)](https://github.com/prowler-cloud/prowler/pull/9109) - Customer Support menu item [(#9143)](https://github.com/prowler-cloud/prowler/pull/9143) - IaC (Infrastructure as Code) provider support for scanning remote repositories [(#8751)](https://github.com/prowler-cloud/prowler/pull/8751) +- External resource link to IaC findings for direct navigation to source code in Git repositories [(#9151)](https://github.com/prowler-cloud/prowler/pull/9151) ### 🔄 Changed diff --git a/ui/components/findings/table/finding-detail.tsx b/ui/components/findings/table/finding-detail.tsx index 432f3a622a..61f7408f3d 100644 --- a/ui/components/findings/table/finding-detail.tsx +++ b/ui/components/findings/table/finding-detail.tsx @@ -1,18 +1,17 @@ "use client"; import { Snippet } from "@heroui/snippet"; +import { Tooltip } from "@heroui/tooltip"; +import { ExternalLink, Link } from "lucide-react"; import ReactMarkdown from "react-markdown"; import { CodeSnippet } from "@/components/ui/code-snippet/code-snippet"; import { CustomSection } from "@/components/ui/custom"; import { CustomLink } from "@/components/ui/custom/custom-link"; -import { - CopyLinkButton, - EntityInfoShort, - InfoField, -} from "@/components/ui/entities"; +import { EntityInfoShort, InfoField } from "@/components/ui/entities"; import { DateWithTime } from "@/components/ui/entities/date-with-time"; import { SeverityBadge } from "@/components/ui/table/severity-badge"; +import { buildGitFileUrl, extractLineRangeFromUid } from "@/lib/iac-utils"; import { FindingProps, ProviderType } from "@/types"; import { Muted } from "../muted"; @@ -60,14 +59,32 @@ export const FindingDetail = ({ params.set("id", findingDetails.id); const url = `${window.location.origin}${currentUrl.pathname}?${params.toString()}`; + // Build Git URL for IaC findings + const gitUrl = + providerDetails.provider === "iac" + ? buildGitFileUrl( + providerDetails.uid, + resource.name, + extractLineRangeFromUid(attributes.uid) || "", + ) + : null; + return (
{/* Header */}
-

+

{renderValue(attributes.check_metadata.checktitle)} - + + +

@@ -238,7 +255,30 @@ export const FindingDetail = ({ {/* Resource Details */} - + + Resource Details + {gitUrl && ( + + + + + + )} + + ) : ( + "Resource Details" + ) + } + >
{renderValue(resource.name)} diff --git a/ui/components/resources/table/resource-detail.tsx b/ui/components/resources/table/resource-detail.tsx index 010cb5447f..e8e118cb91 100644 --- a/ui/components/resources/table/resource-detail.tsx +++ b/ui/components/resources/table/resource-detail.tsx @@ -2,7 +2,8 @@ import { Snippet } from "@heroui/snippet"; import { Spinner } from "@heroui/spinner"; -import { InfoIcon } from "lucide-react"; +import { Tooltip } from "@heroui/tooltip"; +import { ExternalLink, InfoIcon } from "lucide-react"; import { useEffect, useState } from "react"; import { getFindingById } from "@/actions/findings"; @@ -17,6 +18,7 @@ import { } from "@/components/ui/entities"; import { SeverityBadge, StatusFindingBadge } from "@/components/ui/table"; import { createDict } from "@/lib"; +import { buildGitFileUrl } from "@/lib/iac-utils"; import { FindingProps, ProviderType, ResourceProps } from "@/types"; const renderValue = (value: string | null | undefined) => { @@ -162,6 +164,12 @@ export const ResourceDetail = ({ const providerData = resource.relationships.provider.data.attributes; const allFindings = findingsData; + // Build Git URL for IaC resources + const gitUrl = + providerData.provider === "iac" + ? buildGitFileUrl(providerData.uid, attributes.name, "") + : null; + if (selectedFindingId) { const findingTitle = findingDetails?.attributes?.check_metadata?.checktitle || @@ -186,7 +194,30 @@ export const ResourceDetail = ({ return (
{/* Resource Details section */} - + + Resource Details + {gitUrl && ( + + + + + + )} + + ) : ( + "Resource Details" + ) + } + >
diff --git a/ui/components/ui/custom/custom-section.tsx b/ui/components/ui/custom/custom-section.tsx index f7967e0ba1..197bac35c5 100644 --- a/ui/components/ui/custom/custom-section.tsx +++ b/ui/components/ui/custom/custom-section.tsx @@ -1,7 +1,9 @@ +import { type ReactNode } from "react"; + interface CustomSectionProps { - title: string; - children: React.ReactNode; - action?: React.ReactNode; + title: string | ReactNode; + children: ReactNode; + action?: ReactNode; } export const CustomSection = ({ diff --git a/ui/components/ui/entities/copy-link-button.tsx b/ui/components/ui/entities/copy-link-button.tsx deleted file mode 100644 index 1e3d5cdf8b..0000000000 --- a/ui/components/ui/entities/copy-link-button.tsx +++ /dev/null @@ -1,41 +0,0 @@ -"use client"; - -import { Tooltip } from "@heroui/tooltip"; -import { CheckCheck, ExternalLink } from "lucide-react"; -import { useState } from "react"; - -type CopyLinkButtonProps = { - url: string; -}; - -export const CopyLinkButton = ({ url }: CopyLinkButtonProps) => { - const [copied, setCopied] = useState(false); - - const handleCopy = async () => { - try { - await navigator.clipboard.writeText(url); - setCopied(true); - - setTimeout(() => setCopied(false), 500); - } catch (err) { - console.error("Failed to copy URL to clipboard:", err); - } - }; - - return ( - - - - ); -}; diff --git a/ui/components/ui/entities/index.ts b/ui/components/ui/entities/index.ts index bcff63efd9..fb13c99282 100644 --- a/ui/components/ui/entities/index.ts +++ b/ui/components/ui/entities/index.ts @@ -1,4 +1,3 @@ -export * from "./copy-link-button"; export * from "./date-with-time"; export * from "./entity-info-short"; export * from "./get-provider-logo"; diff --git a/ui/lib/iac-utils.ts b/ui/lib/iac-utils.ts new file mode 100644 index 0000000000..ea9ffa47d8 --- /dev/null +++ b/ui/lib/iac-utils.ts @@ -0,0 +1,188 @@ +/** + * Extracts line range from a Finding UID + * Finding UID format: {CheckID}-{resource_name}-{line_range} + * Example: "AVD-AWS-0001-main.tf-10:15" -> "10:15" + * + * @param findingUid - The finding UID + * @returns Line range string or null if not found + */ +export function extractLineRangeFromUid(findingUid: string): string | null { + if (!findingUid) { + return null; + } + + // Split by dash and get the last part (line range) + const parts = findingUid.split("-"); + const lastPart = parts[parts.length - 1]; + + // Check if the last part is a line range in format "number:number" + // This ensures we don't confuse numeric filenames with line ranges + if (/^\d+:\d+$/.test(lastPart)) { + return lastPart; + } + + return null; +} + +/** + * Builds a Git repository URL with file path and line numbers + * Supports GitHub, GitLab, Bitbucket, and generic Git URLs + * + * @param repoUrl - Repository URL (can be HTTPS or git@ format) + * @param filePath - Path to the file in the repository + * @param lineRange - Line range in format "10-15" or "10:15" or "10" + * @returns Complete URL to the file with line numbers, or null if URL cannot be built + */ +export function buildGitFileUrl( + repoUrl: string, + filePath: string, + lineRange: string, +): string | null { + if (!repoUrl || !filePath) { + return null; + } + + try { + // Normalize the repository URL + let normalizedUrl = repoUrl.trim(); + + // Convert git@ format to HTTPS (best effort) + if (normalizedUrl.startsWith("git@")) { + // git@github.com:user/repo.git -> https://github.com/user/repo + normalizedUrl = normalizedUrl + .replace(/^git@/, "https://") + .replace(/\.git$/, "") + .replace(/:([^:]+)$/, "/$1"); // Replace last : with / + } + + // Remove .git suffix if present + normalizedUrl = normalizedUrl.replace(/\.git$/, ""); + + // Parse URL to determine provider + const url = new URL(normalizedUrl); + const hostname = url.hostname.toLowerCase(); + + // Clean up file path (remove leading slashes) + const cleanFilePath = filePath.replace(/^\/+/, ""); + + // Parse line range + const { startLine, endLine } = parseLineRange(lineRange); + + // Build URL based on Git provider + if (hostname.includes("github")) { + return buildGitHubUrl(normalizedUrl, cleanFilePath, startLine, endLine); + } else if (hostname.includes("gitlab")) { + return buildGitLabUrl(normalizedUrl, cleanFilePath, startLine, endLine); + } else if (hostname.includes("bitbucket")) { + return buildBitbucketUrl( + normalizedUrl, + cleanFilePath, + startLine, + endLine, + ); + } else { + // Generic Git provider - try GitHub format as fallback + return buildGitHubUrl(normalizedUrl, cleanFilePath, startLine, endLine); + } + } catch (error) { + console.error("Error building Git file URL:", error); + return null; + } +} + +/** + * Parses line range string into start and end line numbers + */ +function parseLineRange(lineRange: string): { + startLine: number | null; + endLine: number | null; +} { + if (!lineRange || lineRange === "file") { + return { startLine: null, endLine: null }; + } + + // Handle formats: "10-15", "10:15", "10" + // Safe regex: anchored pattern for line numbers only (no ReDoS risk) + // eslint-disable-next-line security/detect-unsafe-regex + const match = lineRange.match(/^(\d+)[-:]?(\d+)?$/); + if (match) { + const startLine = parseInt(match[1], 10); + const endLine = match[2] ? parseInt(match[2], 10) : startLine; + return { startLine, endLine }; + } + + return { startLine: null, endLine: null }; +} + +/** + * Builds GitHub-style URL + * Format: https://github.com/user/repo/blob/main/path/file.tf#L10-L15 + */ +function buildGitHubUrl( + baseUrl: string, + filePath: string, + startLine: number | null, + endLine: number | null, +): string { + // Assume main/master branch for simplicity + const branch = "main"; + let url = `${baseUrl}/blob/${branch}/${filePath}`; + + if (startLine !== null) { + if (endLine !== null && endLine !== startLine) { + url += `#L${startLine}-L${endLine}`; + } else { + url += `#L${startLine}`; + } + } + + return url; +} + +/** + * Builds GitLab-style URL + * Format: https://gitlab.com/user/repo/-/blob/main/path/file.tf#L10-15 + */ +function buildGitLabUrl( + baseUrl: string, + filePath: string, + startLine: number | null, + endLine: number | null, +): string { + const branch = "main"; + let url = `${baseUrl}/-/blob/${branch}/${filePath}`; + + if (startLine !== null) { + if (endLine !== null && endLine !== startLine) { + url += `#L${startLine}-${endLine}`; + } else { + url += `#L${startLine}`; + } + } + + return url; +} + +/** + * Builds Bitbucket-style URL + * Format: https://bitbucket.org/user/repo/src/main/path/file.tf#lines-10:15 + */ +function buildBitbucketUrl( + baseUrl: string, + filePath: string, + startLine: number | null, + endLine: number | null, +): string { + const branch = "main"; + let url = `${baseUrl}/src/${branch}/${filePath}`; + + if (startLine !== null) { + if (endLine !== null && endLine !== startLine) { + url += `#lines-${startLine}:${endLine}`; + } else { + url += `#lines-${startLine}`; + } + } + + return url; +} From 2f61c88f744a072b468df0b03bd4775702a5ef87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20Arroba?= <19954079+cesararroba@users.noreply.github.com> Date: Thu, 6 Nov 2025 09:33:33 +0100 Subject: [PATCH 17/37] chore(github): improve container slack notifications (#9144) --- .github/actions/slack-notification/action.yml | 14 ++++++-------- .../container-release-completed.json | 15 ++++++++++++++- .../slack-messages/container-release-started.json | 15 ++++++++++++++- 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/.github/actions/slack-notification/action.yml b/.github/actions/slack-notification/action.yml index d073af9d53..1427fed3e0 100644 --- a/.github/actions/slack-notification/action.yml +++ b/.github/actions/slack-notification/action.yml @@ -12,7 +12,7 @@ inputs: required: false default: '' step-outcome: - description: 'Outcome of a step to determine status (success/failure) - automatically sets STATUS_EMOJI, STATUS_TEXT, and STATUS_COLOR env vars' + description: 'Outcome of a step to determine status (success/failure) - automatically sets STATUS_TEXT and STATUS_COLOR env vars' required: false default: '' outputs: @@ -27,16 +27,14 @@ runs: shell: bash run: | if [[ "${{ inputs.step-outcome }}" == "success" ]]; then - echo "STATUS_EMOJI=[✓]" >> $GITHUB_ENV - echo "STATUS_TEXT=succeeded" >> $GITHUB_ENV - echo "STATUS_COLOR=6aa84f" >> $GITHUB_ENV + echo "STATUS_TEXT=Completed" >> $GITHUB_ENV + echo "STATUS_COLOR=#6aa84f" >> $GITHUB_ENV elif [[ "${{ inputs.step-outcome }}" == "failure" ]]; then - echo "STATUS_EMOJI=[✗]" >> $GITHUB_ENV - echo "STATUS_TEXT=failed" >> $GITHUB_ENV - echo "STATUS_COLOR=fc3434" >> $GITHUB_ENV + echo "STATUS_TEXT=Failed" >> $GITHUB_ENV + echo "STATUS_COLOR=#fc3434" >> $GITHUB_ENV else # No outcome provided - pending/in progress state - echo "STATUS_COLOR=dbab09" >> $GITHUB_ENV + echo "STATUS_COLOR=#dbab09" >> $GITHUB_ENV fi - name: Send Slack notification (new message) diff --git a/.github/scripts/slack-messages/container-release-completed.json b/.github/scripts/slack-messages/container-release-completed.json index 6158809c1f..c1fc147191 100644 --- a/.github/scripts/slack-messages/container-release-completed.json +++ b/.github/scripts/slack-messages/container-release-completed.json @@ -1,4 +1,17 @@ { "channel": "${{ env.SLACK_CHANNEL_ID }}", - "text": "${{ env.STATUS_EMOJI }} ${{ env.COMPONENT }} container release ${{ env.RELEASE_TAG }} push ${{ env.STATUS_TEXT }} <${{ env.GITHUB_SERVER_URL }}/${{ env.GITHUB_REPOSITORY }}/actions/runs/${{ env.GITHUB_RUN_ID }}|View run>" + "attachments": [ + { + "color": "${{ env.STATUS_COLOR }}", + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "*Status:*\n${{ env.STATUS_TEXT }}\n\n${{ env.COMPONENT }} container release ${{ env.RELEASE_TAG }} push ${{ env.STATUS_TEXT }}\n\n<${{ env.GITHUB_SERVER_URL }}/${{ env.GITHUB_REPOSITORY }}/actions/runs/${{ env.GITHUB_RUN_ID }}|View run>" + } + } + ] + } + ] } diff --git a/.github/scripts/slack-messages/container-release-started.json b/.github/scripts/slack-messages/container-release-started.json index a203fae913..f67129e3ba 100644 --- a/.github/scripts/slack-messages/container-release-started.json +++ b/.github/scripts/slack-messages/container-release-started.json @@ -1,4 +1,17 @@ { "channel": "${{ env.SLACK_CHANNEL_ID }}", - "text": "${{ env.COMPONENT }} container release ${{ env.RELEASE_TAG }} push started... <${{ env.GITHUB_SERVER_URL }}/${{ env.GITHUB_REPOSITORY }}/actions/runs/${{ env.GITHUB_RUN_ID }}|View run>" + "attachments": [ + { + "color": "${{ env.STATUS_COLOR }}", + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "*Status:*\nStarted\n\n${{ env.COMPONENT }} container release ${{ env.RELEASE_TAG }} push started...\n\n<${{ env.GITHUB_SERVER_URL }}/${{ env.GITHUB_REPOSITORY }}/actions/runs/${{ env.GITHUB_RUN_ID }}|View run>" + } + } + ] + } + ] } From 33bb2782f0b31b4632444d91867963903bbf63a1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Nov 2025 10:05:52 +0100 Subject: [PATCH 18/37] chore(deps): bump aws-actions/configure-aws-credentials from 5.0.0 to 5.1.0 (#9130) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/sdk-refresh-aws-services-regions.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sdk-refresh-aws-services-regions.yml b/.github/workflows/sdk-refresh-aws-services-regions.yml index 4df220fc49..884b677294 100644 --- a/.github/workflows/sdk-refresh-aws-services-regions.yml +++ b/.github/workflows/sdk-refresh-aws-services-regions.yml @@ -39,7 +39,7 @@ jobs: run: pip install boto3 - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v5.0.0 + uses: aws-actions/configure-aws-credentials@00943011d9042930efac3dcd3a170e4273319bc8 # v5.1.0 with: aws-region: ${{ env.AWS_REGION }} role-to-assume: ${{ secrets.DEV_IAM_ROLE_ARN }} From 66590f2128a3501a116a0ab15e5bb53a6e7258da Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Nov 2025 10:07:27 +0100 Subject: [PATCH 19/37] chore(deps): bump github/codeql-action from 3.30.5 to 4.31.2 (#9131) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/api-codeql.yml | 4 ++-- .github/workflows/sdk-codeql.yml | 4 ++-- .github/workflows/ui-codeql.yml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/api-codeql.yml b/.github/workflows/api-codeql.yml index f01e969134..16ea82538e 100644 --- a/.github/workflows/api-codeql.yml +++ b/.github/workflows/api-codeql.yml @@ -45,12 +45,12 @@ jobs: uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Initialize CodeQL - uses: github/codeql-action/init@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5 + uses: github/codeql-action/init@0499de31b99561a6d14a36a5f662c2a54f91beee # v4.31.2 with: languages: ${{ matrix.language }} config-file: ./.github/codeql/api-codeql-config.yml - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5 + uses: github/codeql-action/analyze@0499de31b99561a6d14a36a5f662c2a54f91beee # v4.31.2 with: category: '/language:${{ matrix.language }}' diff --git a/.github/workflows/sdk-codeql.yml b/.github/workflows/sdk-codeql.yml index e092b8ae1a..590ba52d34 100644 --- a/.github/workflows/sdk-codeql.yml +++ b/.github/workflows/sdk-codeql.yml @@ -52,12 +52,12 @@ jobs: uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Initialize CodeQL - uses: github/codeql-action/init@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5 + uses: github/codeql-action/init@0499de31b99561a6d14a36a5f662c2a54f91beee # v4.31.2 with: languages: ${{ matrix.language }} config-file: ./.github/codeql/sdk-codeql-config.yml - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5 + uses: github/codeql-action/analyze@0499de31b99561a6d14a36a5f662c2a54f91beee # v4.31.2 with: category: '/language:${{ matrix.language }}' diff --git a/.github/workflows/ui-codeql.yml b/.github/workflows/ui-codeql.yml index 798aa39636..2b55cf673c 100644 --- a/.github/workflows/ui-codeql.yml +++ b/.github/workflows/ui-codeql.yml @@ -48,12 +48,12 @@ jobs: uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Initialize CodeQL - uses: github/codeql-action/init@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5 + uses: github/codeql-action/init@0499de31b99561a6d14a36a5f662c2a54f91beee # v4.31.2 with: languages: ${{ matrix.language }} config-file: ./.github/codeql/ui-codeql-config.yml - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5 + uses: github/codeql-action/analyze@0499de31b99561a6d14a36a5f662c2a54f91beee # v4.31.2 with: category: '/language:${{ matrix.language }}' From e0260b91e6e7978ebfd9f891200b10a913cd3281 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Nov 2025 10:08:38 +0100 Subject: [PATCH 20/37] chore(deps): bump peter-evans/create-or-update-comment from 4.0.0 to 5.0.0 (#9133) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/pr-check-changelog.yml | 2 +- .github/workflows/pr-conflict-checker.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-check-changelog.yml b/.github/workflows/pr-check-changelog.yml index f8de212e2a..d1a3220402 100644 --- a/.github/workflows/pr-check-changelog.yml +++ b/.github/workflows/pr-check-changelog.yml @@ -83,7 +83,7 @@ jobs: - name: Update PR comment with changelog status if: github.event.pull_request.head.repo.full_name == github.repository - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0 with: issue-number: ${{ github.event.pull_request.number }} comment-id: ${{ steps.find-comment.outputs.comment-id }} diff --git a/.github/workflows/pr-conflict-checker.yml b/.github/workflows/pr-conflict-checker.yml index 3761d252a3..c46fafc2d0 100644 --- a/.github/workflows/pr-conflict-checker.yml +++ b/.github/workflows/pr-conflict-checker.yml @@ -97,7 +97,7 @@ jobs: body-includes: '' - name: Create or update comment - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0 with: comment-id: ${{ steps.find-comment.outputs.comment-id }} issue-number: ${{ github.event.pull_request.number }} From 1a4ae33235ba882e65e398fb6d2e20fa563d3f9b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Nov 2025 10:09:29 +0100 Subject: [PATCH 21/37] chore(deps): bump softprops/action-gh-release from 2.3.3 to 2.4.1 (#9134) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/prepare-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 4fdfcbbf07..ae039bd5a6 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -382,7 +382,7 @@ jobs: no-changelog - name: Create draft release - uses: softprops/action-gh-release@6cbd405e2c4e67a21c47fa9e383d020e4e28b836 # v2.3.3 + uses: softprops/action-gh-release@6da8fa9354ddfdc4aeace5fc48d7f679b5214090 # v2.4.1 with: tag_name: ${{ env.PROWLER_VERSION }} name: Prowler ${{ env.PROWLER_VERSION }} From 3de8159de98abc2e6914df2cf03781203c85fa1e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Nov 2025 10:10:29 +0100 Subject: [PATCH 22/37] chore(deps): bump actions/setup-node from 5.0.0 to 6.0.0 (#9135) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ui-e2e-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ui-e2e-tests.yml b/.github/workflows/ui-e2e-tests.yml index 3339349943..ed3b692819 100644 --- a/.github/workflows/ui-e2e-tests.yml +++ b/.github/workflows/ui-e2e-tests.yml @@ -75,7 +75,7 @@ jobs: echo "All database fixtures loaded successfully!" ' - name: Setup Node.js environment - uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version: '20.x' cache: 'npm' From ace2b88c07f5e1552ad40141cb99f15cec0b9827 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Nov 2025 10:11:30 +0100 Subject: [PATCH 23/37] chore(deps): bump sorenlouv/backport-github-action from 9.5.1 to 10.2.0 (#9132) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/backport.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/backport.yml b/.github/workflows/backport.yml index f8df9a9abc..974d919fc6 100644 --- a/.github/workflows/backport.yml +++ b/.github/workflows/backport.yml @@ -38,7 +38,7 @@ jobs: - name: Backport PR if: steps.label_check.outputs.label_check == 'success' - uses: sorenlouv/backport-github-action@ad888e978060bc1b2798690dd9d03c4036560947 # v9.5.1 + uses: sorenlouv/backport-github-action@516854e7c9f962b9939085c9a92ea28411d1ae90 # v10.2.0 with: github_token: ${{ secrets.PROWLER_BOT_ACCESS_TOKEN }} auto_backport_label_prefix: ${{ env.BACKPORT_LABEL_PREFIX }} From 54294c862b20d23b5ebccce66ba69753b3849626 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Nov 2025 10:11:46 +0100 Subject: [PATCH 24/37] chore(deps): bump trufflesecurity/trufflehog from 3.90.11 to 3.90.12 (#9128) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/find-secrets.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/find-secrets.yml b/.github/workflows/find-secrets.yml index 6428cf8f08..80b49e3279 100644 --- a/.github/workflows/find-secrets.yml +++ b/.github/workflows/find-secrets.yml @@ -28,6 +28,6 @@ jobs: fetch-depth: 0 - name: Scan for secrets with TruffleHog - uses: trufflesecurity/trufflehog@ad6fc8fb446b8fafbf7ea8193d2d6bfd42f45690 # v3.90.11 + uses: trufflesecurity/trufflehog@b84c3d14d189e16da175e2c27fa8136603783ffc # v3.90.12 with: extra_args: '--results=verified,unknown' From 2e5f17538dd3a29c69d72946067d8473efa6541d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Nov 2025 10:12:17 +0100 Subject: [PATCH 25/37] chore(deps): bump agenthunt/conventional-commit-checker-action from 2.0.0 to 2.0.1 (#9127) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/conventional-commit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/conventional-commit.yml b/.github/workflows/conventional-commit.yml index c5ba446edf..58e1653b74 100644 --- a/.github/workflows/conventional-commit.yml +++ b/.github/workflows/conventional-commit.yml @@ -26,6 +26,6 @@ jobs: steps: - name: Check PR title format - uses: agenthunt/conventional-commit-checker-action@9e552d650d0e205553ec7792d447929fc78e012b # v2.0.0 + uses: agenthunt/conventional-commit-checker-action@f1823f632e95a64547566dcd2c7da920e67117ad # v2.0.1 with: pr-title-regex: '^(feat|fix|docs|style|refactor|perf|test|chore|build|ci|revert)(\([^)]+\))?!?: .+' From e038b2fd111fd11c58dc16c2c73900d1b694fb47 Mon Sep 17 00:00:00 2001 From: Sergio Garcia Date: Thu, 6 Nov 2025 05:46:21 -0500 Subject: [PATCH 26/37] chore(sdk): add validation for invalid checks, services, and categories (#8971) Co-authored-by: Andoni Alonso <14891798+andoniaf@users.noreply.github.com> --- prowler/CHANGELOG.md | 1 + prowler/lib/check/checks_loader.py | 66 +++++++++++- tests/lib/check/check_loader_test.py | 154 +++++++++++++++++++++++++-- 3 files changed, 214 insertions(+), 7 deletions(-) diff --git a/prowler/CHANGELOG.md b/prowler/CHANGELOG.md index 334aea97cd..fd34a5e1af 100644 --- a/prowler/CHANGELOG.md +++ b/prowler/CHANGELOG.md @@ -14,6 +14,7 @@ All notable changes to the **Prowler SDK** are documented in this file. - C5 compliance framework for Azure provider [(#9081)](https://github.com/prowler-cloud/prowler/pull/9081) - C5 compliance framework for the GCP provider [(#9097)](https://github.com/prowler-cloud/prowler/pull/9097) - HIPAA compliance framework for the GCP provider [(#8955)](https://github.com/prowler-cloud/prowler/pull/8955) +- Added validation for invalid checks, services, and categories in `load_checks_to_execute` function [(#8971)](https://github.com/prowler-cloud/prowler/pull/8971) ### Changed - Update AWS Direct Connect service metadata to new format [(#8855)](https://github.com/prowler-cloud/prowler/pull/8855) diff --git a/prowler/lib/check/checks_loader.py b/prowler/lib/check/checks_loader.py index c03034b0e4..dab5535d77 100644 --- a/prowler/lib/check/checks_loader.py +++ b/prowler/lib/check/checks_loader.py @@ -1,3 +1,5 @@ +import sys + from colorama import Fore, Style from prowler.lib.check.check import parse_checks_from_file @@ -57,8 +59,24 @@ def load_checks_to_execute( # Handle if there are checks passed using -c/--checks if check_list: + # Validate that all checks exist + available_checks = set(bulk_checks_metadata.keys()) + available_checks.update(check_aliases.keys()) + invalid_checks = [] for check_name in check_list: - checks_to_execute.add(check_name) + if check_name not in available_checks: + invalid_checks.append(check_name) + else: + checks_to_execute.add(check_name) + + if invalid_checks: + logger.critical( + f"Invalid check(s) specified: {', '.join(invalid_checks)}" + ) + logger.critical( + f"Please provide valid check names. Use 'prowler {provider} --list-checks' to see available checks." + ) + sys.exit(1) # Handle if there are some severities passed using --severity elif severities: @@ -66,6 +84,23 @@ def load_checks_to_execute( checks_to_execute.update(check_severities[severity]) if service_list: + # Validate that all services exist + available_services = set() + for metadata in bulk_checks_metadata.values(): + available_services.add(metadata.ServiceName) + + invalid_services = [ + s for s in service_list if s not in available_services + ] + if invalid_services: + logger.critical( + f"Invalid service(s) specified: {', '.join(invalid_services)}" + ) + logger.critical( + f"Please provide valid service names. Use 'prowler {provider} --list-services' to see available services." + ) + sys.exit(1) + checks_from_services = set() for service in service_list: service_checks = CheckMetadata.list( @@ -81,6 +116,21 @@ def load_checks_to_execute( # Handle if there are services passed using -s/--services elif service_list: + # Validate that all services exist + available_services = set() + for metadata in bulk_checks_metadata.values(): + available_services.add(metadata.ServiceName) + + invalid_services = [s for s in service_list if s not in available_services] + if invalid_services: + logger.critical( + f"Invalid service(s) specified: {', '.join(invalid_services)}" + ) + logger.critical( + f"Please provide valid service names. Use 'prowler {provider} --list-services' to see available services." + ) + sys.exit(1) + for service in service_list: checks_to_execute.update( CheckMetadata.list( @@ -103,6 +153,20 @@ def load_checks_to_execute( # Handle if there are categories passed using --categories elif categories: + # Validate that all categories exist + available_categories = set(check_categories.keys()) + invalid_categories = [ + c for c in categories if c not in available_categories + ] + if invalid_categories: + logger.critical( + f"Invalid category(ies) specified: {', '.join(invalid_categories)}" + ) + logger.critical( + f"Please provide valid category names. Use 'prowler {provider} --list-categories' to see available categories." + ) + sys.exit(1) + for category in categories: checks_to_execute.update(check_categories[category]) diff --git a/tests/lib/check/check_loader_test.py b/tests/lib/check/check_loader_test.py index 12e9b3e547..740ed67844 100644 --- a/tests/lib/check/check_loader_test.py +++ b/tests/lib/check/check_loader_test.py @@ -1,3 +1,4 @@ +import pytest from mock import patch from prowler.lib.check.checks_loader import ( @@ -190,18 +191,22 @@ class TestCheckLoader: def test_load_checks_to_execute_with_severities_and_services_not_within_severity( self, ): + """Test that service not in metadata causes sys.exit(1) when used with severities""" bulk_checks_metatada = { S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME: self.get_custom_check_s3_metadata() } service_list = ["ec2"] severities = [S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_SEVERITY] - assert set() == load_checks_to_execute( - bulk_checks_metadata=bulk_checks_metatada, - service_list=service_list, - severities=severities, - provider=self.provider, - ) + # ec2 service doesn't exist in the metadata, so it should exit with error + with pytest.raises(SystemExit) as exc_info: + load_checks_to_execute( + bulk_checks_metadata=bulk_checks_metatada, + service_list=service_list, + severities=severities, + provider=self.provider, + ) + assert exc_info.value.code == 1 def test_load_checks_to_execute_with_checks_file( self, @@ -382,3 +387,140 @@ class TestCheckLoader: categories=categories, provider=self.provider, ) + + def test_load_checks_to_execute_with_invalid_check(self): + """Test that invalid check names cause sys.exit(1)""" + bulk_checks_metatada = { + S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME: self.get_custom_check_s3_metadata() + } + check_list = ["invalid_check_name"] + + with pytest.raises(SystemExit) as exc_info: + load_checks_to_execute( + bulk_checks_metadata=bulk_checks_metatada, + check_list=check_list, + provider=self.provider, + ) + assert exc_info.value.code == 1 + + def test_load_checks_to_execute_with_multiple_invalid_checks(self): + """Test that multiple invalid check names cause sys.exit(1)""" + bulk_checks_metatada = { + S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME: self.get_custom_check_s3_metadata() + } + check_list = ["invalid_check_1", "invalid_check_2", "invalid_check_3"] + + with pytest.raises(SystemExit) as exc_info: + load_checks_to_execute( + bulk_checks_metadata=bulk_checks_metatada, + check_list=check_list, + provider=self.provider, + ) + assert exc_info.value.code == 1 + + def test_load_checks_to_execute_with_mixed_valid_invalid_checks(self): + """Test that mix of valid and invalid checks cause sys.exit(1)""" + bulk_checks_metatada = { + S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME: self.get_custom_check_s3_metadata() + } + check_list = [S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME, "invalid_check"] + + with pytest.raises(SystemExit) as exc_info: + load_checks_to_execute( + bulk_checks_metadata=bulk_checks_metatada, + check_list=check_list, + provider=self.provider, + ) + assert exc_info.value.code == 1 + + def test_load_checks_to_execute_with_invalid_service(self): + """Test that invalid service names cause sys.exit(1)""" + bulk_checks_metatada = { + S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME: self.get_custom_check_s3_metadata() + } + service_list = ["invalid_service"] + + with pytest.raises(SystemExit) as exc_info: + load_checks_to_execute( + bulk_checks_metadata=bulk_checks_metatada, + service_list=service_list, + provider=self.provider, + ) + assert exc_info.value.code == 1 + + def test_load_checks_to_execute_with_invalid_service_and_severity(self): + """Test that invalid service names with severity cause sys.exit(1)""" + bulk_checks_metatada = { + S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME: self.get_custom_check_s3_metadata() + } + service_list = ["invalid_service"] + severities = [S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_SEVERITY] + + with pytest.raises(SystemExit) as exc_info: + load_checks_to_execute( + bulk_checks_metadata=bulk_checks_metatada, + service_list=service_list, + severities=severities, + provider=self.provider, + ) + assert exc_info.value.code == 1 + + def test_load_checks_to_execute_with_multiple_invalid_services(self): + """Test that multiple invalid service names cause sys.exit(1)""" + bulk_checks_metatada = { + S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME: self.get_custom_check_s3_metadata() + } + service_list = ["invalid_service_1", "invalid_service_2"] + + with pytest.raises(SystemExit) as exc_info: + load_checks_to_execute( + bulk_checks_metadata=bulk_checks_metatada, + service_list=service_list, + provider=self.provider, + ) + assert exc_info.value.code == 1 + + def test_load_checks_to_execute_with_invalid_category(self): + """Test that invalid category names cause sys.exit(1)""" + bulk_checks_metatada = { + S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME: self.get_custom_check_s3_metadata() + } + categories = {"invalid_category"} + + with pytest.raises(SystemExit) as exc_info: + load_checks_to_execute( + bulk_checks_metadata=bulk_checks_metatada, + categories=categories, + provider=self.provider, + ) + assert exc_info.value.code == 1 + + def test_load_checks_to_execute_with_multiple_invalid_categories(self): + """Test that multiple invalid category names cause sys.exit(1)""" + bulk_checks_metatada = { + S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME: self.get_custom_check_s3_metadata() + } + categories = {"invalid_category_1", "invalid_category_2"} + + with pytest.raises(SystemExit) as exc_info: + load_checks_to_execute( + bulk_checks_metadata=bulk_checks_metatada, + categories=categories, + provider=self.provider, + ) + assert exc_info.value.code == 1 + + def test_load_checks_to_execute_with_mixed_valid_invalid_categories(self): + """Test that mix of valid and invalid categories cause sys.exit(1)""" + bulk_checks_metatada = { + S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME: self.get_custom_check_s3_metadata() + } + categories = {"internet-exposed", "invalid_category"} + + with pytest.raises(SystemExit) as exc_info: + load_checks_to_execute( + bulk_checks_metadata=bulk_checks_metatada, + categories=categories, + provider=self.provider, + ) + assert exc_info.value.code == 1 From 8ab77b7dbaf4fae9077548d41c3e8ae55e054c48 Mon Sep 17 00:00:00 2001 From: Hugo Pereira Brito <101209179+HugoPBrito@users.noreply.github.com> Date: Thu, 6 Nov 2025 12:37:49 +0100 Subject: [PATCH 27/37] fix(gcp): check `check_name` has no `resource_name` error (#9169) --- prowler/CHANGELOG.md | 3 +++ prowler/lib/check/models.py | 11 ++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/prowler/CHANGELOG.md b/prowler/CHANGELOG.md index fd34a5e1af..7d9f2a9857 100644 --- a/prowler/CHANGELOG.md +++ b/prowler/CHANGELOG.md @@ -36,6 +36,9 @@ All notable changes to the **Prowler SDK** are documented in this file. - Update AWS CodeArtifact service metadata to new format [(#8850)](https://github.com/prowler-cloud/prowler/pull/8850) - Rename OCI provider to oraclecloud with oci alias [(#9126)](https://github.com/prowler-cloud/prowler/pull/9126) +### Fixed +- Check `check_name` has no `resource_name` error for GCP provider [(#9169)](https://github.com/prowler-cloud/prowler/pull/9169) + --- ## [v5.13.1] (Prowler UNRELEASED) diff --git a/prowler/lib/check/models.py b/prowler/lib/check/models.py index 2398dc8267..37150f38db 100644 --- a/prowler/lib/check/models.py +++ b/prowler/lib/check/models.py @@ -588,8 +588,17 @@ class Check_Report_GCP(Check_Report): or getattr(resource, "name", None) or "" ) + + # Prefer the explicit resource_name argument, otherwise look for a name attribute on the resource + resource_name_candidate = resource_name or getattr(resource, "name", None) + if not resource_name_candidate and isinstance(resource, dict): + # Some callers pass a dict, so fall back to the dict entry if available + resource_name_candidate = resource.get("name") + if isinstance(resource_name_candidate, str): + # Trim whitespace so empty strings collapse to the default + resource_name_candidate = resource_name_candidate.strip() self.resource_name = ( - resource_name or getattr(resource, "name", "") or "GCP Project" + str(resource_name_candidate) if resource_name_candidate else "GCP Project" ) self.project_id = project_id or getattr(resource, "project_id", "") self.location = ( From 788113b539153cd472acb55d2a0ad68e2e53cf60 Mon Sep 17 00:00:00 2001 From: Hugo Pereira Brito <101209179+HugoPBrito@users.noreply.github.com> Date: Thu, 6 Nov 2025 12:57:51 +0100 Subject: [PATCH 28/37] fix: changelog (#9179) --- prowler/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/prowler/CHANGELOG.md b/prowler/CHANGELOG.md index 7d9f2a9857..b4224a563b 100644 --- a/prowler/CHANGELOG.md +++ b/prowler/CHANGELOG.md @@ -36,6 +36,10 @@ All notable changes to the **Prowler SDK** are documented in this file. - Update AWS CodeArtifact service metadata to new format [(#8850)](https://github.com/prowler-cloud/prowler/pull/8850) - Rename OCI provider to oraclecloud with oci alias [(#9126)](https://github.com/prowler-cloud/prowler/pull/9126) +--- + +## [v5.13.2] (Prowler UNRELEASED) + ### Fixed - Check `check_name` has no `resource_name` error for GCP provider [(#9169)](https://github.com/prowler-cloud/prowler/pull/9169) From edfef51e7a85f67f85e2c5db4dd204f755952f94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20Mart=C3=ADn?= Date: Thu, 6 Nov 2025 13:06:59 +0100 Subject: [PATCH 29/37] feat(compliance): add naming and visual improvements (#9145) --- prowler/CHANGELOG.md | 1 + prowler/compliance/aws/ens_rd2022_aws.json | 2 +- prowler/compliance/aws/nis2_aws.json | 2 +- prowler/compliance/azure/ens_rd2022_azure.json | 2 +- prowler/compliance/azure/nis2_azure.json | 2 +- prowler/compliance/gcp/ens_rd2022_gcp.json | 2 +- prowler/compliance/gcp/nis2_gcp.json | 2 +- tests/lib/outputs/compliance/ens/ens_aws_test.py | 2 +- tests/lib/outputs/compliance/ens/ens_azure_test.py | 2 +- tests/lib/outputs/compliance/ens/ens_gcp_test.py | 2 +- tests/lib/outputs/compliance/fixtures.py | 6 +++--- 11 files changed, 13 insertions(+), 12 deletions(-) diff --git a/prowler/CHANGELOG.md b/prowler/CHANGELOG.md index b4224a563b..b7691574b0 100644 --- a/prowler/CHANGELOG.md +++ b/prowler/CHANGELOG.md @@ -14,6 +14,7 @@ All notable changes to the **Prowler SDK** are documented in this file. - C5 compliance framework for Azure provider [(#9081)](https://github.com/prowler-cloud/prowler/pull/9081) - C5 compliance framework for the GCP provider [(#9097)](https://github.com/prowler-cloud/prowler/pull/9097) - HIPAA compliance framework for the GCP provider [(#8955)](https://github.com/prowler-cloud/prowler/pull/8955) +- Add multiple compliance improvements [(#9145)](https://github.com/prowler-cloud/prowler/pull/9145) - Added validation for invalid checks, services, and categories in `load_checks_to_execute` function [(#8971)](https://github.com/prowler-cloud/prowler/pull/8971) ### Changed diff --git a/prowler/compliance/aws/ens_rd2022_aws.json b/prowler/compliance/aws/ens_rd2022_aws.json index 5d713c2d1d..1d25aeb3b3 100644 --- a/prowler/compliance/aws/ens_rd2022_aws.json +++ b/prowler/compliance/aws/ens_rd2022_aws.json @@ -1,6 +1,6 @@ { "Framework": "ENS", - "Name": "ENS RD 311/2022", + "Name": "ENS RD 311/2022 - Categoría Alta", "Version": "RD2022", "Provider": "AWS", "Description": "The accreditation scheme of the ENS (National Security Scheme) has been developed by the Ministry of Finance and Public Administrations and the CCN (National Cryptological Center). This includes the basic principles and minimum requirements necessary for the adequate protection of information.", diff --git a/prowler/compliance/aws/nis2_aws.json b/prowler/compliance/aws/nis2_aws.json index c9dcb37390..dc6b75657f 100644 --- a/prowler/compliance/aws/nis2_aws.json +++ b/prowler/compliance/aws/nis2_aws.json @@ -1,6 +1,6 @@ { "Framework": "NIS2", - "Name": "Network and Information Security Directive (Directive (EU) 2022/2555)", + "Name": "NIS2 - Network and Information Security Directive (Directive (EU) 2022/2555)", "Version": "", "Provider": "AWS", "Description": "ANNEX to the Commission Implementing Regulation laying down rules for the application of Directive (EU) 2022/2555 as regards technical and methodological requirements of cybersecurity risk-management measures and further specification of the cases in which an incident is considered to be significant with regard to DNS service providers, TLD name registries, cloud computing service providers, data centre service providers, content delivery network providers, managed service providers, managed security service providers, providers of online market places, of online search engines and of social networking services platforms, and trust service providers", diff --git a/prowler/compliance/azure/ens_rd2022_azure.json b/prowler/compliance/azure/ens_rd2022_azure.json index 9c5fd543cd..5078c6567e 100644 --- a/prowler/compliance/azure/ens_rd2022_azure.json +++ b/prowler/compliance/azure/ens_rd2022_azure.json @@ -1,6 +1,6 @@ { "Framework": "ENS", - "Name": "ENS RD 311/2022", + "Name": "ENS RD 311/2022 - Categoría Alta", "Version": "RD2022", "Provider": "AZURE", "Description": "The accreditation scheme of the ENS (National Security Scheme) has been developed by the Ministry of Finance and Public Administrations and the CCN (National Cryptological Center). This includes the basic principles and minimum requirements necessary for the adequate protection of information.", diff --git a/prowler/compliance/azure/nis2_azure.json b/prowler/compliance/azure/nis2_azure.json index 052ee1e449..5c48c22f6b 100644 --- a/prowler/compliance/azure/nis2_azure.json +++ b/prowler/compliance/azure/nis2_azure.json @@ -1,6 +1,6 @@ { "Framework": "NIS2", - "Name": "Network and Information Security Directive (Directive (EU) 2022/2555)", + "Name": "NIS2 - Network and Information Security Directive (Directive (EU) 2022/2555)", "Version": "", "Provider": "Azure", "Description": "ANNEX to the Commission Implementing Regulation laying down rules for the application of Directive (EU) 2022/2555 as regards technical and methodological requirements of cybersecurity risk-management measures and further specification of the cases in which an incident is considered to be significant with regard to DNS service providers, TLD name registries, cloud computing service providers, data centre service providers, content delivery network providers, managed service providers, managed security service providers, providers of online market places, of online search engines and of social networking services platforms, and trust service providers", diff --git a/prowler/compliance/gcp/ens_rd2022_gcp.json b/prowler/compliance/gcp/ens_rd2022_gcp.json index cc0a1bfcd4..8315123f79 100644 --- a/prowler/compliance/gcp/ens_rd2022_gcp.json +++ b/prowler/compliance/gcp/ens_rd2022_gcp.json @@ -1,6 +1,6 @@ { "Framework": "ENS", - "Name": "ENS RD 311/2022", + "Name": "ENS RD 311/2022 - Categoría Alta", "Version": "RD2022", "Provider": "GCP", "Description": "The accreditation scheme of the ENS (National Security Scheme) has been developed by the Ministry of Finance and Public Administrations and the CCN (National Cryptological Center). This includes the basic principles and minimum requirements necessary for the adequate protection of information.", diff --git a/prowler/compliance/gcp/nis2_gcp.json b/prowler/compliance/gcp/nis2_gcp.json index 9768b2dd3d..14d5477dc0 100644 --- a/prowler/compliance/gcp/nis2_gcp.json +++ b/prowler/compliance/gcp/nis2_gcp.json @@ -1,6 +1,6 @@ { "Framework": "NIS2", - "Name": "Network and Information Security Directive (Directive (EU) 2022/2555)", + "Name": "NIS2 - Network and Information Security Directive (Directive (EU) 2022/2555)", "Version": "", "Provider": "GCP", "Description": "ANNEX to the Commission Implementing Regulation laying down rules for the application of Directive (EU) 2022/2555 as regards technical and methodological requirements of cybersecurity risk-management measures and further specification of the cases in which an incident is considered to be significant with regard to DNS service providers, TLD name registries, cloud computing service providers, data centre service providers, content delivery network providers, managed service providers, managed security service providers, providers of online market places, of online search engines and of social networking services platforms, and trust service providers", diff --git a/tests/lib/outputs/compliance/ens/ens_aws_test.py b/tests/lib/outputs/compliance/ens/ens_aws_test.py index 9252b6d8c0..97d45c74c6 100644 --- a/tests/lib/outputs/compliance/ens/ens_aws_test.py +++ b/tests/lib/outputs/compliance/ens/ens_aws_test.py @@ -135,5 +135,5 @@ class TestAWSENS: mock_file.seek(0) content = mock_file.read() - expected_csv = f"PROVIDER;DESCRIPTION;ACCOUNTID;REGION;ASSESSMENTDATE;REQUIREMENTS_ID;REQUIREMENTS_DESCRIPTION;REQUIREMENTS_ATTRIBUTES_IDGRUPOCONTROL;REQUIREMENTS_ATTRIBUTES_MARCO;REQUIREMENTS_ATTRIBUTES_CATEGORIA;REQUIREMENTS_ATTRIBUTES_DESCRIPCIONCONTROL;REQUIREMENTS_ATTRIBUTES_NIVEL;REQUIREMENTS_ATTRIBUTES_TIPO;REQUIREMENTS_ATTRIBUTES_DIMENSIONES;REQUIREMENTS_ATTRIBUTES_MODOEJECUCION;REQUIREMENTS_ATTRIBUTES_DEPENDENCIAS;STATUS;STATUSEXTENDED;RESOURCEID;CHECKID;MUTED;RESOURCENAME;FRAMEWORK;NAME\r\naws;The accreditation scheme of the ENS (National Security Scheme) has been developed by the Ministry of Finance and Public Administrations and the CCN (National Cryptological Center). This includes the basic principles and minimum requirements necessary for the adequate protection of information.;123456789012;eu-west-1;{datetime.now()};op.exp.8.aws.ct.3;Registro de actividad;op.exp.8;operacional;explotación;Habilitar la validación de archivos en todos los trails, evitando así que estos se vean modificados o eliminados.;alto;requisito;trazabilidad;automático;;PASS;;;service_test_check_id;False;;ENS;ENS RD 311/2022\r\naws;The accreditation scheme of the ENS (National Security Scheme) has been developed by the Ministry of Finance and Public Administrations and the CCN (National Cryptological Center). This includes the basic principles and minimum requirements necessary for the adequate protection of information.;;;{datetime.now()};op.exp.8.aws.ct.4;Registro de actividad;op.exp.8;operacional;explotación;Habilitar la validación de archivos en todos los trails, evitando así que estos se vean modificados o eliminados.;alto;requisito;trazabilidad;automático;;MANUAL;Manual check;manual_check;manual;False;Manual check;ENS;ENS RD 311/2022\r\n" + expected_csv = f"PROVIDER;DESCRIPTION;ACCOUNTID;REGION;ASSESSMENTDATE;REQUIREMENTS_ID;REQUIREMENTS_DESCRIPTION;REQUIREMENTS_ATTRIBUTES_IDGRUPOCONTROL;REQUIREMENTS_ATTRIBUTES_MARCO;REQUIREMENTS_ATTRIBUTES_CATEGORIA;REQUIREMENTS_ATTRIBUTES_DESCRIPCIONCONTROL;REQUIREMENTS_ATTRIBUTES_NIVEL;REQUIREMENTS_ATTRIBUTES_TIPO;REQUIREMENTS_ATTRIBUTES_DIMENSIONES;REQUIREMENTS_ATTRIBUTES_MODOEJECUCION;REQUIREMENTS_ATTRIBUTES_DEPENDENCIAS;STATUS;STATUSEXTENDED;RESOURCEID;CHECKID;MUTED;RESOURCENAME;FRAMEWORK;NAME\r\naws;The accreditation scheme of the ENS (National Security Scheme) has been developed by the Ministry of Finance and Public Administrations and the CCN (National Cryptological Center). This includes the basic principles and minimum requirements necessary for the adequate protection of information.;123456789012;eu-west-1;{datetime.now()};op.exp.8.aws.ct.3;Registro de actividad;op.exp.8;operacional;explotación;Habilitar la validación de archivos en todos los trails, evitando así que estos se vean modificados o eliminados.;alto;requisito;trazabilidad;automático;;PASS;;;service_test_check_id;False;;ENS;ENS RD 311/2022 - Categoría Alta\r\naws;The accreditation scheme of the ENS (National Security Scheme) has been developed by the Ministry of Finance and Public Administrations and the CCN (National Cryptological Center). This includes the basic principles and minimum requirements necessary for the adequate protection of information.;;;{datetime.now()};op.exp.8.aws.ct.4;Registro de actividad;op.exp.8;operacional;explotación;Habilitar la validación de archivos en todos los trails, evitando así que estos se vean modificados o eliminados.;alto;requisito;trazabilidad;automático;;MANUAL;Manual check;manual_check;manual;False;Manual check;ENS;ENS RD 311/2022 - Categoría Alta\r\n" assert content == expected_csv diff --git a/tests/lib/outputs/compliance/ens/ens_azure_test.py b/tests/lib/outputs/compliance/ens/ens_azure_test.py index 8923f45547..50538976da 100644 --- a/tests/lib/outputs/compliance/ens/ens_azure_test.py +++ b/tests/lib/outputs/compliance/ens/ens_azure_test.py @@ -144,6 +144,6 @@ class TestAzureENS: mock_file.seek(0) content = mock_file.read() - expected_csv = f"PROVIDER;DESCRIPTION;SUBSCRIPTIONID;LOCATION;ASSESSMENTDATE;REQUIREMENTS_ID;REQUIREMENTS_DESCRIPTION;REQUIREMENTS_ATTRIBUTES_IDGRUPOCONTROL;REQUIREMENTS_ATTRIBUTES_MARCO;REQUIREMENTS_ATTRIBUTES_CATEGORIA;REQUIREMENTS_ATTRIBUTES_DESCRIPCIONCONTROL;REQUIREMENTS_ATTRIBUTES_NIVEL;REQUIREMENTS_ATTRIBUTES_TIPO;REQUIREMENTS_ATTRIBUTES_DIMENSIONES;REQUIREMENTS_ATTRIBUTES_MODOEJECUCION;REQUIREMENTS_ATTRIBUTES_DEPENDENCIAS;STATUS;STATUSEXTENDED;RESOURCEID;CHECKID;MUTED;RESOURCENAME;FRAMEWORK;NAME\r\nazure;The accreditation scheme of the ENS (National Security Scheme) has been developed by the Ministry of Finance and Public Administrations and the CCN (National Cryptological Center). This includes the basic principles and minimum requirements necessary for the adequate protection of information.;123456789012;global;{datetime.now()};op.exp.8.azure.ct.3;Registro de actividad;op.exp.8;operacional;explotación;Habilitar la validación de archivos en todos los trails, evitando así que estos se vean modificados o eliminados.;alto;requisito;trazabilidad;automático;;PASS;;;service_test_check_id;False;;ENS;ENS RD 311/2022\r\nazure;The accreditation scheme of the ENS (National Security Scheme) has been developed by the Ministry of Finance and Public Administrations and the CCN (National Cryptological Center). This includes the basic principles and minimum requirements necessary for the adequate protection of information.;;;{datetime.now()};op.exp.8.azure.ct.4;Registro de actividad;op.exp.8;operacional;explotación;Habilitar la validación de archivos en todos los trails, evitando así que estos se vean modificados o eliminados.;alto;requisito;trazabilidad;automático;;MANUAL;Manual check;manual_check;manual;False;Manual check;ENS;ENS RD 311/2022\r\n" + expected_csv = f"PROVIDER;DESCRIPTION;SUBSCRIPTIONID;LOCATION;ASSESSMENTDATE;REQUIREMENTS_ID;REQUIREMENTS_DESCRIPTION;REQUIREMENTS_ATTRIBUTES_IDGRUPOCONTROL;REQUIREMENTS_ATTRIBUTES_MARCO;REQUIREMENTS_ATTRIBUTES_CATEGORIA;REQUIREMENTS_ATTRIBUTES_DESCRIPCIONCONTROL;REQUIREMENTS_ATTRIBUTES_NIVEL;REQUIREMENTS_ATTRIBUTES_TIPO;REQUIREMENTS_ATTRIBUTES_DIMENSIONES;REQUIREMENTS_ATTRIBUTES_MODOEJECUCION;REQUIREMENTS_ATTRIBUTES_DEPENDENCIAS;STATUS;STATUSEXTENDED;RESOURCEID;CHECKID;MUTED;RESOURCENAME;FRAMEWORK;NAME\r\nazure;The accreditation scheme of the ENS (National Security Scheme) has been developed by the Ministry of Finance and Public Administrations and the CCN (National Cryptological Center). This includes the basic principles and minimum requirements necessary for the adequate protection of information.;123456789012;global;{datetime.now()};op.exp.8.azure.ct.3;Registro de actividad;op.exp.8;operacional;explotación;Habilitar la validación de archivos en todos los trails, evitando así que estos se vean modificados o eliminados.;alto;requisito;trazabilidad;automático;;PASS;;;service_test_check_id;False;;ENS;ENS RD 311/2022 - Categoría Alta\r\nazure;The accreditation scheme of the ENS (National Security Scheme) has been developed by the Ministry of Finance and Public Administrations and the CCN (National Cryptological Center). This includes the basic principles and minimum requirements necessary for the adequate protection of information.;;;{datetime.now()};op.exp.8.azure.ct.4;Registro de actividad;op.exp.8;operacional;explotación;Habilitar la validación de archivos en todos los trails, evitando así que estos se vean modificados o eliminados.;alto;requisito;trazabilidad;automático;;MANUAL;Manual check;manual_check;manual;False;Manual check;ENS;ENS RD 311/2022 - Categoría Alta\r\n" assert content == expected_csv diff --git a/tests/lib/outputs/compliance/ens/ens_gcp_test.py b/tests/lib/outputs/compliance/ens/ens_gcp_test.py index afdbcdb3b0..eacc21c3ae 100644 --- a/tests/lib/outputs/compliance/ens/ens_gcp_test.py +++ b/tests/lib/outputs/compliance/ens/ens_gcp_test.py @@ -144,6 +144,6 @@ class TestGCPENS: mock_file.seek(0) content = mock_file.read() - expected_csv = f"PROVIDER;DESCRIPTION;PROJECTID;LOCATION;ASSESSMENTDATE;REQUIREMENTS_ID;REQUIREMENTS_DESCRIPTION;REQUIREMENTS_ATTRIBUTES_IDGRUPOCONTROL;REQUIREMENTS_ATTRIBUTES_MARCO;REQUIREMENTS_ATTRIBUTES_CATEGORIA;REQUIREMENTS_ATTRIBUTES_DESCRIPCIONCONTROL;REQUIREMENTS_ATTRIBUTES_NIVEL;REQUIREMENTS_ATTRIBUTES_TIPO;REQUIREMENTS_ATTRIBUTES_DIMENSIONES;REQUIREMENTS_ATTRIBUTES_MODOEJECUCION;REQUIREMENTS_ATTRIBUTES_DEPENDENCIAS;STATUS;STATUSEXTENDED;RESOURCEID;CHECKID;MUTED;RESOURCENAME;FRAMEWORK;NAME\r\ngcp;The accreditation scheme of the ENS (National Security Scheme) has been developed by the Ministry of Finance and Public Administrations and the CCN (National Cryptological Center). This includes the basic principles and minimum requirements necessary for the adequate protection of information.;123456789012;global;{datetime.now()};op.exp.8.gcp.ct.3;Registro de actividad;op.exp.8;operacional;explotación;Habilitar la validación de archivos en todos los trails, evitando así que estos se vean modificados o eliminados.;alto;requisito;trazabilidad;automático;;PASS;;;service_test_check_id;False;;ENS;ENS RD 311/2022\r\ngcp;The accreditation scheme of the ENS (National Security Scheme) has been developed by the Ministry of Finance and Public Administrations and the CCN (National Cryptological Center). This includes the basic principles and minimum requirements necessary for the adequate protection of information.;;;{datetime.now()};op.exp.8.gcp.ct.4;Registro de actividad;op.exp.8;operacional;explotación;Habilitar la validación de archivos en todos los trails, evitando así que estos se vean modificados o eliminados.;alto;requisito;trazabilidad;automático;;MANUAL;Manual check;manual_check;manual;False;Manual check;ENS;ENS RD 311/2022\r\n" + expected_csv = f"PROVIDER;DESCRIPTION;PROJECTID;LOCATION;ASSESSMENTDATE;REQUIREMENTS_ID;REQUIREMENTS_DESCRIPTION;REQUIREMENTS_ATTRIBUTES_IDGRUPOCONTROL;REQUIREMENTS_ATTRIBUTES_MARCO;REQUIREMENTS_ATTRIBUTES_CATEGORIA;REQUIREMENTS_ATTRIBUTES_DESCRIPCIONCONTROL;REQUIREMENTS_ATTRIBUTES_NIVEL;REQUIREMENTS_ATTRIBUTES_TIPO;REQUIREMENTS_ATTRIBUTES_DIMENSIONES;REQUIREMENTS_ATTRIBUTES_MODOEJECUCION;REQUIREMENTS_ATTRIBUTES_DEPENDENCIAS;STATUS;STATUSEXTENDED;RESOURCEID;CHECKID;MUTED;RESOURCENAME;FRAMEWORK;NAME\r\ngcp;The accreditation scheme of the ENS (National Security Scheme) has been developed by the Ministry of Finance and Public Administrations and the CCN (National Cryptological Center). This includes the basic principles and minimum requirements necessary for the adequate protection of information.;123456789012;global;{datetime.now()};op.exp.8.gcp.ct.3;Registro de actividad;op.exp.8;operacional;explotación;Habilitar la validación de archivos en todos los trails, evitando así que estos se vean modificados o eliminados.;alto;requisito;trazabilidad;automático;;PASS;;;service_test_check_id;False;;ENS;ENS RD 311/2022 - Categoría Alta\r\ngcp;The accreditation scheme of the ENS (National Security Scheme) has been developed by the Ministry of Finance and Public Administrations and the CCN (National Cryptological Center). This includes the basic principles and minimum requirements necessary for the adequate protection of information.;;;{datetime.now()};op.exp.8.gcp.ct.4;Registro de actividad;op.exp.8;operacional;explotación;Habilitar la validación de archivos en todos los trails, evitando así que estos se vean modificados o eliminados.;alto;requisito;trazabilidad;automático;;MANUAL;Manual check;manual_check;manual;False;Manual check;ENS;ENS RD 311/2022 - Categoría Alta\r\n" assert content == expected_csv diff --git a/tests/lib/outputs/compliance/fixtures.py b/tests/lib/outputs/compliance/fixtures.py index caba697417..7b29411663 100644 --- a/tests/lib/outputs/compliance/fixtures.py +++ b/tests/lib/outputs/compliance/fixtures.py @@ -490,7 +490,7 @@ MITRE_ATTACK_GCP = Compliance( ENS_RD2022_AWS = Compliance( Framework="ENS", - Name="ENS RD 311/2022", + Name="ENS RD 311/2022 - Categoría Alta", Provider="AWS", Version="RD2022", Description="The accreditation scheme of the ENS (National Security Scheme) has been developed by the Ministry of Finance and Public Administrations and the CCN (National Cryptological Center). This includes the basic principles and minimum requirements necessary for the adequate protection of information.", @@ -538,7 +538,7 @@ ENS_RD2022_AWS = Compliance( ENS_RD2022_AZURE = Compliance( Framework="ENS", - Name="ENS RD 311/2022", + Name="ENS RD 311/2022 - Categoría Alta", Provider="Azure", Version="RD2022", Description="The accreditation scheme of the ENS (National Security Scheme) has been developed by the Ministry of Finance and Public Administrations and the CCN (National Cryptological Center). This includes the basic principles and minimum requirements necessary for the adequate protection of information.", @@ -585,7 +585,7 @@ ENS_RD2022_AZURE = Compliance( ) ENS_RD2022_GCP = Compliance( Framework="ENS", - Name="ENS RD 311/2022", + Name="ENS RD 311/2022 - Categoría Alta", Provider="GCP", Version="RD2022", Description="The accreditation scheme of the ENS (National Security Scheme) has been developed by the Ministry of Finance and Public Administrations and the CCN (National Cryptological Center). This includes the basic principles and minimum requirements necessary for the adequate protection of information.", From 7bbc0d8e1b04d3534640d8724b1ad3f2e33b0884 Mon Sep 17 00:00:00 2001 From: Alan Buscaglia Date: Thu, 6 Nov 2025 13:48:19 +0100 Subject: [PATCH 30/37] feat: add claude code validation to pre-commit hook (#9177) Co-authored-by: alejandrobailo --- .env | 9 +- .github/pull_request_template.md | 7 + ui/.husky/pre-commit | 121 ++++++- .../code-review/CODE_REVIEW_QUICK_START.md | 115 +++++++ ui/docs/code-review/CODE_REVIEW_SETUP.md | 296 ++++++++++++++++++ ui/docs/code-review/README.md | 241 ++++++++++++++ 6 files changed, 786 insertions(+), 3 deletions(-) mode change 100644 => 100755 ui/.husky/pre-commit create mode 100644 ui/docs/code-review/CODE_REVIEW_QUICK_START.md create mode 100644 ui/docs/code-review/CODE_REVIEW_SETUP.md create mode 100644 ui/docs/code-review/README.md diff --git a/.env b/.env index 6787267f6f..f83f8ea702 100644 --- a/.env +++ b/.env @@ -14,7 +14,11 @@ UI_PORT=3000 AUTH_SECRET="N/c6mnaS5+SWq81+819OrzQZlmx1Vxtp/orjttJSmw8=" # Google Tag Manager ID NEXT_PUBLIC_GOOGLE_TAG_MANAGER_ID="" - +#### Code Review Configuration #### +# Enable Claude Code standards validation on pre-push hook +# Set to 'true' to validate changes against AGENTS.md standards via Claude Code +# Set to 'false' to skip validation +CODE_REVIEW_ENABLED=true #### Prowler API Configuration #### PROWLER_API_VERSION="stable" @@ -132,4 +136,5 @@ LANGCHAIN_PROJECT="" # Example with one source: RSS_FEED_SOURCES='[{"id":"prowler-releases","name":"Prowler Releases","type":"github_releases","url":"https://github.com/prowler-cloud/prowler/releases.atom","enabled":true}]' # Example with multiple sources (no trailing comma after last item): -# RSS_FEED_SOURCES='[{"id":"prowler-releases","name":"Prowler Releases","type":"github_releases","url":"https://github.com/prowler-cloud/prowler/releases.atom","enabled":true},{"id":"prowler-blog","name":"Prowler Blog","type":"blog","url":"https://prowler.com/blog/rss","enabled":false}]' \ No newline at end of file +# RSS_FEED_SOURCES='[{"id":"prowler-releases","name":"Prowler Releases","type":"github_releases","url":"https://github.com/prowler-cloud/prowler/releases.atom","enabled":true},{"id":"prowler-blog","name":"Prowler Blog","type":"blog","url":"https://prowler.com/blog/rss","enabled":false}]' + diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 94122d8349..497c4d6214 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -22,6 +22,13 @@ Please add a detailed description of how to review this PR. - [ ] Review if is needed to change the [Readme.md](https://github.com/prowler-cloud/prowler/blob/master/README.md) - [ ] Ensure new entries are added to [CHANGELOG.md](https://github.com/prowler-cloud/prowler/blob/master/prowler/CHANGELOG.md), if applicable. +#### UI +- [ ] All issue/task requirements work as expected on the UI +- [ ] Screenshots/Video of the functionality flow (if applicable) - Mobile (X < 640px) +- [ ] Screenshots/Video of the functionality flow (if applicable) - Table (640px > X < 1024px) +- [ ] Screenshots/Video of the functionality flow (if applicable) - Desktop (X > 1024px) +- [ ] Ensure new entries are added to [CHANGELOG.md](https://github.com/prowler-cloud/prowler/blob/master/ui/CHANGELOG.md), if applicable. + #### API - [ ] Verify if API specs need to be regenerated. - [ ] Check if version updates are required (e.g., specs, Poetry, etc.). diff --git a/ui/.husky/pre-commit b/ui/.husky/pre-commit old mode 100644 new mode 100755 index 129b71298f..e58c0fab37 --- a/ui/.husky/pre-commit +++ b/ui/.husky/pre-commit @@ -1 +1,120 @@ -npm run healthcheck +#!/bin/bash + +# Prowler UI - Pre-Commit Hook +# Optionally validates ONLY staged files against AGENTS.md standards using Claude Code +# Controlled by CODE_REVIEW_ENABLED in .env + +set -e + +# Colors +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +echo "" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "🚀 Prowler UI - Pre-Commit Hook" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "" + +# Load .env file (look in git root directory) +GIT_ROOT=$(git rev-parse --show-toplevel) +if [ -f "$GIT_ROOT/ui/.env" ]; then + CODE_REVIEW_ENABLED=$(grep "^CODE_REVIEW_ENABLED" "$GIT_ROOT/ui/.env" | cut -d'=' -f2 | tr -d ' ') +elif [ -f "$GIT_ROOT/.env" ]; then + CODE_REVIEW_ENABLED=$(grep "^CODE_REVIEW_ENABLED" "$GIT_ROOT/.env" | cut -d'=' -f2 | tr -d ' ') +elif [ -f ".env" ]; then + CODE_REVIEW_ENABLED=$(grep "^CODE_REVIEW_ENABLED" .env | cut -d'=' -f2 | tr -d ' ') +else + CODE_REVIEW_ENABLED="false" +fi + +# Normalize the value to lowercase +CODE_REVIEW_ENABLED=$(echo "$CODE_REVIEW_ENABLED" | tr '[:upper:]' '[:lower:]') + +echo -e "${BLUE}ℹ️ Code Review Status: ${CODE_REVIEW_ENABLED}${NC}" +echo "" + +# Get staged files (what will be committed) +STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(tsx?|jsx?)$' || true) + +if [ "$CODE_REVIEW_ENABLED" = "true" ]; then + if [ -z "$STAGED_FILES" ]; then + echo -e "${YELLOW}⚠️ No TypeScript/JavaScript files staged to validate${NC}" + echo "" + else + echo -e "${YELLOW}🔍 Running Claude Code standards validation...${NC}" + echo "" + echo -e "${BLUE}📋 Files to validate:${NC}" + echo "$STAGED_FILES" | sed 's/^/ - /' + echo "" + + echo -e "${BLUE}📤 Sending to Claude Code for validation...${NC}" + echo "" + + # Build prompt with git diff of changes + VALIDATION_PROMPT=$( + cat <<'PROMPT_EOF' +You are a code reviewer for the Prowler UI project. Analyze the code changes (git diff) below and validate they comply with AGENTS.md standards. + +**RULES TO CHECK:** +1. React Imports: NO `import * as React` or `import React, {` → Use `import { useState }` +2. TypeScript: NO union types like `type X = "a" | "b"` → Use const-based: `const X = {...} as const` +3. Tailwind: NO `var()` or hex colors in className → Use `className="bg-card-bg"` +4. cn(): ONLY for conditionals → NOT for static classes +5. React 19: NO `useMemo`/`useCallback` without reason +6. Zod v4: Use `.min(1)` not `.nonempty()`, `z.email()` not `z.string().email()`. All inputs must be validated with Zod. +7. File Org: 1 feature = local, 2+ features = shared +8. Directives: Server Actions need "use server", clients need "use client" +9. Implement DRY, KISS principles. (example: reusable components, avoid repetition) +10. Layout must work for all the responsive breakpoints (mobile, tablet, desktop) +11. ANY types cannot be used +12. Use the components inside components/shadcn if possible +13. Check Accessibility best practices (like alt tags in images, semantic HTML, Aria labels, etc.) + +=== GIT DIFF OF CHANGES === +PROMPT_EOF + ) + + # Add git diff to prompt (shows only actual changes) + VALIDATION_PROMPT="$VALIDATION_PROMPT +$(git diff --cached -U0)" + + VALIDATION_PROMPT="$VALIDATION_PROMPT + +=== END DIFF === + +**RESPOND WITH:** +STATUS: [PASSED | FAILED] +[If FAILED: list violations with File, Rule, Issue, and line reference] +[If PASSED: confirm all changes comply with AGENTS.md standards]" + + # Send to Claude Code + if VALIDATION_OUTPUT=$(echo "$VALIDATION_PROMPT" | claude 2>&1); then + echo "$VALIDATION_OUTPUT" + echo "" + + # Check result + if echo "$VALIDATION_OUTPUT" | grep -q "^STATUS: PASSED"; then + echo -e "${GREEN}✅ VALIDATION PASSED${NC}" + elif echo "$VALIDATION_OUTPUT" | grep -q "^STATUS: FAILED"; then + echo "" + echo -e "${RED}❌ VALIDATION FAILED${NC}" + echo -e "${RED}Fix violations before committing${NC}" + echo "" + exit 1 + else + echo -e "${YELLOW}⚠️ Could not determine validation status${NC}" + echo "Continuing (validation inconclusive)" + fi + else + echo -e "${YELLOW}⚠️ Claude Code not available${NC}" + fi + echo "" + fi +else + echo -e "${YELLOW}⏭️ Code review disabled (CODE_REVIEW_ENABLED=false)${NC}" + echo "" +fi diff --git a/ui/docs/code-review/CODE_REVIEW_QUICK_START.md b/ui/docs/code-review/CODE_REVIEW_QUICK_START.md new file mode 100644 index 0000000000..91dd2ad4af --- /dev/null +++ b/ui/docs/code-review/CODE_REVIEW_QUICK_START.md @@ -0,0 +1,115 @@ +# Code Review - Quick Start + +## 3 Steps to Enable + +### 1. Open `.env` +```bash +nano ui/.env +# or your favorite editor +``` + +### 2. Find this line +```bash +CODE_REVIEW_ENABLED=false +``` + +### 3. Change it to +```bash +CODE_REVIEW_ENABLED=true +``` + +**Done! ✅** + +--- + +## What Happens Now + +Every time you `git commit`: + +``` +✅ If your code complies with AGENTS.md standards: + → Commit executes normally + +❌ If there are standard violations: + → Commit is BLOCKED + → You see the errors in the terminal + → Fix the code + → Commit again +``` + +--- + +## Example + +```bash +$ git commit -m "feat: add new component" + +🏁 Prowler UI - Pre-Commit Hook + +ℹ️ Code Review Status: true + +🔍 Running Claude Code standards validation... + +📋 Files to validate: + - components/my-feature.tsx + +📤 Sending to Claude Code for validation... + +STATUS: FAILED +- File: components/my-feature.tsx:45 + Rule: React Imports + Issue: Using 'import * as React' + Expected: import { useState } from "react" + +❌ VALIDATION FAILED +Fix violations before committing + +# Fix the file and commit again +$ git commit -m "feat: add new component" + +🏁 Prowler UI - Pre-Commit Hook + +ℹ️ Code Review Status: true + +🔍 Running Claude Code standards validation... + +✅ VALIDATION PASSED + +# Commit successful ✅ +``` + +--- + +## Disable Temporarily + +If you need to commit without validation: + +```bash +# Option 1: Change in .env +CODE_REVIEW_ENABLED=false + +# Option 2: Bypass (use with caution!) +git commit --no-verify +``` + +--- + +## What Gets Validated + +- ✅ Correct React imports +- ✅ TypeScript patterns (const-based types) +- ✅ Tailwind CSS (no var() or hex in className) +- ✅ cn() utility (only for conditionals) +- ✅ No useMemo/useCallback without reason +- ✅ Zod v4 syntax +- ✅ File organization +- ✅ Directives "use client"/"use server" + +--- + +## More Info + +Read `CODE_REVIEW_SETUP.md` for: +- Troubleshooting +- Complete details +- Advanced configuration diff --git a/ui/docs/code-review/CODE_REVIEW_SETUP.md b/ui/docs/code-review/CODE_REVIEW_SETUP.md new file mode 100644 index 0000000000..7d4d133cf2 --- /dev/null +++ b/ui/docs/code-review/CODE_REVIEW_SETUP.md @@ -0,0 +1,296 @@ +# Code Review Setup - Prowler UI + +Guide to set up automatic code validation with Claude Code in the pre-commit hook. + +## Overview + +The code review system works like this: + +1. **When you enable `CODE_REVIEW_ENABLED=true` in `.env`** + - When you `git commit`, the pre-commit hook runs + - Only validates TypeScript/JavaScript files you're committing + - Uses Claude Code to check if they comply with AGENTS.md + - If there are violations → **BLOCKS the commit** + - If everything is fine → Continues normally + +2. **When `CODE_REVIEW_ENABLED=false` (default)** + - The pre-commit hook does not run validation + - No standards validation + - Developers can commit without restrictions + +## Installation + +### 1. Ensure Claude Code is in your PATH + +```bash +# Verify that claude is available in terminal +which claude + +# If it doesn't appear, check your Claude Code CLI installation +``` + +### 2. Enable validation in `.env` + +In `/ui/.env`, find the "Code Review Configuration" section: + +```bash +#### Code Review Configuration #### +# Enable Claude Code standards validation on pre-commit hook +# Set to 'true' to validate changes against AGENTS.md standards via Claude Code +# Set to 'false' to skip validation +CODE_REVIEW_ENABLED=false # ← Change this to 'true' +``` + +**Options:** +- `CODE_REVIEW_ENABLED=true` → Enables validation +- `CODE_REVIEW_ENABLED=false` → Disables validation (default) + +### 3. The hook is ready + +The `.husky/pre-commit` file already contains the logic. You don't need to install anything else. + +## How It Works + +### Normal Flow (with validation enabled) + +```bash +$ git commit -m "feat: add new component" + +# Pre-commit hook executes automatically +🚀 Prowler UI - Pre-Commit Hook + ℹ️ Code Review Status: true + +📋 Files to validate: + - components/new-feature.tsx + - types/new-feature.ts + +📤 Sending to Claude Code for validation... + +# Claude analyzes the files... + +=== VALIDATION REPORT === +STATUS: PASSED +All files comply with AGENTS.md standards. + +✅ VALIDATION PASSED +# Commit continues ✅ +``` + +### If There Are Violations + +```bash +$ git commit -m "feat: add new component" + +# Claude detects issues... + +=== VALIDATION REPORT === +STATUS: FAILED + +- File: components/new-feature.tsx:15 + Rule: React Imports + Issue: Using 'import * as React' instead of named imports + Expected: import { useState } from "react" + +❌ VALIDATION FAILED + +Please fix the violations before committing: + 1. Review the violations listed above + 2. Fix the code according to AGENTS.md standards + 3. Commit your changes + 4. Try again + +# Commit is BLOCKED ❌ +``` + +## What Gets Validated + +The system verifies that files comply with: + +### 1. React Imports +```typescript +// ❌ WRONG +import * as React from "react" +import React, { useState } from "react" + +// ✅ CORRECT +import { useState } from "react" +``` + +### 2. TypeScript Type Patterns +```typescript +// ❌ WRONG +type SortOption = "high-low" | "low-high" + +// ✅ CORRECT +const SORT_OPTIONS = { + HIGH_LOW: "high-low", + LOW_HIGH: "low-high", +} as const +type SortOption = typeof SORT_OPTIONS[keyof typeof SORT_OPTIONS] +``` + +### 3. Tailwind CSS +```typescript +// ❌ WRONG +className="bg-[var(--color)]" +className="text-[#ffffff]" + +// ✅ CORRECT +className="bg-card-bg text-white" +``` + +### 4. cn() Utility +```typescript +// ❌ WRONG +className={cn("flex items-center")} + +// ✅ CORRECT +className={cn("h-3 w-3", isCircle ? "rounded-full" : "rounded-sm")} +``` + +### 5. React 19 Hooks +```typescript +// ❌ WRONG +const memoized = useMemo(() => value, []) + +// ✅ CORRECT +// Don't use useMemo (React Compiler handles it) +const value = expensiveCalculation() +``` + +### 6. Zod v4 Syntax +```typescript +// ❌ WRONG +z.string().email() +z.string().nonempty() + +// ✅ CORRECT +z.email() +z.string().min(1) +``` + +### 7. File Organization +``` +// ❌ WRONG +Code used by 2+ features in feature-specific folder + +// ✅ CORRECT +Code used by 1 feature → local in that feature +Code used by 2+ features → in shared/global +``` + +### 8. Use Directives +```typescript +// ❌ WRONG +export async function updateUser() { } // Missing "use server" + +// ✅ CORRECT +"use server" +export async function updateUser() { } +``` + +## Disable Temporarily + +If you need to commit without validation temporarily: + +```bash +# Option 1: Change in .env +CODE_REVIEW_ENABLED=false +git commit + +# Option 2: Use git hook bypass +git commit --no-verify + +# Option 3: Disable the hook +chmod -x .husky/pre-commit +git commit +chmod +x .husky/pre-commit +``` + +**⚠️ Note:** `--no-verify` skips ALL hooks. + +## Troubleshooting + +### "Claude Code CLI not found" + +``` +⚠️ Claude Code CLI not found in PATH +To enable: ensure Claude Code is in PATH and CODE_REVIEW_ENABLED=true +``` + +**Solution:** +```bash +# Check where claude-code is installed +which claude-code + +# If not found, add to your ~/.zshrc: +export PATH="$HOME/.local/bin:$PATH" # or where it's installed + +# Reload the terminal +source ~/.zshrc +``` + +### "Validation inconclusive" + +If Claude Code cannot determine the status: + +``` +⚠️ Could not determine validation status +Allowing commit (validation inconclusive) +``` + +The commit is allowed automatically. If you want to be stricter, you can: + +1. Manually review files against AGENTS.md +2. Report the analysis problem to Claude + +### Build fails after validation + +``` +❌ Build failed +``` + +If validation passes but build fails: + +1. Check the build error +2. Fix it locally +3. Commit and try again + +## View the Full Report + +Reports are saved in temporary files that are deleted afterward. To see the detailed report in real-time, watch the hook output: + +```bash +git commit 2>&1 | tee commit-report.txt +``` + +This will save everything to `commit-report.txt`. + +## For the Team + +### Enable on your machine + +```bash +cd ui +# Edit .env locally and set: +CODE_REVIEW_ENABLED=true +``` + +### Recommended Flow + +1. **During development**: `CODE_REVIEW_ENABLED=false` + - Iterate faster + - Build check still runs + +2. **Before final commit**: `CODE_REVIEW_ENABLED=true` + - Verify you meet standards + - Prevent PRs rejected for violations + +3. **In CI/CD**: You could add additional validation + - (future) Server-side validation in GitHub Actions + +## Questions? + +If you have questions about the standards being validated, check: +- `AGENTS.md` - Complete architecture guide +- `CLAUDE.md` - Project-specific instructions diff --git a/ui/docs/code-review/README.md b/ui/docs/code-review/README.md new file mode 100644 index 0000000000..ad546f77f4 --- /dev/null +++ b/ui/docs/code-review/README.md @@ -0,0 +1,241 @@ +# Code Review System Documentation + +Complete documentation for the Claude Code-powered pre-commit validation system. + +## Quick Navigation + +**Want to get started in 3 steps?** +→ Read: [`CODE_REVIEW_QUICK_START.md`](./CODE_REVIEW_QUICK_START.md) + +**Want complete technical details?** +→ Read: [`CODE_REVIEW_SETUP.md`](./CODE_REVIEW_SETUP.md) + +--- + +## What This System Does + +Automatically validates code against AGENTS.md standards when you commit using Claude Code. + +``` +git commit + ↓ +(Optional) Claude Code validation + ↓ +If violations found → Commit is BLOCKED ❌ +If code complies → Commit continues ✅ +``` + +**Key Feature:** Configurable with a single variable in `.env` +- `CODE_REVIEW_ENABLED=true` → Validates (recommended before commits) +- `CODE_REVIEW_ENABLED=false` → Skip validation (default, for iteration) + +--- + +## File Guide + +| File | Purpose | Read Time | +|------|---------|-----------| +| [`CODE_REVIEW_QUICK_START.md`](./CODE_REVIEW_QUICK_START.md) | 3-step setup & examples | 5 min | +| [`CODE_REVIEW_SETUP.md`](./CODE_REVIEW_SETUP.md) | Complete technical guide | 15 min | + +--- + +## What Gets Validated + +When validation is enabled, the system checks: + +✅ **React Imports** +- Must use: `import { useState } from "react"` +- Not: `import * as React` or `import React, {` + +✅ **TypeScript Types** +- Must use: `const STATUS = {...} as const; type Status = typeof STATUS[...]` +- Not: `type Status = "a" | "b"` + +✅ **Tailwind CSS** +- Must use: `className="bg-card-bg text-white"` +- Not: `className="bg-[var(...)]"` or `className="text-[#fff]"` + +✅ **cn() Utility** +- Must use for: `cn("h-3", isActive && "bg-blue")` +- Not for: `cn("static-class")` + +✅ **React 19 Hooks** +- No: `useMemo()` / `useCallback()` without documented reason +- Use: Nothing (React Compiler handles optimization) + +✅ **Zod v4 Syntax** +- Must use: `z.email()`, `.min(1)` +- Not: `z.string().email()`, `.nonempty()` + +✅ **File Organization** +- 1 feature uses → Keep local in feature folder +- 2+ features use → Move to shared/global + +✅ **Directives** +- Server Actions must have: `"use server"` +- Client Components must have: `"use client"` + +--- + +## Installation (For Your Team) + +### Step 1: Decide if you want validation +- **Optional:** Each developer decides +- **Team policy:** Consider making it standard before commits + +### Step 2: Enable in your environment +```bash +# Edit ui/.env +CODE_REVIEW_ENABLED=true +``` + +### Step 3: Done! +Your next `git commit` will validate automatically. + +--- + +## Support + +| Question | Answer | +|----------|--------| +| How do I enable it? | Change `CODE_REVIEW_ENABLED=true` in `.env` | +| How do I disable it? | Change `CODE_REVIEW_ENABLED=false` in `.env` | +| How do I bypass? | Use `git commit --no-verify` (emergency only) | +| What if Claude Code isn't found? | Check PATH: `which claude` | +| What if hook doesn't run? | Check executable: `chmod +x .husky/pre-commit` | +| How do I test it? | Enable validation and commit code with violations to test | +| What if I don't have Claude Code? | Validation is skipped gracefully | + +--- + +## Key Features + +✅ **No Setup Required** +- Uses Claude Code already in your PATH +- No API keys needed +- Works offline (if Claude Code supports it) + +✅ **Smart Validation** +- Only checks files being committed +- Not the entire codebase +- Fast: ~10-30 seconds with validation enabled + +✅ **Flexible** +- Can be enabled/disabled per developer +- Can be disabled temporarily with `git commit --no-verify` +- Default is disabled (doesn't interrupt workflow) + +✅ **Clear Feedback** +- Shows exactly what violates standards +- Shows file:line references +- Explains how to fix each issue + +✅ **Well Documented** +- 5 different documentation files +- For different needs and levels +- Examples and troubleshooting included + +--- + +## Architecture + +``` +┌─────────────────────────────────────────┐ +│ Developer commits code │ +└────────────────┬────────────────────────┘ + ↓ + ┌─────────────────┐ + │ Pre-Commit Hook │ + │ (.husky/pre-commit) + └────────┬────────┘ + ↓ + Read CODE_REVIEW_ENABLED from .env + ↓ + ┌──────────────────────────┐ + │ If false (disabled) │ + └────────┬─────────────────┘ + ↓ + exit 0 (OK) + ↓ + Commit continues ✅ + + ┌──────────────────────────┐ + │ If true (enabled) │ + └────────┬─────────────────┘ + ↓ + Extract staged files + (git diff --cached) + ↓ + Build prompt with git diff + ↓ + Send to: claude < prompt + ↓ + Analyze against AGENTS.md + ↓ + Return: STATUS: PASSED or FAILED + ↓ + Parse with: grep "^STATUS:" + ↓ + ┌──────────────────┐ + │ PASSED detected │ + └────────┬─────────┘ + ↓ + exit 0 (OK) + ↓ + Commit continues ✅ + + ┌──────────────────┐ + │ FAILED detected │ + └────────┬─────────┘ + ↓ + Show violations + ↓ + exit 1 (FAIL) + ↓ + Commit is BLOCKED ❌ + ↓ + Developer fixes code + Developer commits again +``` + +--- + +## Getting Started + +1. **Read:** [`CODE_REVIEW_QUICK_START.md`](./CODE_REVIEW_QUICK_START.md) (5 minutes) +2. **Enable:** Set `CODE_REVIEW_ENABLED=true` in your `ui/.env` +3. **Test:** Commit some code and see validation in action +4. **For help:** See the troubleshooting section in [`CODE_REVIEW_SETUP.md`](./CODE_REVIEW_SETUP.md) + +--- + +## Implementation Details + +- **Files Modified:** 1 (`.husky/pre-commit`) +- **Files Created:** 3 (documentation) +- **Hook Size:** ~120 lines of bash +- **Dependencies:** Claude Code CLI (already available) +- **Setup Time:** 1 minute +- **Default:** Disabled (no workflow interruption) + +--- + +## Questions? + +- **How to enable?** → `CODE_REVIEW_QUICK_START.md` +- **How does it work?** → `CODE_REVIEW_SETUP.md` +- **Troubleshooting?** → See troubleshooting section in `CODE_REVIEW_SETUP.md` + +--- + +## Status + +✅ **Ready to Use** + +The system is fully implemented, documented, and tested. You can enable it immediately with a single variable change. + +--- + +**Last Updated:** November 6, 2024 +**Status:** Complete Implementation From 38f60966e5eab09ea764310d5395461957d1ec72 Mon Sep 17 00:00:00 2001 From: Alejandro Bailo <59607668+alejandrobailo@users.noreply.github.com> Date: Thu, 6 Nov 2025 14:32:06 +0100 Subject: [PATCH 31/37] fix(ui): improve pre commit (#9180) --- ui/.husky/pre-commit | 40 +++++++++++++++++--------- ui/README.md | 51 +++++++++++++++++++++++++++++++++ ui/package.json | 2 +- ui/scripts/setup-git-hooks.js | 54 +++++++++++++++++++++++++++++++++++ 4 files changed, 133 insertions(+), 14 deletions(-) create mode 100755 ui/scripts/setup-git-hooks.js diff --git a/ui/.husky/pre-commit b/ui/.husky/pre-commit index e58c0fab37..8e982d4c8a 100755 --- a/ui/.husky/pre-commit +++ b/ui/.husky/pre-commit @@ -54,10 +54,12 @@ if [ "$CODE_REVIEW_ENABLED" = "true" ]; then echo -e "${BLUE}📤 Sending to Claude Code for validation...${NC}" echo "" - # Build prompt with git diff of changes + # Build prompt with git diff of changes AND full context VALIDATION_PROMPT=$( cat <<'PROMPT_EOF' -You are a code reviewer for the Prowler UI project. Analyze the code changes (git diff) below and validate they comply with AGENTS.md standards. +You are a code reviewer for the Prowler UI project. Analyze the code changes (git diff with full context) below and validate they comply with AGENTS.md standards. + +**CRITICAL: You MUST check BOTH the changed lines AND the surrounding context for violations.** **RULES TO CHECK:** 1. React Imports: NO `import * as React` or `import React, {` → Use `import { useState }` @@ -70,35 +72,41 @@ You are a code reviewer for the Prowler UI project. Analyze the code changes (gi 8. Directives: Server Actions need "use server", clients need "use client" 9. Implement DRY, KISS principles. (example: reusable components, avoid repetition) 10. Layout must work for all the responsive breakpoints (mobile, tablet, desktop) -11. ANY types cannot be used +11. ANY types cannot be used - CRITICAL: Check for `: any` in all visible lines 12. Use the components inside components/shadcn if possible 13. Check Accessibility best practices (like alt tags in images, semantic HTML, Aria labels, etc.) -=== GIT DIFF OF CHANGES === +=== GIT DIFF WITH CONTEXT === PROMPT_EOF ) - # Add git diff to prompt (shows only actual changes) + # Add git diff to prompt with more context (U5 = 5 lines before/after) VALIDATION_PROMPT="$VALIDATION_PROMPT -$(git diff --cached -U0)" +$(git diff --cached -U5)" VALIDATION_PROMPT="$VALIDATION_PROMPT === END DIFF === -**RESPOND WITH:** -STATUS: [PASSED | FAILED] -[If FAILED: list violations with File, Rule, Issue, and line reference] -[If PASSED: confirm all changes comply with AGENTS.md standards]" +**IMPORTANT: Your response MUST start with exactly one of these lines:** +STATUS: PASSED +STATUS: FAILED + +**If FAILED:** List each violation with File, Line Number, Rule Number, and Issue. +**If PASSED:** Confirm all visible code (including context) complies with AGENTS.md standards. + +**Start your response now with STATUS:**" # Send to Claude Code if VALIDATION_OUTPUT=$(echo "$VALIDATION_PROMPT" | claude 2>&1); then echo "$VALIDATION_OUTPUT" echo "" - # Check result + # Check result - STRICT MODE: fail if status unclear if echo "$VALIDATION_OUTPUT" | grep -q "^STATUS: PASSED"; then + echo "" echo -e "${GREEN}✅ VALIDATION PASSED${NC}" + echo "" elif echo "$VALIDATION_OUTPUT" | grep -q "^STATUS: FAILED"; then echo "" echo -e "${RED}❌ VALIDATION FAILED${NC}" @@ -106,8 +114,14 @@ STATUS: [PASSED | FAILED] echo "" exit 1 else - echo -e "${YELLOW}⚠️ Could not determine validation status${NC}" - echo "Continuing (validation inconclusive)" + echo "" + echo -e "${RED}❌ VALIDATION ERROR${NC}" + echo -e "${RED}Could not determine validation status from Claude Code response${NC}" + echo -e "${YELLOW}Response must start with 'STATUS: PASSED' or 'STATUS: FAILED'${NC}" + echo "" + echo -e "${YELLOW}To bypass validation temporarily, set CODE_REVIEW_ENABLED=false in .env${NC}" + echo "" + exit 1 fi else echo -e "${YELLOW}⚠️ Claude Code not available${NC}" diff --git a/ui/README.md b/ui/README.md index 3e334368ff..e0dcb3be33 100644 --- a/ui/README.md +++ b/ui/README.md @@ -87,6 +87,12 @@ You can use one of them `npm`, `yarn`, `pnpm`, `bun`, Example using `npm`: npm install ``` +**Note:** The `npm install` command will automatically configure Git hooks for code quality checks. If you experience issues, you can manually configure them: + +```bash +git config core.hooksPath "ui/.husky" +``` + #### Run the development server ```bash @@ -112,3 +118,48 @@ After modifying the `.npmrc` file, you need to run `pnpm install` again to ensur - [TypeScript](https://www.typescriptlang.org/) - [Framer Motion](https://www.framer.com/motion/) - [next-themes](https://github.com/pacocoursey/next-themes) + +## Git Hooks & Code Review + +This project uses Git hooks to maintain code quality. When you commit changes to TypeScript/JavaScript files, the pre-commit hook can optionally validate them against our coding standards using Claude Code. + +### Enabling Code Review + +To enable automatic code review on commits, add this to your `.env` file in the project root: + +```bash +CODE_REVIEW_ENABLED=true +``` + +When enabled, the hook will: +- ✅ Validate your staged changes against `AGENTS.md` standards +- ✅ Check for common issues (any types, incorrect imports, styling violations, etc.) +- ✅ Block commits that don't comply with the standards +- ✅ Provide helpful feedback on how to fix issues + +### Disabling Code Review + +To disable code review (faster commits, useful for quick iterations): + +```bash +CODE_REVIEW_ENABLED=false +``` + +Or remove the variable from your `.env` file. + +### Requirements + +- [Claude Code CLI](https://github.com/anthropics/claude-code) installed and authenticated +- `.env` file in the project root with `CODE_REVIEW_ENABLED` set + +### Troubleshooting + +If hooks aren't running after commits: + +```bash +# Verify hooks are configured +git config --get core.hooksPath # Should output: ui/.husky + +# Reconfigure if needed +git config core.hooksPath "ui/.husky" +``` diff --git a/ui/package.json b/ui/package.json index db33a08fac..8394a221d9 100644 --- a/ui/package.json +++ b/ui/package.json @@ -7,7 +7,7 @@ "start": "next start", "start:standalone": "node .next/standalone/server.js", "deps:log": "node scripts/update-dependency-log.js", - "postinstall": "node -e \"const fs=require('fs'); if(fs.existsSync('scripts/update-dependency-log.js')) require('./scripts/update-dependency-log.js'); else console.log('skip deps:log (script missing)');\"", + "postinstall": "node -e \"const fs=require('fs'); if(fs.existsSync('scripts/update-dependency-log.js')) require('./scripts/update-dependency-log.js'); else console.log('skip deps:log (script missing)');\" && node scripts/setup-git-hooks.js", "typecheck": "tsc", "healthcheck": "npm run typecheck && npm run lint:check", "lint:check": "eslint . --ext .ts,.tsx -c .eslintrc.cjs", diff --git a/ui/scripts/setup-git-hooks.js b/ui/scripts/setup-git-hooks.js new file mode 100755 index 0000000000..a3f219813f --- /dev/null +++ b/ui/scripts/setup-git-hooks.js @@ -0,0 +1,54 @@ +#!/usr/bin/env node + +/** + * Setup Git Hooks for Prowler UI + * + * This script configures Git to use Husky hooks located in ui/.husky + * It runs automatically after npm install via the postinstall script. + */ + +const { execSync } = require('child_process'); +const path = require('path'); + +try { + // Get the git root directory + const gitRoot = execSync('git rev-parse --show-toplevel', { + encoding: 'utf8', + stdio: ['pipe', 'pipe', 'pipe'] + }).trim(); + + // Check if we're in a git repository + if (!gitRoot) { + console.log('⚠️ Not in a git repository. Skipping git hooks setup.'); + process.exit(0); + } + + // Get current hooks path + let currentHooksPath; + try { + currentHooksPath = execSync('git config --get core.hooksPath', { + encoding: 'utf8', + stdio: ['pipe', 'pipe', 'pipe'] + }).trim(); + } catch { + // core.hooksPath not set yet + currentHooksPath = null; + } + + const expectedHooksPath = 'ui/.husky'; + + // Only configure if not already set correctly + if (currentHooksPath !== expectedHooksPath) { + execSync(`git config core.hooksPath "${expectedHooksPath}"`, { + stdio: 'inherit' + }); + console.log('✅ Git hooks configured: core.hooksPath = ui/.husky'); + } else { + console.log('✅ Git hooks already configured correctly'); + } + +} catch (error) { + // Don't fail the installation if git hooks setup fails + console.warn('⚠️ Could not setup git hooks:', error.message); + console.warn(' You may need to run manually: git config core.hooksPath "ui/.husky"'); +} From 0ad5bbf350f2b9b02c62cb11215385c4326c71ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Harley?= Date: Thu, 6 Nov 2025 12:13:10 -0300 Subject: [PATCH 32/37] feat(github): Add GitHub check ensuring repository creation is limited (#8844) Signed-off-by: Mauricio Harley Co-authored-by: Hugo Pereira Brito <101209179+HugoPBrito@users.noreply.github.com> Co-authored-by: HugoPBrito --- poetry.lock | 217 ++++++++++-------- prowler/CHANGELOG.md | 1 + prowler/compliance/github/cis_1.0_github.json | 4 +- .../__init__.py | 0 ..._repository_creation_limited.metadata.json | 30 +++ ...rganization_repository_creation_limited.py | 106 +++++++++ .../organization/organization_service.py | 82 ++++++- ...zation_repository_creation_limited_test.py | 170 ++++++++++++++ 8 files changed, 499 insertions(+), 111 deletions(-) create mode 100644 prowler/providers/github/services/organization/organization_repository_creation_limited/__init__.py create mode 100644 prowler/providers/github/services/organization/organization_repository_creation_limited/organization_repository_creation_limited.metadata.json create mode 100644 prowler/providers/github/services/organization/organization_repository_creation_limited/organization_repository_creation_limited.py create mode 100644 tests/providers/github/services/organization/organization_repository_creation_limited/organization_repository_creation_limited_test.py diff --git a/poetry.lock b/poetry.lock index 847a31f878..12bc3ea2de 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.2.1 and should not be changed by hand. [[package]] name = "about-time" @@ -4420,106 +4420,127 @@ typing-extensions = {version = ">=4.4.0", markers = "python_version < \"3.13\""} [[package]] name = "regex" -version = "2024.11.6" +version = "2025.9.18" description = "Alternative regular expression module, to replace re." optional = false -python-versions = ">=3.8" -groups = ["dev"] +python-versions = ">=3.9" +groups = ["dev", "docs"] files = [ - {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, - {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, - {file = "regex-2024.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62"}, - {file = "regex-2024.11.6-cp310-cp310-win32.whl", hash = "sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e"}, - {file = "regex-2024.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519"}, - {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638"}, - {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7"}, - {file = "regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45"}, - {file = "regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9"}, - {file = "regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60"}, - {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a"}, - {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9"}, - {file = "regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad"}, - {file = "regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54"}, - {file = "regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b"}, - {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84"}, - {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4"}, - {file = "regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d"}, - {file = "regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff"}, - {file = "regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a"}, - {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3a51ccc315653ba012774efca4f23d1d2a8a8f278a6072e29c7147eee7da446b"}, - {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ad182d02e40de7459b73155deb8996bbd8e96852267879396fb274e8700190e3"}, - {file = "regex-2024.11.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba9b72e5643641b7d41fa1f6d5abda2c9a263ae835b917348fc3c928182ad467"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40291b1b89ca6ad8d3f2b82782cc33807f1406cf68c8d440861da6304d8ffbbd"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdf58d0e516ee426a48f7b2c03a332a4114420716d55769ff7108c37a09951bf"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a36fdf2af13c2b14738f6e973aba563623cb77d753bbbd8d414d18bfaa3105dd"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1cee317bfc014c2419a76bcc87f071405e3966da434e03e13beb45f8aced1a6"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50153825ee016b91549962f970d6a4442fa106832e14c918acd1c8e479916c4f"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea1bfda2f7162605f6e8178223576856b3d791109f15ea99a9f95c16a7636fb5"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:df951c5f4a1b1910f1a99ff42c473ff60f8225baa1cdd3539fe2819d9543e9df"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:072623554418a9911446278f16ecb398fb3b540147a7828c06e2011fa531e773"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f654882311409afb1d780b940234208a252322c24a93b442ca714d119e68086c"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:89d75e7293d2b3e674db7d4d9b1bee7f8f3d1609428e293771d1a962617150cc"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f65557897fc977a44ab205ea871b690adaef6b9da6afda4790a2484b04293a5f"}, - {file = "regex-2024.11.6-cp38-cp38-win32.whl", hash = "sha256:6f44ec28b1f858c98d3036ad5d7d0bfc568bdd7a74f9c24e25f41ef1ebfd81a4"}, - {file = "regex-2024.11.6-cp38-cp38-win_amd64.whl", hash = "sha256:bb8f74f2f10dbf13a0be8de623ba4f9491faf58c24064f32b65679b021ed0001"}, - {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5704e174f8ccab2026bd2f1ab6c510345ae8eac818b613d7d73e785f1310f839"}, - {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:220902c3c5cc6af55d4fe19ead504de80eb91f786dc102fbd74894b1551f095e"}, - {file = "regex-2024.11.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7e351589da0850c125f1600a4c4ba3c722efefe16b297de54300f08d734fbf"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5056b185ca113c88e18223183aa1a50e66507769c9640a6ff75859619d73957b"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e34b51b650b23ed3354b5a07aab37034d9f923db2a40519139af34f485f77d0"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5670bce7b200273eee1840ef307bfa07cda90b38ae56e9a6ebcc9f50da9c469b"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08986dce1339bc932923e7d1232ce9881499a0e02925f7402fb7c982515419ef"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93c0b12d3d3bc25af4ebbf38f9ee780a487e8bf6954c115b9f015822d3bb8e48"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:764e71f22ab3b305e7f4c21f1a97e1526a25ebdd22513e251cf376760213da13"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f056bf21105c2515c32372bbc057f43eb02aae2fda61052e2f7622c801f0b4e2"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:69ab78f848845569401469da20df3e081e6b5a11cb086de3eed1d48f5ed57c95"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:86fddba590aad9208e2fa8b43b4c098bb0ec74f15718bb6a704e3c63e2cef3e9"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:684d7a212682996d21ca12ef3c17353c021fe9de6049e19ac8481ec35574a70f"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a03e02f48cd1abbd9f3b7e3586d97c8f7a9721c436f51a5245b3b9483044480b"}, - {file = "regex-2024.11.6-cp39-cp39-win32.whl", hash = "sha256:41758407fc32d5c3c5de163888068cfee69cb4c2be844e7ac517a52770f9af57"}, - {file = "regex-2024.11.6-cp39-cp39-win_amd64.whl", hash = "sha256:b2837718570f95dd41675328e111345f9b7095d821bac435aac173ac80b19983"}, - {file = "regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519"}, + {file = "regex-2025.9.18-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:12296202480c201c98a84aecc4d210592b2f55e200a1d193235c4db92b9f6788"}, + {file = "regex-2025.9.18-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:220381f1464a581f2ea988f2220cf2a67927adcef107d47d6897ba5a2f6d51a4"}, + {file = "regex-2025.9.18-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:87f681bfca84ebd265278b5daa1dcb57f4db315da3b5d044add7c30c10442e61"}, + {file = "regex-2025.9.18-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:34d674cbba70c9398074c8a1fcc1a79739d65d1105de2a3c695e2b05ea728251"}, + {file = "regex-2025.9.18-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:385c9b769655cb65ea40b6eea6ff763cbb6d69b3ffef0b0db8208e1833d4e746"}, + {file = "regex-2025.9.18-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8900b3208e022570ae34328712bef6696de0804c122933414014bae791437ab2"}, + {file = "regex-2025.9.18-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c204e93bf32cd7a77151d44b05eb36f469d0898e3fba141c026a26b79d9914a0"}, + {file = "regex-2025.9.18-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3acc471d1dd7e5ff82e6cacb3b286750decd949ecd4ae258696d04f019817ef8"}, + {file = "regex-2025.9.18-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6479d5555122433728760e5f29edb4c2b79655a8deb681a141beb5c8a025baea"}, + {file = "regex-2025.9.18-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:431bd2a8726b000eb6f12429c9b438a24062a535d06783a93d2bcbad3698f8a8"}, + {file = "regex-2025.9.18-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:0cc3521060162d02bd36927e20690129200e5ac9d2c6d32b70368870b122db25"}, + {file = "regex-2025.9.18-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a021217b01be2d51632ce056d7a837d3fa37c543ede36e39d14063176a26ae29"}, + {file = "regex-2025.9.18-cp310-cp310-win32.whl", hash = "sha256:4a12a06c268a629cb67cc1d009b7bb0be43e289d00d5111f86a2efd3b1949444"}, + {file = "regex-2025.9.18-cp310-cp310-win_amd64.whl", hash = "sha256:47acd811589301298c49db2c56bde4f9308d6396da92daf99cba781fa74aa450"}, + {file = "regex-2025.9.18-cp310-cp310-win_arm64.whl", hash = "sha256:16bd2944e77522275e5ee36f867e19995bcaa533dcb516753a26726ac7285442"}, + {file = "regex-2025.9.18-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:51076980cd08cd13c88eb7365427ae27f0d94e7cebe9ceb2bb9ffdae8fc4d82a"}, + {file = "regex-2025.9.18-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:828446870bd7dee4e0cbeed767f07961aa07f0ea3129f38b3ccecebc9742e0b8"}, + {file = "regex-2025.9.18-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c28821d5637866479ec4cc23b8c990f5bc6dd24e5e4384ba4a11d38a526e1414"}, + {file = "regex-2025.9.18-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:726177ade8e481db669e76bf99de0b278783be8acd11cef71165327abd1f170a"}, + {file = "regex-2025.9.18-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f5cca697da89b9f8ea44115ce3130f6c54c22f541943ac8e9900461edc2b8bd4"}, + {file = "regex-2025.9.18-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:dfbde38f38004703c35666a1e1c088b778e35d55348da2b7b278914491698d6a"}, + {file = "regex-2025.9.18-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f2f422214a03fab16bfa495cfec72bee4aaa5731843b771860a471282f1bf74f"}, + {file = "regex-2025.9.18-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a295916890f4df0902e4286bc7223ee7f9e925daa6dcdec4192364255b70561a"}, + {file = "regex-2025.9.18-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:5db95ff632dbabc8c38c4e82bf545ab78d902e81160e6e455598014f0abe66b9"}, + {file = "regex-2025.9.18-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fb967eb441b0f15ae610b7069bdb760b929f267efbf522e814bbbfffdf125ce2"}, + {file = "regex-2025.9.18-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f04d2f20da4053d96c08f7fde6e1419b7ec9dbcee89c96e3d731fca77f411b95"}, + {file = "regex-2025.9.18-cp311-cp311-win32.whl", hash = "sha256:895197241fccf18c0cea7550c80e75f185b8bd55b6924fcae269a1a92c614a07"}, + {file = "regex-2025.9.18-cp311-cp311-win_amd64.whl", hash = "sha256:7e2b414deae99166e22c005e154a5513ac31493db178d8aec92b3269c9cce8c9"}, + {file = "regex-2025.9.18-cp311-cp311-win_arm64.whl", hash = "sha256:fb137ec7c5c54f34a25ff9b31f6b7b0c2757be80176435bf367111e3f71d72df"}, + {file = "regex-2025.9.18-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:436e1b31d7efd4dcd52091d076482031c611dde58bf9c46ca6d0a26e33053a7e"}, + {file = "regex-2025.9.18-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c190af81e5576b9c5fdc708f781a52ff20f8b96386c6e2e0557a78402b029f4a"}, + {file = "regex-2025.9.18-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e4121f1ce2b2b5eec4b397cc1b277686e577e658d8f5870b7eb2d726bd2300ab"}, + {file = "regex-2025.9.18-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:300e25dbbf8299d87205e821a201057f2ef9aa3deb29caa01cd2cac669e508d5"}, + {file = "regex-2025.9.18-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7b47fcf9f5316c0bdaf449e879407e1b9937a23c3b369135ca94ebc8d74b1742"}, + {file = "regex-2025.9.18-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:57a161bd3acaa4b513220b49949b07e252165e6b6dc910ee7617a37ff4f5b425"}, + {file = "regex-2025.9.18-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f130c3a7845ba42de42f380fff3c8aebe89a810747d91bcf56d40a069f15352"}, + {file = "regex-2025.9.18-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5f96fa342b6f54dcba928dd452e8d8cb9f0d63e711d1721cd765bb9f73bb048d"}, + {file = "regex-2025.9.18-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:0f0d676522d68c207828dcd01fb6f214f63f238c283d9f01d85fc664c7c85b56"}, + {file = "regex-2025.9.18-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:40532bff8a1a0621e7903ae57fce88feb2e8a9a9116d341701302c9302aef06e"}, + {file = "regex-2025.9.18-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:039f11b618ce8d71a1c364fdee37da1012f5a3e79b1b2819a9f389cd82fd6282"}, + {file = "regex-2025.9.18-cp312-cp312-win32.whl", hash = "sha256:e1dd06f981eb226edf87c55d523131ade7285137fbde837c34dc9d1bf309f459"}, + {file = "regex-2025.9.18-cp312-cp312-win_amd64.whl", hash = "sha256:3d86b5247bf25fa3715e385aa9ff272c307e0636ce0c9595f64568b41f0a9c77"}, + {file = "regex-2025.9.18-cp312-cp312-win_arm64.whl", hash = "sha256:032720248cbeeae6444c269b78cb15664458b7bb9ed02401d3da59fe4d68c3a5"}, + {file = "regex-2025.9.18-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2a40f929cd907c7e8ac7566ac76225a77701a6221bca937bdb70d56cb61f57b2"}, + {file = "regex-2025.9.18-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c90471671c2cdf914e58b6af62420ea9ecd06d1554d7474d50133ff26ae88feb"}, + {file = "regex-2025.9.18-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1a351aff9e07a2dabb5022ead6380cff17a4f10e4feb15f9100ee56c4d6d06af"}, + {file = "regex-2025.9.18-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bc4b8e9d16e20ddfe16430c23468a8707ccad3365b06d4536142e71823f3ca29"}, + {file = "regex-2025.9.18-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4b8cdbddf2db1c5e80338ba2daa3cfa3dec73a46fff2a7dda087c8efbf12d62f"}, + {file = "regex-2025.9.18-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a276937d9d75085b2c91fb48244349c6954f05ee97bba0963ce24a9d915b8b68"}, + {file = "regex-2025.9.18-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:92a8e375ccdc1256401c90e9dc02b8642894443d549ff5e25e36d7cf8a80c783"}, + {file = "regex-2025.9.18-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0dc6893b1f502d73037cf807a321cdc9be29ef3d6219f7970f842475873712ac"}, + {file = "regex-2025.9.18-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:a61e85bfc63d232ac14b015af1261f826260c8deb19401c0597dbb87a864361e"}, + {file = "regex-2025.9.18-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:1ef86a9ebc53f379d921fb9a7e42b92059ad3ee800fcd9e0fe6181090e9f6c23"}, + {file = "regex-2025.9.18-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d3bc882119764ba3a119fbf2bd4f1b47bc56c1da5d42df4ed54ae1e8e66fdf8f"}, + {file = "regex-2025.9.18-cp313-cp313-win32.whl", hash = "sha256:3810a65675845c3bdfa58c3c7d88624356dd6ee2fc186628295e0969005f928d"}, + {file = "regex-2025.9.18-cp313-cp313-win_amd64.whl", hash = "sha256:16eaf74b3c4180ede88f620f299e474913ab6924d5c4b89b3833bc2345d83b3d"}, + {file = "regex-2025.9.18-cp313-cp313-win_arm64.whl", hash = "sha256:4dc98ba7dd66bd1261927a9f49bd5ee2bcb3660f7962f1ec02617280fc00f5eb"}, + {file = "regex-2025.9.18-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:fe5d50572bc885a0a799410a717c42b1a6b50e2f45872e2b40f4f288f9bce8a2"}, + {file = "regex-2025.9.18-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:1b9d9a2d6cda6621551ca8cf7a06f103adf72831153f3c0d982386110870c4d3"}, + {file = "regex-2025.9.18-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:13202e4c4ac0ef9a317fff817674b293c8f7e8c68d3190377d8d8b749f566e12"}, + {file = "regex-2025.9.18-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:874ff523b0fecffb090f80ae53dc93538f8db954c8bb5505f05b7787ab3402a0"}, + {file = "regex-2025.9.18-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d13ab0490128f2bb45d596f754148cd750411afc97e813e4b3a61cf278a23bb6"}, + {file = "regex-2025.9.18-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:05440bc172bc4b4b37fb9667e796597419404dbba62e171e1f826d7d2a9ebcef"}, + {file = "regex-2025.9.18-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5514b8e4031fdfaa3d27e92c75719cbe7f379e28cacd939807289bce76d0e35a"}, + {file = "regex-2025.9.18-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:65d3c38c39efce73e0d9dc019697b39903ba25b1ad45ebbd730d2cf32741f40d"}, + {file = "regex-2025.9.18-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:ae77e447ebc144d5a26d50055c6ddba1d6ad4a865a560ec7200b8b06bc529368"}, + {file = "regex-2025.9.18-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e3ef8cf53dc8df49d7e28a356cf824e3623764e9833348b655cfed4524ab8a90"}, + {file = "regex-2025.9.18-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:9feb29817df349c976da9a0debf775c5c33fc1c8ad7b9f025825da99374770b7"}, + {file = "regex-2025.9.18-cp313-cp313t-win32.whl", hash = "sha256:168be0d2f9b9d13076940b1ed774f98595b4e3c7fc54584bba81b3cc4181742e"}, + {file = "regex-2025.9.18-cp313-cp313t-win_amd64.whl", hash = "sha256:d59ecf3bb549e491c8104fea7313f3563c7b048e01287db0a90485734a70a730"}, + {file = "regex-2025.9.18-cp313-cp313t-win_arm64.whl", hash = "sha256:dbef80defe9fb21310948a2595420b36c6d641d9bea4c991175829b2cc4bc06a"}, + {file = "regex-2025.9.18-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:c6db75b51acf277997f3adcd0ad89045d856190d13359f15ab5dda21581d9129"}, + {file = "regex-2025.9.18-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8f9698b6f6895d6db810e0bda5364f9ceb9e5b11328700a90cae573574f61eea"}, + {file = "regex-2025.9.18-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:29cd86aa7cb13a37d0f0d7c21d8d949fe402ffa0ea697e635afedd97ab4b69f1"}, + {file = "regex-2025.9.18-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7c9f285a071ee55cd9583ba24dde006e53e17780bb309baa8e4289cd472bcc47"}, + {file = "regex-2025.9.18-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5adf266f730431e3be9021d3e5b8d5ee65e563fec2883ea8093944d21863b379"}, + {file = "regex-2025.9.18-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1137cabc0f38807de79e28d3f6e3e3f2cc8cfb26bead754d02e6d1de5f679203"}, + {file = "regex-2025.9.18-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7cc9e5525cada99699ca9223cce2d52e88c52a3d2a0e842bd53de5497c604164"}, + {file = "regex-2025.9.18-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:bbb9246568f72dce29bcd433517c2be22c7791784b223a810225af3b50d1aafb"}, + {file = "regex-2025.9.18-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:6a52219a93dd3d92c675383efff6ae18c982e2d7651c792b1e6d121055808743"}, + {file = "regex-2025.9.18-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:ae9b3840c5bd456780e3ddf2f737ab55a79b790f6409182012718a35c6d43282"}, + {file = "regex-2025.9.18-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d488c236ac497c46a5ac2005a952c1a0e22a07be9f10c3e735bc7d1209a34773"}, + {file = "regex-2025.9.18-cp314-cp314-win32.whl", hash = "sha256:0c3506682ea19beefe627a38872d8da65cc01ffa25ed3f2e422dffa1474f0788"}, + {file = "regex-2025.9.18-cp314-cp314-win_amd64.whl", hash = "sha256:57929d0f92bebb2d1a83af372cd0ffba2263f13f376e19b1e4fa32aec4efddc3"}, + {file = "regex-2025.9.18-cp314-cp314-win_arm64.whl", hash = "sha256:6a4b44df31d34fa51aa5c995d3aa3c999cec4d69b9bd414a8be51984d859f06d"}, + {file = "regex-2025.9.18-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:b176326bcd544b5e9b17d6943f807697c0cb7351f6cfb45bf5637c95ff7e6306"}, + {file = "regex-2025.9.18-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:0ffd9e230b826b15b369391bec167baed57c7ce39efc35835448618860995946"}, + {file = "regex-2025.9.18-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ec46332c41add73f2b57e2f5b642f991f6b15e50e9f86285e08ffe3a512ac39f"}, + {file = "regex-2025.9.18-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b80fa342ed1ea095168a3f116637bd1030d39c9ff38dc04e54ef7c521e01fc95"}, + {file = "regex-2025.9.18-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f4d97071c0ba40f0cf2a93ed76e660654c399a0a04ab7d85472239460f3da84b"}, + {file = "regex-2025.9.18-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0ac936537ad87cef9e0e66c5144484206c1354224ee811ab1519a32373e411f3"}, + {file = "regex-2025.9.18-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dec57f96d4def58c422d212d414efe28218d58537b5445cf0c33afb1b4768571"}, + {file = "regex-2025.9.18-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:48317233294648bf7cd068857f248e3a57222259a5304d32c7552e2284a1b2ad"}, + {file = "regex-2025.9.18-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:274687e62ea3cf54846a9b25fc48a04459de50af30a7bd0b61a9e38015983494"}, + {file = "regex-2025.9.18-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:a78722c86a3e7e6aadf9579e3b0ad78d955f2d1f1a8ca4f67d7ca258e8719d4b"}, + {file = "regex-2025.9.18-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:06104cd203cdef3ade989a1c45b6215bf42f8b9dd705ecc220c173233f7cba41"}, + {file = "regex-2025.9.18-cp314-cp314t-win32.whl", hash = "sha256:2e1eddc06eeaffd249c0adb6fafc19e2118e6308c60df9db27919e96b5656096"}, + {file = "regex-2025.9.18-cp314-cp314t-win_amd64.whl", hash = "sha256:8620d247fb8c0683ade51217b459cb4a1081c0405a3072235ba43a40d355c09a"}, + {file = "regex-2025.9.18-cp314-cp314t-win_arm64.whl", hash = "sha256:b7531a8ef61de2c647cdf68b3229b071e46ec326b3138b2180acb4275f470b01"}, + {file = "regex-2025.9.18-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3dbcfcaa18e9480669030d07371713c10b4f1a41f791ffa5cb1a99f24e777f40"}, + {file = "regex-2025.9.18-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1e85f73ef7095f0380208269055ae20524bfde3f27c5384126ddccf20382a638"}, + {file = "regex-2025.9.18-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9098e29b3ea4ffffeade423f6779665e2a4f8db64e699c0ed737ef0db6ba7b12"}, + {file = "regex-2025.9.18-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90b6b7a2d0f45b7ecaaee1aec6b362184d6596ba2092dd583ffba1b78dd0231c"}, + {file = "regex-2025.9.18-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c81b892af4a38286101502eae7aec69f7cd749a893d9987a92776954f3943408"}, + {file = "regex-2025.9.18-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3b524d010973f2e1929aeb635418d468d869a5f77b52084d9f74c272189c251d"}, + {file = "regex-2025.9.18-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6b498437c026a3d5d0be0020023ff76d70ae4d77118e92f6f26c9d0423452446"}, + {file = "regex-2025.9.18-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0716e4d6e58853d83f6563f3cf25c281ff46cf7107e5f11879e32cb0b59797d9"}, + {file = "regex-2025.9.18-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:065b6956749379d41db2625f880b637d4acc14c0a4de0d25d609a62850e96d36"}, + {file = "regex-2025.9.18-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:d4a691494439287c08ddb9b5793da605ee80299dd31e95fa3f323fac3c33d9d4"}, + {file = "regex-2025.9.18-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ef8d10cc0989565bcbe45fb4439f044594d5c2b8919d3d229ea2c4238f1d55b0"}, + {file = "regex-2025.9.18-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4baeb1b16735ac969a7eeecc216f1f8b7caf60431f38a2671ae601f716a32d25"}, + {file = "regex-2025.9.18-cp39-cp39-win32.whl", hash = "sha256:8e5f41ad24a1e0b5dfcf4c4e5d9f5bd54c895feb5708dd0c1d0d35693b24d478"}, + {file = "regex-2025.9.18-cp39-cp39-win_amd64.whl", hash = "sha256:50e8290707f2fb8e314ab3831e594da71e062f1d623b05266f8cfe4db4949afd"}, + {file = "regex-2025.9.18-cp39-cp39-win_arm64.whl", hash = "sha256:039a9d7195fd88c943d7c777d4941e8ef736731947becce773c31a1009cb3c35"}, + {file = "regex-2025.9.18.tar.gz", hash = "sha256:c5ba23274c61c6fef447ba6a39333297d0c247f53059dba0bca415cac511edc4"}, ] [[package]] diff --git a/prowler/CHANGELOG.md b/prowler/CHANGELOG.md index b7691574b0..49265bf3c7 100644 --- a/prowler/CHANGELOG.md +++ b/prowler/CHANGELOG.md @@ -13,6 +13,7 @@ All notable changes to the **Prowler SDK** are documented in this file. - `cloudstorage_bucket_logging_enabled` check for GCP provider [(#9091)](https://github.com/prowler-cloud/prowler/pull/9091) - C5 compliance framework for Azure provider [(#9081)](https://github.com/prowler-cloud/prowler/pull/9081) - C5 compliance framework for the GCP provider [(#9097)](https://github.com/prowler-cloud/prowler/pull/9097) +- `organization_repository_creation_limited` check for GitHub provider [(#8844)](https://github.com/prowler-cloud/prowler/pull/8844) - HIPAA compliance framework for the GCP provider [(#8955)](https://github.com/prowler-cloud/prowler/pull/8955) - Add multiple compliance improvements [(#9145)](https://github.com/prowler-cloud/prowler/pull/9145) - Added validation for invalid checks, services, and categories in `load_checks_to_execute` function [(#8971)](https://github.com/prowler-cloud/prowler/pull/8971) diff --git a/prowler/compliance/github/cis_1.0_github.json b/prowler/compliance/github/cis_1.0_github.json index d488b92a00..f016acaabb 100644 --- a/prowler/compliance/github/cis_1.0_github.json +++ b/prowler/compliance/github/cis_1.0_github.json @@ -476,7 +476,9 @@ { "Id": "1.2.2", "Description": "Limit the ability to create repositories to trusted users and teams.", - "Checks": [], + "Checks": [ + "organization_repository_creation_limited" + ], "Attributes": [ { "Section": "1 Source Code", diff --git a/prowler/providers/github/services/organization/organization_repository_creation_limited/__init__.py b/prowler/providers/github/services/organization/organization_repository_creation_limited/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/github/services/organization/organization_repository_creation_limited/organization_repository_creation_limited.metadata.json b/prowler/providers/github/services/organization/organization_repository_creation_limited/organization_repository_creation_limited.metadata.json new file mode 100644 index 0000000000..9c83855af4 --- /dev/null +++ b/prowler/providers/github/services/organization/organization_repository_creation_limited/organization_repository_creation_limited.metadata.json @@ -0,0 +1,30 @@ +{ + "Provider": "github", + "CheckID": "organization_repository_creation_limited", + "CheckTitle": "Ensure repository creation is limited to trusted organization members.", + "CheckType": [], + "ServiceName": "organization", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "high", + "ResourceType": "GitHubOrganization", + "Description": "Ensure that repository creation is restricted so that only trusted owners or specific teams can create new repositories within the organization.", + "Risk": "Allowing all members to create repositories increases the likelihood of shadow repositories, data leakage, or malicious projects being introduced without oversight.", + "RelatedUrl": "https://docs.github.com/en/organizations/managing-organization-settings/restricting-repository-creation-in-your-organization", + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "", + "Terraform": "" + }, + "Recommendation": { + "Text": "Disable repository creation for members or limit it to specific trusted teams by adjusting Member privileges in the organization's settings.", + "Url": "https://docs.github.com/en/organizations/managing-organization-settings/restricting-repository-creation-in-your-organization" + } + }, + "Categories": [], + "DependsOn": [], + "RelatedTo": [], + "Notes": "" +} diff --git a/prowler/providers/github/services/organization/organization_repository_creation_limited/organization_repository_creation_limited.py b/prowler/providers/github/services/organization/organization_repository_creation_limited/organization_repository_creation_limited.py new file mode 100644 index 0000000000..15e5b4b0aa --- /dev/null +++ b/prowler/providers/github/services/organization/organization_repository_creation_limited/organization_repository_creation_limited.py @@ -0,0 +1,106 @@ +from typing import List + +from prowler.lib.check.models import Check, CheckReportGithub +from prowler.providers.github.services.organization.organization_client import ( + organization_client, +) + + +def _join_human_readable(items: List[str]) -> str: + """Return a simple human readable comma-separated list.""" + if not items: + return "" + if len(items) == 1: + return items[0] + return ", ".join(items[:-1]) + f" and {items[-1]}" + + +class organization_repository_creation_limited(Check): + """Check if repository creation is limited to trusted organization members.""" + + def execute(self) -> List[CheckReportGithub]: + findings = [] + for org in organization_client.organizations.values(): + repo_data = [ + getattr(org, "members_can_create_repositories", None), + getattr(org, "members_can_create_public_repositories", None), + getattr(org, "members_can_create_private_repositories", None), + getattr(org, "members_can_create_internal_repositories", None), + getattr(org, "members_allowed_repository_creation_type", None), + ] + + if all(value is None for value in repo_data): + continue + + report = CheckReportGithub(metadata=self.metadata(), resource=org) + + global_creation = getattr(org, "members_can_create_repositories", None) + public_creation = getattr( + org, "members_can_create_public_repositories", None + ) + private_creation = getattr( + org, "members_can_create_private_repositories", None + ) + internal_creation = getattr( + org, "members_can_create_internal_repositories", None + ) + creation_type = getattr( + org, "members_allowed_repository_creation_type", None + ) + + type_flags = [] + enabled_types = [] + + if global_creation is not None: + if global_creation: + enabled_types.append("repositories of any type") + else: + type_flags.append(False) + + visibility_flags = [ + (public_creation, "public repositories"), + (private_creation, "private repositories"), + (internal_creation, "internal repositories"), + ] + + for flag, label in visibility_flags: + if flag is not None: + type_flags.append(flag) + if flag: + enabled_types.append(label) + + if creation_type: + normalized_type = creation_type.lower() + if normalized_type == "none": + type_flags.append(False) + else: + creation_messages = { + "all": "repositories of any type", + "public": "public repositories", + "private": "private repositories", + "internal": "internal repositories", + "selected": "repositories for selected members or teams", + } + enabled_types.append( + creation_messages.get( + normalized_type, f"{creation_type} repositories" + ) + ) + + restricted = bool(type_flags) and all(flag is False for flag in type_flags) + + if restricted: + report.status = "PASS" + report.status_extended = f"Organization {org.name} has disabled repository creation for members." + else: + report.status = "FAIL" + unique_enabled = list(dict.fromkeys(enabled_types)) + allowed_desc = _join_human_readable(unique_enabled) + if allowed_desc: + report.status_extended = f"Organization {org.name} allows members to create {allowed_desc}." + else: + report.status_extended = f"Organization {org.name} does not have enough data to confirm repository creation restrictions." + + findings.append(report) + + return findings diff --git a/prowler/providers/github/services/organization/organization_service.py b/prowler/providers/github/services/organization/organization_service.py index 484ebcd378..2f7e9bc4ea 100644 --- a/prowler/providers/github/services/organization/organization_service.py +++ b/prowler/providers/github/services/organization/organization_service.py @@ -38,8 +38,9 @@ class Organization(GithubService): org_names_to_check = set() try: - for client in getattr(self, "clients", []) or []: - if getattr(self.provider, "organizations", None): + clients = getattr(self, "clients", []) + for client in clients: + if self.provider.organizations: org_names_to_check.update(self.provider.organizations) # If repositories are specified without organizations, don't perform organization checks @@ -147,22 +148,74 @@ class Organization(GithubService): logger.error( f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" ) + repo_creation_settings = { + "members_can_create_repositories": None, + "members_can_create_public_repositories": None, + "members_can_create_private_repositories": None, + "members_can_create_internal_repositories": None, + "members_allowed_repository_creation_type": None, + } - # Base permission (default repository permission for members) - base_perm: Optional[str] = None - try: - base_perm = getattr(org, "default_repository_permission", None) - except Exception as error: - logger.error( - f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" - ) - base_perm = None + def _extract_flag(attribute: str, expected_type: type): + """Return attribute value if it matches expected type and is not a mock placeholder.""" + try: + value = getattr(org, attribute, None) + if hasattr(value, "_mock_parent"): + return None + if expected_type is bool and isinstance(value, bool): + return value + if expected_type is str and isinstance(value, str): + return value + return None + except Exception as error: + logger.error( + f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + return None + + repo_creation_settings["members_can_create_repositories"] = _extract_flag( + "members_can_create_repositories", bool + ) + repo_creation_settings["members_can_create_public_repositories"] = ( + _extract_flag("members_can_create_public_repositories", bool) + ) + repo_creation_settings["members_can_create_private_repositories"] = ( + _extract_flag("members_can_create_private_repositories", bool) + ) + repo_creation_settings["members_can_create_internal_repositories"] = ( + _extract_flag("members_can_create_internal_repositories", bool) + ) + repo_creation_settings["members_allowed_repository_creation_type"] = ( + _extract_flag("members_allowed_repository_creation_type", str) + ) + + base_permission_raw = _extract_flag("default_repository_permission", str) + base_permission = ( + base_permission_raw.lower() + if isinstance(base_permission_raw, str) + else None + ) organizations[org.id] = Org( id=org.id, name=org.login, mfa_required=require_mfa, - base_permission=base_perm, + members_can_create_repositories=repo_creation_settings[ + "members_can_create_repositories" + ], + members_can_create_public_repositories=repo_creation_settings[ + "members_can_create_public_repositories" + ], + members_can_create_private_repositories=repo_creation_settings[ + "members_can_create_private_repositories" + ], + members_can_create_internal_repositories=repo_creation_settings[ + "members_can_create_internal_repositories" + ], + members_allowed_repository_creation_type=repo_creation_settings[ + "members_allowed_repository_creation_type" + ], + base_permission=base_permission, ) @@ -172,4 +225,9 @@ class Org(BaseModel): id: int name: str mfa_required: Optional[bool] = False + members_can_create_repositories: Optional[bool] = None + members_can_create_public_repositories: Optional[bool] = None + members_can_create_private_repositories: Optional[bool] = None + members_can_create_internal_repositories: Optional[bool] = None + members_allowed_repository_creation_type: Optional[str] = None base_permission: Optional[str] = None diff --git a/tests/providers/github/services/organization/organization_repository_creation_limited/organization_repository_creation_limited_test.py b/tests/providers/github/services/organization/organization_repository_creation_limited/organization_repository_creation_limited_test.py new file mode 100644 index 0000000000..2bacd5dda1 --- /dev/null +++ b/tests/providers/github/services/organization/organization_repository_creation_limited/organization_repository_creation_limited_test.py @@ -0,0 +1,170 @@ +from unittest import mock + +from prowler.providers.github.services.organization.organization_service import Org +from tests.providers.github.github_fixtures import set_mocked_github_provider + + +class Test_organization_repository_creation_limited: + def test_no_organizations(self): + organization_client = mock.MagicMock + organization_client.organizations = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_github_provider(), + ), + mock.patch( + "prowler.providers.github.services.organization.organization_repository_creation_limited.organization_repository_creation_limited.organization_client", + new=organization_client, + ), + ): + from prowler.providers.github.services.organization.organization_repository_creation_limited.organization_repository_creation_limited import ( + organization_repository_creation_limited, + ) + + check = organization_repository_creation_limited() + result = check.execute() + assert len(result) == 0 + + def test_repository_creation_disabled_globally(self): + organization_client = mock.MagicMock + org_name = "test-organization" + organization_client.organizations = { + 1: Org( + id=1, + name=org_name, + mfa_required=None, + members_can_create_repositories=False, + ), + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_github_provider(), + ), + mock.patch( + "prowler.providers.github.services.organization.organization_repository_creation_limited.organization_repository_creation_limited.organization_client", + new=organization_client, + ), + ): + from prowler.providers.github.services.organization.organization_repository_creation_limited.organization_repository_creation_limited import ( + organization_repository_creation_limited, + ) + + check = organization_repository_creation_limited() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_name == org_name + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Organization {org_name} has disabled repository creation for members." + ) + + def test_repository_creation_allowed_for_members(self): + organization_client = mock.MagicMock + org_name = "test-organization" + organization_client.organizations = { + 1: Org( + id=1, + name=org_name, + mfa_required=None, + members_can_create_repositories=True, + members_can_create_public_repositories=True, + ), + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_github_provider(), + ), + mock.patch( + "prowler.providers.github.services.organization.organization_repository_creation_limited.organization_repository_creation_limited.organization_client", + new=organization_client, + ), + ): + from prowler.providers.github.services.organization.organization_repository_creation_limited.organization_repository_creation_limited import ( + organization_repository_creation_limited, + ) + + check = organization_repository_creation_limited() + result = check.execute() + assert len(result) == 1 + assert result[0].status == "FAIL" + assert "public repositories" in result[0].status_extended + assert "repositories of any type" in result[0].status_extended + + def test_repository_creation_disabled_per_visibility(self): + organization_client = mock.MagicMock + org_name = "test-organization" + organization_client.organizations = { + 1: Org( + id=1, + name=org_name, + mfa_required=None, + members_can_create_public_repositories=False, + members_can_create_private_repositories=False, + members_can_create_internal_repositories=False, + ), + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_github_provider(), + ), + mock.patch( + "prowler.providers.github.services.organization.organization_repository_creation_limited.organization_repository_creation_limited.organization_client", + new=organization_client, + ), + ): + from prowler.providers.github.services.organization.organization_repository_creation_limited.organization_repository_creation_limited import ( + organization_repository_creation_limited, + ) + + check = organization_repository_creation_limited() + result = check.execute() + assert len(result) == 1 + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Organization {org_name} has disabled repository creation for members." + ) + + def test_repository_creation_disabled_via_members_allowed_type(self): + organization_client = mock.MagicMock + org_name = "test-organization" + organization_client.organizations = { + 1: Org( + id=1, + name=org_name, + mfa_required=None, + members_allowed_repository_creation_type="none", + ), + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_github_provider(), + ), + mock.patch( + "prowler.providers.github.services.organization.organization_repository_creation_limited.organization_repository_creation_limited.organization_client", + new=organization_client, + ), + ): + from prowler.providers.github.services.organization.organization_repository_creation_limited.organization_repository_creation_limited import ( + organization_repository_creation_limited, + ) + + check = organization_repository_creation_limited() + result = check.execute() + assert len(result) == 1 + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Organization {org_name} has disabled repository creation for members." + ) From 7e03b423ddcf64e4e96a1852580239c94baf76fa Mon Sep 17 00:00:00 2001 From: Daniel Barranquero <74871504+danibarranqueroo@users.noreply.github.com> Date: Thu, 6 Nov 2025 22:37:38 +0100 Subject: [PATCH 33/37] feat(api): add MongoDBAtlas provider to api (#9167) --- README.md | 2 +- api/CHANGELOG.md | 1 + .../migrations/0055_mongodbatlas_provider.py | 32 ++++++++ api/src/backend/api/models.py | 10 +++ api/src/backend/api/specs/v1.yaml | 80 ++++++++++++++++++- api/src/backend/api/tests/test_utils.py | 8 ++ api/src/backend/api/tests/test_views.py | 46 +++++++++-- api/src/backend/api/utils.py | 16 +++- .../api/v1/serializer_utils/providers.py | 15 ++++ api/src/backend/api/v1/serializers.py | 10 +++ api/src/backend/conftest.py | 17 +++- docs/introduction.mdx | 4 +- prowler/CHANGELOG.md | 1 + .../mongodbatlas/mongodbatlas_provider.py | 6 +- 14 files changed, 230 insertions(+), 18 deletions(-) create mode 100644 api/src/backend/api/migrations/0055_mongodbatlas_provider.py diff --git a/README.md b/README.md index bda691722b..9791d93e4e 100644 --- a/README.md +++ b/README.md @@ -90,7 +90,7 @@ prowler dashboard | M365 | 70 | 7 | 3 | 2 | Official | UI, API, CLI | | OCI | 51 | 13 | 1 | 10 | Official | UI, API, CLI | | IaC | [See `trivy` docs.](https://trivy.dev/latest/docs/coverage/iac/) | N/A | N/A | N/A | Official | UI, API, CLI | -| MongoDB Atlas | 10 | 3 | 0 | 0 | Official | CLI | +| MongoDB Atlas | 10 | 3 | 0 | 0 | Official | CLI, API | | LLM | [See `promptfoo` docs.](https://www.promptfoo.dev/docs/red-team/plugins/) | N/A | N/A | N/A | Official | CLI | | NHN | 6 | 2 | 1 | 0 | Unofficial | CLI | diff --git a/api/CHANGELOG.md b/api/CHANGELOG.md index 5fcf573805..5e4720bcf9 100644 --- a/api/CHANGELOG.md +++ b/api/CHANGELOG.md @@ -14,6 +14,7 @@ All notable changes to the **Prowler API** are documented in this file. - Support muting findings based on simple rules with custom reason [(#9051)](https://github.com/prowler-cloud/prowler/pull/9051) - Support C5 compliance framework for the GCP provider [(#9097)](https://github.com/prowler-cloud/prowler/pull/9097) - Support for Amazon Bedrock and OpenAI compatible providers in Lighthouse AI [(#8957)](https://github.com/prowler-cloud/prowler/pull/8957) +- Support for MongoDB Atlas provider [(#9167)](https://github.com/prowler-cloud/prowler/pull/9167) --- diff --git a/api/src/backend/api/migrations/0055_mongodbatlas_provider.py b/api/src/backend/api/migrations/0055_mongodbatlas_provider.py new file mode 100644 index 0000000000..beb7a3946a --- /dev/null +++ b/api/src/backend/api/migrations/0055_mongodbatlas_provider.py @@ -0,0 +1,32 @@ +# Generated by Django 5.1.13 on 2025-11-05 08:37 + +from django.db import migrations + +import api.db_utils + + +class Migration(migrations.Migration): + dependencies = [ + ("api", "0054_iac_provider"), + ] + + operations = [ + migrations.AlterField( + model_name="provider", + name="provider", + field=api.db_utils.ProviderEnumField( + choices=[ + ("aws", "AWS"), + ("azure", "Azure"), + ("gcp", "GCP"), + ("kubernetes", "Kubernetes"), + ("m365", "M365"), + ("github", "GitHub"), + ("mongodbatlas", "MongoDB Atlas"), + ("iac", "IaC"), + ("oraclecloud", "Oracle Cloud Infrastructure"), + ], + default="aws", + ), + ), + ] diff --git a/api/src/backend/api/models.py b/api/src/backend/api/models.py index 304275f137..7ca9594d5e 100644 --- a/api/src/backend/api/models.py +++ b/api/src/backend/api/models.py @@ -284,6 +284,7 @@ class Provider(RowLevelSecurityProtectedModel): KUBERNETES = "kubernetes", _("Kubernetes") M365 = "m365", _("M365") GITHUB = "github", _("GitHub") + MONGODBATLAS = "mongodbatlas", _("MongoDB Atlas") IAC = "iac", _("IaC") ORACLECLOUD = "oraclecloud", _("Oracle Cloud Infrastructure") @@ -381,6 +382,15 @@ class Provider(RowLevelSecurityProtectedModel): pointer="/data/attributes/uid", ) + @staticmethod + def validate_mongodbatlas_uid(value): + if not re.match(r"^[0-9a-fA-F]{24}$", value): + raise ModelValidationError( + detail="MongoDB Atlas organization ID must be a 24-character hexadecimal string.", + code="mongodbatlas-uid", + pointer="/data/attributes/uid", + ) + id = models.UUIDField(primary_key=True, default=uuid4, editable=False) inserted_at = models.DateTimeField(auto_now_add=True, editable=False) updated_at = models.DateTimeField(auto_now=True, editable=False) diff --git a/api/src/backend/api/specs/v1.yaml b/api/src/backend/api/specs/v1.yaml index 6e81e5f81b..e44dba0084 100644 --- a/api/src/backend/api/specs/v1.yaml +++ b/api/src/backend/api/specs/v1.yaml @@ -875,6 +875,7 @@ paths: - azure - gcp - github + - mongodbatlas - iac - kubernetes - m365 @@ -886,6 +887,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure - in: query @@ -900,6 +902,7 @@ paths: - azure - gcp - github + - mongodbatlas - kubernetes - m365 - oraclecloud @@ -912,6 +915,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure explode: false @@ -1409,6 +1413,7 @@ paths: - azure - gcp - github + - mongodbatlas - iac - kubernetes - m365 @@ -1420,6 +1425,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure - in: query @@ -1434,6 +1440,7 @@ paths: - azure - gcp - github + - mongodbatlas - kubernetes - m365 - oraclecloud @@ -1446,6 +1453,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure explode: false @@ -1851,6 +1859,7 @@ paths: - azure - gcp - github + - mongodbatlas - iac - kubernetes - m365 @@ -1862,6 +1871,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure - in: query @@ -1876,6 +1886,7 @@ paths: - azure - gcp - github + - mongodbatlas - kubernetes - m365 - oraclecloud @@ -1888,6 +1899,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure explode: false @@ -2291,6 +2303,7 @@ paths: - azure - gcp - github + - mongodbatlas - iac - kubernetes - m365 @@ -2302,6 +2315,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure - in: query @@ -2316,6 +2330,7 @@ paths: - azure - gcp - github + - mongodbatlas - kubernetes - m365 - oraclecloud @@ -2328,6 +2343,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure explode: false @@ -2719,6 +2735,7 @@ paths: - azure - gcp - github + - mongodbatlas - iac - kubernetes - m365 @@ -2730,6 +2747,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure - in: query @@ -2744,6 +2762,7 @@ paths: - azure - gcp - github + - mongodbatlas - kubernetes - m365 - oraclecloud @@ -2756,6 +2775,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure explode: false @@ -4551,6 +4571,7 @@ paths: - azure - gcp - github + - mongodbatlas - iac - kubernetes - m365 @@ -4562,6 +4583,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure - in: query @@ -4576,6 +4598,7 @@ paths: - azure - gcp - github + - mongodbatlas - kubernetes - m365 - oraclecloud @@ -4588,6 +4611,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure explode: false @@ -4735,6 +4759,7 @@ paths: - azure - gcp - github + - mongodbatlas - iac - kubernetes - m365 @@ -4746,6 +4771,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure - in: query @@ -4760,6 +4786,7 @@ paths: - azure - gcp - github + - mongodbatlas - kubernetes - m365 - oraclecloud @@ -4772,6 +4799,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure explode: false @@ -4985,6 +5013,7 @@ paths: - azure - gcp - github + - mongodbatlas - iac - kubernetes - m365 @@ -4996,6 +5025,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure - in: query @@ -5010,6 +5040,7 @@ paths: - azure - gcp - github + - mongodbatlas - kubernetes - m365 - oraclecloud @@ -5022,6 +5053,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure explode: false @@ -5715,6 +5747,7 @@ paths: - azure - gcp - github + - mongodbatlas - iac - kubernetes - m365 @@ -5726,6 +5759,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure - in: query @@ -5740,6 +5774,7 @@ paths: - azure - gcp - github + - mongodbatlas - kubernetes - m365 - oraclecloud @@ -5752,6 +5787,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `oraclecloud` - Oracle Cloud Infrastructure explode: false style: form @@ -6404,6 +6440,7 @@ paths: - azure - gcp - github + - mongodbatlas - iac - kubernetes - m365 @@ -6415,6 +6452,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure - in: query @@ -6429,6 +6467,7 @@ paths: - azure - gcp - github + - mongodbatlas - kubernetes - m365 - oraclecloud @@ -6441,6 +6480,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure explode: false @@ -6776,6 +6816,7 @@ paths: - azure - gcp - github + - mongodbatlas - iac - kubernetes - m365 @@ -6787,6 +6828,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure - in: query @@ -6801,6 +6843,7 @@ paths: - azure - gcp - github + - mongodbatlas - kubernetes - m365 - oraclecloud @@ -6813,6 +6856,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure explode: false @@ -7049,6 +7093,7 @@ paths: - azure - gcp - github + - mongodbatlas - iac - kubernetes - m365 @@ -7060,6 +7105,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure - in: query @@ -7074,6 +7120,7 @@ paths: - azure - gcp - github + - mongodbatlas - kubernetes - m365 - oraclecloud @@ -7086,6 +7133,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure explode: false @@ -7328,6 +7376,7 @@ paths: - azure - gcp - github + - mongodbatlas - iac - kubernetes - m365 @@ -7339,6 +7388,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure - in: query @@ -7353,6 +7403,7 @@ paths: - azure - gcp - github + - mongodbatlas - kubernetes - m365 - oraclecloud @@ -7365,6 +7416,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure explode: false @@ -8170,6 +8222,7 @@ paths: - azure - gcp - github + - mongodbatlas - iac - kubernetes - m365 @@ -8181,6 +8234,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure - in: query @@ -8195,6 +8249,7 @@ paths: - azure - gcp - github + - mongodbatlas - kubernetes - m365 - oraclecloud @@ -8207,6 +8262,7 @@ paths: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `iac` - IaC * `oraclecloud` - Oracle Cloud Infrastructure explode: false @@ -14229,7 +14285,7 @@ components: type: string description: GitHub OAuth App token for authentication. required: - - oauth_app_token + - oauth_app_token - type: object title: GitHub App Credentials properties: @@ -14242,6 +14298,18 @@ components: required: - github_app_id - github_app_key + - type: object + title: MongoDB Atlas API Key + properties: + atlas_public_key: + type: string + description: MongoDB Atlas API public key. + atlas_private_key: + type: string + description: MongoDB Atlas API private key. + required: + - atlas_public_key + - atlas_private_key - type: object title: IaC Repository Credentials properties: @@ -15280,6 +15348,7 @@ components: - kubernetes - m365 - github + - mongodbatlas - oraclecloud type: string description: |- @@ -15289,6 +15358,7 @@ components: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `oraclecloud` - Oracle Cloud Infrastructure x-spec-enum-id: 7087703783970b51 uid: @@ -15402,6 +15472,7 @@ components: - kubernetes - m365 - github + - mongodbatlas - oraclecloud type: string x-spec-enum-id: 7087703783970b51 @@ -15414,12 +15485,13 @@ components: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `oraclecloud` - Oracle Cloud Infrastructure uid: type: string title: Unique identifier for the provider, set by the provider description: Unique identifier for the provider, set by the provider, - e.g. AWS account ID, Azure subscription ID, GCP project ID, etc. + e.g. AWS account ID, Azure subscription ID, GCP project ID, MongoDB Atlas organization ID, etc. maxLength: 250 minLength: 3 required: @@ -15458,6 +15530,7 @@ components: - kubernetes - m365 - github + - mongodbatlas - oraclecloud type: string x-spec-enum-id: 7087703783970b51 @@ -15470,13 +15543,14 @@ components: * `kubernetes` - Kubernetes * `m365` - M365 * `github` - GitHub + * `mongodbatlas` - MongoDB Atlas * `oraclecloud` - Oracle Cloud Infrastructure uid: type: string minLength: 3 title: Unique identifier for the provider, set by the provider description: Unique identifier for the provider, set by the provider, - e.g. AWS account ID, Azure subscription ID, GCP project ID, etc. + e.g. AWS account ID, Azure subscription ID, GCP project ID, MongoDB Atlas organization ID, etc. maxLength: 250 required: - uid diff --git a/api/src/backend/api/tests/test_utils.py b/api/src/backend/api/tests/test_utils.py index 02378eb11b..d67df93ff5 100644 --- a/api/src/backend/api/tests/test_utils.py +++ b/api/src/backend/api/tests/test_utils.py @@ -20,8 +20,10 @@ from prowler.providers.aws.aws_provider import AwsProvider from prowler.providers.aws.lib.security_hub.security_hub import SecurityHubConnection from prowler.providers.azure.azure_provider import AzureProvider from prowler.providers.gcp.gcp_provider import GcpProvider +from prowler.providers.github.github_provider import GithubProvider from prowler.providers.kubernetes.kubernetes_provider import KubernetesProvider from prowler.providers.m365.m365_provider import M365Provider +from prowler.providers.mongodbatlas.mongodbatlas_provider import MongodbatlasProvider from prowler.providers.oraclecloud.oraclecloud_provider import OraclecloudProvider @@ -109,6 +111,8 @@ class TestReturnProwlerProvider: (Provider.ProviderChoices.AZURE.value, AzureProvider), (Provider.ProviderChoices.KUBERNETES.value, KubernetesProvider), (Provider.ProviderChoices.M365.value, M365Provider), + (Provider.ProviderChoices.GITHUB.value, GithubProvider), + (Provider.ProviderChoices.MONGODBATLAS.value, MongodbatlasProvider), (Provider.ProviderChoices.ORACLECLOUD.value, OraclecloudProvider), ], ) @@ -209,6 +213,10 @@ class TestGetProwlerProviderKwargs: Provider.ProviderChoices.ORACLECLOUD.value, {}, ), + ( + Provider.ProviderChoices.MONGODBATLAS.value, + {"atlas_organization_id": "provider_uid"}, + ), ], ) def test_get_prowler_provider_kwargs(self, provider_type, expected_extra_kwargs): diff --git a/api/src/backend/api/tests/test_views.py b/api/src/backend/api/tests/test_views.py index 82db438d44..8822bd9f12 100644 --- a/api/src/backend/api/tests/test_views.py +++ b/api/src/backend/api/tests/test_views.py @@ -1153,6 +1153,11 @@ class TestProviderViewSet: "uid": "https://gitlab.com/user/project", "alias": "GitLab Repo", }, + { + "provider": "mongodbatlas", + "uid": "64b1d3c0e4b03b1234567890", + "alias": "Atlas Organization", + }, ] ), ) @@ -1329,6 +1334,24 @@ class TestProviderViewSet: "iac-uid", "uid", ), + ( + { + "provider": "mongodbatlas", + "uid": "64b1d3c0e4b03b123456789g", + "alias": "test", + }, + "mongodbatlas-uid", + "uid", + ), + ( + { + "provider": "mongodbatlas", + "uid": "1234", + "alias": "test", + }, + "mongodbatlas-uid", + "uid", + ), ] ), ) @@ -1502,22 +1525,22 @@ class TestProviderViewSet: ( "uid.icontains", "1", - 6, - ), # Updated: includes OCI provider with "1" in UID + 7, + ), ("alias", "aws_testing_1", 1), ("alias.icontains", "aws", 2), - ("inserted_at", TODAY, 7), # Updated: 7 providers now (added OCI) + ("inserted_at", TODAY, 8), ( "inserted_at.gte", "2024-01-01", - 7, - ), # Updated: 7 providers now (added OCI) + 8, + ), ("inserted_at.lte", "2024-01-01", 0), ( "updated_at.gte", "2024-01-01", - 7, - ), # Updated: 7 providers now (added OCI) + 8, + ), ("updated_at.lte", "2024-01-01", 0), ] ), @@ -2057,6 +2080,15 @@ class TestProviderSecretViewSet: "pass_phrase": "my-secure-passphrase", }, ), + # MongoDB Atlas credentials + ( + Provider.ProviderChoices.MONGODBATLAS.value, + ProviderSecret.TypeChoices.STATIC, + { + "atlas_public_key": "public-key", + "atlas_private_key": "private-key", + }, + ), ], ) def test_provider_secrets_create_valid( diff --git a/api/src/backend/api/utils.py b/api/src/backend/api/utils.py index c7db08435b..958f24b3f0 100644 --- a/api/src/backend/api/utils.py +++ b/api/src/backend/api/utils.py @@ -21,6 +21,7 @@ from prowler.providers.github.github_provider import GithubProvider from prowler.providers.iac.iac_provider import IacProvider from prowler.providers.kubernetes.kubernetes_provider import KubernetesProvider from prowler.providers.m365.m365_provider import M365Provider +from prowler.providers.mongodbatlas.mongodbatlas_provider import MongodbatlasProvider from prowler.providers.oraclecloud.oraclecloud_provider import OraclecloudProvider @@ -70,6 +71,7 @@ def return_prowler_provider( | IacProvider | KubernetesProvider | M365Provider + | MongodbatlasProvider | OraclecloudProvider ]: """Return the Prowler provider class based on the given provider type. @@ -78,7 +80,7 @@ def return_prowler_provider( provider (Provider): The provider object containing the provider type and associated secrets. Returns: - AwsProvider | AzureProvider | GcpProvider | GithubProvider | IacProvider | KubernetesProvider | M365Provider | OraclecloudProvider: The corresponding provider class. + AwsProvider | AzureProvider | GcpProvider | GithubProvider | IacProvider | KubernetesProvider | M365Provider | OraclecloudProvider | MongodbatlasProvider: The corresponding provider class. Raises: ValueError: If the provider type specified in `provider.provider` is not supported. @@ -96,6 +98,8 @@ def return_prowler_provider( prowler_provider = M365Provider case Provider.ProviderChoices.GITHUB.value: prowler_provider = GithubProvider + case Provider.ProviderChoices.MONGODBATLAS.value: + prowler_provider = MongodbatlasProvider case Provider.ProviderChoices.IAC.value: prowler_provider = IacProvider case Provider.ProviderChoices.ORACLECLOUD.value: @@ -146,6 +150,11 @@ def get_prowler_provider_kwargs( prowler_provider_kwargs["oauth_app_token"] = provider.secret.secret[ "access_token" ] + elif provider.provider == Provider.ProviderChoices.MONGODBATLAS.value: + prowler_provider_kwargs = { + **prowler_provider_kwargs, + "atlas_organization_id": provider.uid, + } if mutelist_processor: mutelist_content = mutelist_processor.configuration.get("Mutelist", {}) @@ -166,6 +175,7 @@ def initialize_prowler_provider( | IacProvider | KubernetesProvider | M365Provider + | MongodbatlasProvider | OraclecloudProvider ): """Initialize a Prowler provider instance based on the given provider type. @@ -175,8 +185,8 @@ def initialize_prowler_provider( mutelist_processor (Processor): The mutelist processor object containing the mutelist configuration. Returns: - AwsProvider | AzureProvider | GcpProvider | GithubProvider | IacProvider | KubernetesProvider | M365Provider | OciProvider: An instance of the corresponding provider class - (`AwsProvider`, `AzureProvider`, `GcpProvider`, `GithubProvider`, `IacProvider`, `KubernetesProvider`, `M365Provider` or `OraclecloudProvider`) initialized with the + AwsProvider | AzureProvider | GcpProvider | GithubProvider | IacProvider | KubernetesProvider | M365Provider | OraclecloudProvider | MongodbatlasProvider: An instance of the corresponding provider class + (`AwsProvider`, `AzureProvider`, `GcpProvider`, `GithubProvider`, `IacProvider`, `KubernetesProvider`, `M365Provider`, `OraclecloudProvider` or `MongodbatlasProvider`) initialized with the provider's secrets. """ prowler_provider = return_prowler_provider(provider) diff --git a/api/src/backend/api/v1/serializer_utils/providers.py b/api/src/backend/api/v1/serializer_utils/providers.py index 1965a16cb5..4ec772e02f 100644 --- a/api/src/backend/api/v1/serializer_utils/providers.py +++ b/api/src/backend/api/v1/serializer_utils/providers.py @@ -289,6 +289,21 @@ from rest_framework_json_api import serializers }, "required": ["user", "fingerprint", "tenancy", "region"], }, + { + "type": "object", + "title": "MongoDB Atlas API Key", + "properties": { + "atlas_public_key": { + "type": "string", + "description": "MongoDB Atlas API public key.", + }, + "atlas_private_key": { + "type": "string", + "description": "MongoDB Atlas API private key.", + }, + }, + "required": ["atlas_public_key", "atlas_private_key"], + }, ] } ) diff --git a/api/src/backend/api/v1/serializers.py b/api/src/backend/api/v1/serializers.py index 682d94f798..c79d305942 100644 --- a/api/src/backend/api/v1/serializers.py +++ b/api/src/backend/api/v1/serializers.py @@ -1370,6 +1370,8 @@ class BaseWriteProviderSecretSerializer(BaseWriteSerializer): serializer = M365ProviderSecret(data=secret) elif provider_type == Provider.ProviderChoices.ORACLECLOUD.value: serializer = OracleCloudProviderSecret(data=secret) + elif provider_type == Provider.ProviderChoices.MONGODBATLAS.value: + serializer = MongoDBAtlasProviderSecret(data=secret) else: raise serializers.ValidationError( {"provider": f"Provider type not supported {provider_type}"} @@ -1466,6 +1468,14 @@ class GCPServiceAccountProviderSecret(serializers.Serializer): resource_name = "provider-secrets" +class MongoDBAtlasProviderSecret(serializers.Serializer): + atlas_public_key = serializers.CharField() + atlas_private_key = serializers.CharField() + + class Meta: + resource_name = "provider-secrets" + + class KubernetesProviderSecret(serializers.Serializer): kubeconfig_content = serializers.CharField() diff --git a/api/src/backend/conftest.py b/api/src/backend/conftest.py index 4e35b5c83f..d5fa21a787 100644 --- a/api/src/backend/conftest.py +++ b/api/src/backend/conftest.py @@ -506,8 +506,23 @@ def providers_fixture(tenants_fixture): alias="oci_testing", tenant_id=tenant.id, ) + provider8 = Provider.objects.create( + provider="mongodbatlas", + uid="64b1d3c0e4b03b1234567890", + alias="mongodbatlas_testing", + tenant_id=tenant.id, + ) - return provider1, provider2, provider3, provider4, provider5, provider6, provider7 + return ( + provider1, + provider2, + provider3, + provider4, + provider5, + provider6, + provider7, + provider8, + ) @pytest.fixture diff --git a/docs/introduction.mdx b/docs/introduction.mdx index aa56177351..616ba34f53 100644 --- a/docs/introduction.mdx +++ b/docs/introduction.mdx @@ -33,7 +33,7 @@ The supported providers right now are: | [Github](/user-guide/providers/github/getting-started-github) | Official | UI, API, CLI | | [Oracle Cloud](/user-guide/providers/oci/getting-started-oci) | Official | UI, API, CLI | | [Infra as Code](/user-guide/providers/iac/getting-started-iac) | Official | UI, API, CLI | -| [MongoDB Atlas](/user-guide/providers/mongodbatlas/getting-started-mongodbatlas) | Official | CLI | +| [MongoDB Atlas](/user-guide/providers/mongodbatlas/getting-started-mongodbatlas) | Official | CLI, API | | [LLM](/user-guide/providers/llm/getting-started-llm) | Official | CLI | | **NHN** | Unofficial | CLI | @@ -48,4 +48,4 @@ For more information about the checks and compliance of each provider visit [Pro Interested in contributing to Prowler? - \ No newline at end of file + diff --git a/prowler/CHANGELOG.md b/prowler/CHANGELOG.md index 49265bf3c7..da6a8a336e 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. - C5 compliance framework for the GCP provider [(#9097)](https://github.com/prowler-cloud/prowler/pull/9097) - `organization_repository_creation_limited` check for GitHub provider [(#8844)](https://github.com/prowler-cloud/prowler/pull/8844) - HIPAA compliance framework for the GCP provider [(#8955)](https://github.com/prowler-cloud/prowler/pull/8955) +- Add organization ID parameter for MongoDB Atlas provider [(#9167)](https://github.com/prowler-cloud/prowler/pull/9167) - Add multiple compliance improvements [(#9145)](https://github.com/prowler-cloud/prowler/pull/9145) - Added validation for invalid checks, services, and categories in `load_checks_to_execute` function [(#8971)](https://github.com/prowler-cloud/prowler/pull/8971) diff --git a/prowler/providers/mongodbatlas/mongodbatlas_provider.py b/prowler/providers/mongodbatlas/mongodbatlas_provider.py index 82e48eadff..b379e4ab9f 100644 --- a/prowler/providers/mongodbatlas/mongodbatlas_provider.py +++ b/prowler/providers/mongodbatlas/mongodbatlas_provider.py @@ -54,6 +54,7 @@ class MongodbatlasProvider(Provider): mutelist_content: dict = None, # Optional filters atlas_project_id: str = None, + atlas_organization_id: str = None, ): """ MongoDB Atlas Provider constructor @@ -67,6 +68,7 @@ class MongodbatlasProvider(Provider): mutelist_path: Path to the mutelist file mutelist_content: Mutelist content atlas_project_id: Project ID to filter + atlas_organization_id: Organization ID """ logger.info("Instantiating MongoDB Atlas Provider...") @@ -79,6 +81,7 @@ class MongodbatlasProvider(Provider): # Store filter options self._project_id = atlas_project_id + self._organization_id = atlas_organization_id # Audit Config if config_content: @@ -292,6 +295,7 @@ class MongodbatlasProvider(Provider): atlas_public_key: str = "", atlas_private_key: str = "", raise_on_exception: bool = True, + provider_id: str = None, ) -> Connection: """ Test connection to MongoDB Atlas @@ -300,7 +304,7 @@ class MongodbatlasProvider(Provider): atlas_public_key: MongoDB Atlas API public key atlas_private_key: MongoDB Atlas API private key raise_on_exception: Whether to raise exceptions - + provider_id: MongoDB Atlas project ID to validate access (added for API compatibility) Returns: Connection: Connection status """ From 7d5c4d32eef08fa6ccffdfd30a7e827a05a89417 Mon Sep 17 00:00:00 2001 From: UniCode Date: Fri, 7 Nov 2025 03:25:16 +0530 Subject: [PATCH 34/37] feat(aws): add compliance NIST CSF 2.0 (#9185) Co-authored-by: MrCloudSec --- prowler/CHANGELOG.md | 1 + prowler/compliance/aws/nist_csf_2.0_aws.json | 1612 ++++++++++++++++++ 2 files changed, 1613 insertions(+) create mode 100644 prowler/compliance/aws/nist_csf_2.0_aws.json diff --git a/prowler/CHANGELOG.md b/prowler/CHANGELOG.md index da6a8a336e..ffb83b7bb5 100644 --- a/prowler/CHANGELOG.md +++ b/prowler/CHANGELOG.md @@ -18,6 +18,7 @@ All notable changes to the **Prowler SDK** are documented in this file. - Add organization ID parameter for MongoDB Atlas provider [(#9167)](https://github.com/prowler-cloud/prowler/pull/9167) - Add multiple compliance improvements [(#9145)](https://github.com/prowler-cloud/prowler/pull/9145) - Added validation for invalid checks, services, and categories in `load_checks_to_execute` function [(#8971)](https://github.com/prowler-cloud/prowler/pull/8971) +- NIST CSF 2.0 compliance framework for the AWS provider [(#9185)](https://github.com/prowler-cloud/prowler/pull/9185) ### Changed - Update AWS Direct Connect service metadata to new format [(#8855)](https://github.com/prowler-cloud/prowler/pull/8855) diff --git a/prowler/compliance/aws/nist_csf_2.0_aws.json b/prowler/compliance/aws/nist_csf_2.0_aws.json new file mode 100644 index 0000000000..3430763879 --- /dev/null +++ b/prowler/compliance/aws/nist_csf_2.0_aws.json @@ -0,0 +1,1612 @@ +{ + "Framework": "NIST-CSF", + "Name": "National Institute of Standards and Technology (NIST) Cybersecurity Framework (CSF) v2.0", + "Version": "2.0", + "Provider": "AWS", + "Description": "The NIST Cybersecurity Framework (CSF) 2.0 offers a taxonomy of high-level cybersecurity outcomes that can be used by any organization regardless of its size, sector, or maturity to better understand, assess, prioritize, and communicate its cybersecurity efforts. The framework's core functions are organized into six key areas: Govern (new), Identify, Protect, Detect, Respond, and Recover. Together, these functions provide a comprehensive lifecycle approach to managing cybersecurity risk.", + "Requirements": [ + { + "Id": "oc_1", + "Name": "GV.OC-1", + "Description": "The organization's role in the supply chain is identified and communicated.", + "Attributes": [ + { + "ItemId": "oc_1", + "Section": "Govern (GV)", + "SubSection": "Organizational Context (GV.OC)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_multi_region_enabled", + "config_recorder_all_regions_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "oc_2", + "Name": "GV.OC-2", + "Description": "Legal, regulatory, and contractual requirements regarding cybersecurity — including privacy and civil liberties obligations — are understood and managed.", + "Attributes": [ + { + "ItemId": "oc_2", + "Section": "Govern (GV)", + "SubSection": "Organizational Context (GV.OC)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_multi_region_enabled", + "cloudtrail_cloudwatch_logging_enabled", + "config_recorder_all_regions_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "oc_3", + "Name": "GV.OC-3", + "Description": "The organization's place in critical infrastructure and its industry sector is identified and communicated.", + "Attributes": [ + { + "ItemId": "oc_3", + "Section": "Govern (GV)", + "SubSection": "Organizational Context (GV.OC)", + "Service": "aws" + } + ], + "Checks": [ + "config_recorder_all_regions_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "rm_1", + "Name": "GV.RM-1", + "Description": "Organizational cybersecurity risk management strategy is established, communicated, and maintained.", + "Attributes": [ + { + "ItemId": "rm_1", + "Section": "Govern (GV)", + "SubSection": "Risk Management Strategy (GV.RM)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_multi_region_enabled", + "config_recorder_all_regions_enabled", + "guardduty_is_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "rm_2", + "Name": "GV.RM-2", + "Description": "Organizational risk tolerance is determined and clearly expressed.", + "Attributes": [ + { + "ItemId": "rm_2", + "Section": "Govern (GV)", + "SubSection": "Risk Management Strategy (GV.RM)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_multi_region_enabled", + "config_recorder_all_regions_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "rm_3", + "Name": "GV.RM-3", + "Description": "The organization's determination of risk tolerance is informed by its role in critical infrastructure, sector-specific risk analysis, or organizational risk analysis.", + "Attributes": [ + { + "ItemId": "rm_3", + "Section": "Govern (GV)", + "SubSection": "Risk Management Strategy (GV.RM)", + "Service": "aws" + } + ], + "Checks": [ + "config_recorder_all_regions_enabled", + "guardduty_is_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "sc_1", + "Name": "GV.SC-1", + "Description": "Cybersecurity supply chain risk management processes are identified, established, assessed, managed, and agreed to by organizational stakeholders.", + "Attributes": [ + { + "ItemId": "sc_1", + "Section": "Govern (GV)", + "SubSection": "Cybersecurity Supply Chain Risk Management (GV.SC)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_multi_region_enabled", + "cloudtrail_s3_dataevents_read_enabled", + "cloudtrail_s3_dataevents_write_enabled", + "config_recorder_all_regions_enabled", + "guardduty_is_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "sc_2", + "Name": "GV.SC-2", + "Description": "Supply chain risk management processes are established, managed, and agreed to by organizational stakeholders.", + "Attributes": [ + { + "ItemId": "sc_2", + "Section": "Govern (GV)", + "SubSection": "Cybersecurity Supply Chain Risk Management (GV.SC)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_multi_region_enabled", + "config_recorder_all_regions_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "sc_3", + "Name": "GV.SC-3", + "Description": "Suppliers and third-party partners are evaluated, assessed, and monitored using cybersecurity supply chain risk management processes.", + "Attributes": [ + { + "ItemId": "sc_3", + "Section": "Govern (GV)", + "SubSection": "Cybersecurity Supply Chain Risk Management (GV.SC)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_multi_region_enabled", + "cloudtrail_s3_dataevents_read_enabled", + "cloudtrail_s3_dataevents_write_enabled", + "config_recorder_all_regions_enabled", + "guardduty_is_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "sc_4", + "Name": "GV.SC-4", + "Description": "Supply chain risk management processes are continuously improved.", + "Attributes": [ + { + "ItemId": "sc_4", + "Section": "Govern (GV)", + "SubSection": "Cybersecurity Supply Chain Risk Management (GV.SC)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_multi_region_enabled", + "config_recorder_all_regions_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "rr_1", + "Name": "GV.RR-1", + "Description": "Cybersecurity roles and responsibilities are coordinated and aligned with internal roles and external partners.", + "Attributes": [ + { + "ItemId": "rr_1", + "Section": "Govern (GV)", + "SubSection": "Roles, Responsibilities, and Authorities (GV.RR)", + "Service": "iam" + } + ], + "Checks": [ + "iam_aws_attached_policy_no_administrative_privileges", + "iam_customer_attached_policy_no_administrative_privileges", + "iam_inline_policy_no_administrative_privileges", + "iam_no_root_access_key", + "cloudtrail_multi_region_enabled" + ] + }, + { + "Id": "rr_2", + "Name": "GV.RR-2", + "Description": "Cybersecurity responsibilities are established and communicated.", + "Attributes": [ + { + "ItemId": "rr_2", + "Section": "Govern (GV)", + "SubSection": "Roles, Responsibilities, and Authorities (GV.RR)", + "Service": "iam" + } + ], + "Checks": [ + "iam_aws_attached_policy_no_administrative_privileges", + "iam_customer_attached_policy_no_administrative_privileges", + "iam_inline_policy_no_administrative_privileges", + "cloudtrail_multi_region_enabled" + ] + }, + { + "Id": "rr_3", + "Name": "GV.RR-3", + "Description": "Senior executives are accountable for cybersecurity risk.", + "Attributes": [ + { + "ItemId": "rr_3", + "Section": "Govern (GV)", + "SubSection": "Roles, Responsibilities, and Authorities (GV.RR)", + "Service": "aws" + } + ], + "Checks": [ + "iam_root_hardware_mfa_enabled", + "iam_root_mfa_enabled", + "iam_no_root_access_key", + "cloudtrail_multi_region_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "po_1", + "Name": "GV.PO-1", + "Description": "Cybersecurity policy is established, communicated, and enforced.", + "Attributes": [ + { + "ItemId": "po_1", + "Section": "Govern (GV)", + "SubSection": "Policies, Processes, and Procedures (GV.PO)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_multi_region_enabled", + "config_recorder_all_regions_enabled", + "iam_password_policy_reuse_24", + "securityhub_enabled" + ] + }, + { + "Id": "po_2", + "Name": "GV.PO-2", + "Description": "Cybersecurity policy is updated as needed to reflect changes in organizational priorities, threat landscape, or technology.", + "Attributes": [ + { + "ItemId": "po_2", + "Section": "Govern (GV)", + "SubSection": "Policies, Processes, and Procedures (GV.PO)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_multi_region_enabled", + "cloudtrail_cloudwatch_logging_enabled", + "config_recorder_all_regions_enabled", + "cloudwatch_log_metric_filter_policy_changes" + ] + }, + { + "Id": "po_3", + "Name": "GV.PO-3", + "Description": "Legal and regulatory requirements regarding cybersecurity, including privacy and civil liberties obligations, are understood and managed.", + "Attributes": [ + { + "ItemId": "po_3", + "Section": "Govern (GV)", + "SubSection": "Policies, Processes, and Procedures (GV.PO)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_multi_region_enabled", + "cloudtrail_cloudwatch_logging_enabled", + "config_recorder_all_regions_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "po_4", + "Name": "GV.PO-4", + "Description": "Governance and risk management processes address cybersecurity risks.", + "Attributes": [ + { + "ItemId": "po_4", + "Section": "Govern (GV)", + "SubSection": "Policies, Processes, and Procedures (GV.PO)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_multi_region_enabled", + "config_recorder_all_regions_enabled", + "guardduty_is_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "po_5", + "Name": "GV.PO-5", + "Description": "Processes for managing cybersecurity requirements for suppliers and third-party partners are established.", + "Attributes": [ + { + "ItemId": "po_5", + "Section": "Govern (GV)", + "SubSection": "Policies, Processes, and Procedures (GV.PO)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_multi_region_enabled", + "cloudtrail_s3_dataevents_read_enabled", + "cloudtrail_s3_dataevents_write_enabled", + "config_recorder_all_regions_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "ov_1", + "Name": "GV.OV-1", + "Description": "Cybersecurity risk management strategy outcomes are reviewed to inform and adjust organizational priorities.", + "Attributes": [ + { + "ItemId": "ov_1", + "Section": "Govern (GV)", + "SubSection": "Oversight (GV.OV)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_multi_region_enabled", + "config_recorder_all_regions_enabled", + "guardduty_is_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "ov_2", + "Name": "GV.OV-2", + "Description": "Cybersecurity risk management performance is measured and reported.", + "Attributes": [ + { + "ItemId": "ov_2", + "Section": "Govern (GV)", + "SubSection": "Oversight (GV.OV)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_multi_region_enabled", + "cloudtrail_cloudwatch_logging_enabled", + "config_recorder_all_regions_enabled", + "guardduty_is_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "ov_3", + "Name": "GV.OV-3", + "Description": "Cybersecurity risk management strategy and practices are reviewed and adjusted to adapt to changes in the threat landscape, technologies, or mission, business, or system environments.", + "Attributes": [ + { + "ItemId": "ov_3", + "Section": "Govern (GV)", + "SubSection": "Oversight (GV.OV)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_multi_region_enabled", + "config_recorder_all_regions_enabled", + "guardduty_is_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "ov_4", + "Name": "GV.OV-4", + "Description": "Cybersecurity risk management processes are reviewed to ensure they meet legal and regulatory requirements.", + "Attributes": [ + { + "ItemId": "ov_4", + "Section": "Govern (GV)", + "SubSection": "Oversight (GV.OV)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_multi_region_enabled", + "cloudtrail_cloudwatch_logging_enabled", + "config_recorder_all_regions_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "am_1", + "Name": "ID.AM-1", + "Description": "Physical devices and systems within the organization are inventoried.", + "Attributes": [ + { + "ItemId": "am_1", + "Section": "Identify (ID)", + "SubSection": "Asset Management (ID.AM)", + "Service": "aws" + } + ], + "Checks": [ + "config_recorder_all_regions_enabled", + "ec2_instance_managed_by_ssm" + ] + }, + { + "Id": "am_2", + "Name": "ID.AM-2", + "Description": "Software platforms and applications within the organization are inventoried.", + "Attributes": [ + { + "ItemId": "am_2", + "Section": "Identify (ID)", + "SubSection": "Asset Management (ID.AM)", + "Service": "aws" + } + ], + "Checks": [ + "ec2_instance_managed_by_ssm", + "ssm_managed_compliant_patching" + ] + }, + { + "Id": "am_3", + "Name": "ID.AM-3", + "Description": "Organizational communication and data flows are mapped.", + "Attributes": [ + { + "ItemId": "am_3", + "Section": "Identify (ID)", + "SubSection": "Asset Management (ID.AM)", + "Service": "aws" + } + ], + "Checks": [ + "apigateway_restapi_logging_enabled", + "cloudtrail_multi_region_enabled", + "elbv2_logging_enabled", + "elb_logging_enabled", + "redshift_cluster_audit_logging", + "s3_bucket_server_access_logging_enabled", + "vpc_flow_logs_enabled" + ] + }, + { + "Id": "am_5", + "Name": "ID.AM-5", + "Description": "Resources (e.g., hardware, devices, data, time, personnel, and software) are prioritized based on their classification, criticality, and business value.", + "Attributes": [ + { + "ItemId": "am_5", + "Section": "Identify (ID)", + "SubSection": "Asset Management (ID.AM)", + "Service": "aws" + } + ], + "Checks": [] + }, + { + "Id": "am_6", + "Name": "ID.AM-6", + "Description": "Cybersecurity roles and responsibilities for the entire workforce and third-party stakeholders (e.g., suppliers, customers, partners) are established.", + "Attributes": [ + { + "ItemId": "am_6", + "Section": "Identify (ID)", + "SubSection": "Asset Management (ID.AM)", + "Service": "iam" + } + ], + "Checks": [] + }, + { + "Id": "be_5", + "Name": "ID.BE-5", + "Description": "Resilience requirements to support delivery of critical services are established for all operating states (e.g. under duress/attack, during recovery, normal operations)", + "Attributes": [ + { + "ItemId": "be_5", + "Section": "Identify (ID)", + "SubSection": "Business Environment (ID.BE)", + "Service": "aws" + } + ], + "Checks": [ + "elbv2_deletion_protection", + "rds_instance_backup_enabled", + "rds_instance_multi_az", + "s3_bucket_object_versioning" + ] + }, + { + "Id": "ra_1", + "Name": "ID.RA-1", + "Description": "Asset vulnerabilities are identified and documented.", + "Attributes": [ + { + "ItemId": "ra_1", + "Section": "Identify (ID)", + "SubSection": "Risk Assessment (ID.RA)", + "Service": "aws" + } + ], + "Checks": [ + "guardduty_is_enabled", + "securityhub_enabled", + "ssm_managed_compliant_patching" + ] + }, + { + "Id": "ra_2", + "Name": "ID.RA-2", + "Description": "Cyber threat intelligence is received from information sharing forums and sources.", + "Attributes": [ + { + "ItemId": "ra_2", + "Section": "Identify (ID)", + "SubSection": "Risk Assessment (ID.RA)", + "Service": "aws" + } + ], + "Checks": [ + "guardduty_is_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "ra_3", + "Name": "ID.RA-3", + "Description": "Threats, both internal and external, are identified and documented.", + "Attributes": [ + { + "ItemId": "ra_3", + "Section": "Identify (ID)", + "SubSection": "Risk Assessment (ID.RA)", + "Service": "aws" + } + ], + "Checks": [ + "guardduty_is_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "ra_5", + "Name": "ID.RA-5", + "Description": "Threats, vulnerabilities, likelihoods, and impacts are used to determine risk.", + "Attributes": [ + { + "ItemId": "ra_5", + "Section": "Identify (ID)", + "SubSection": "Risk Assessment (ID.RA)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_cloudwatch_logging_enabled", + "cloudwatch_changes_to_network_acls_alarm_configured", + "cloudwatch_changes_to_network_gateways_alarm_configured", + "cloudwatch_changes_to_network_route_tables_alarm_configured", + "cloudwatch_changes_to_vpcs_alarm_configured", + "config_recorder_all_regions_enabled", + "ec2_instance_imdsv2_enabled", + "guardduty_is_enabled", + "cloudwatch_log_metric_filter_for_s3_bucket_policy_changes", + "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled", + "cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled", + "cloudwatch_log_metric_filter_authentication_failures", + "cloudwatch_log_metric_filter_sign_in_without_mfa", + "cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk", + "cloudwatch_log_metric_filter_policy_changes", + "cloudwatch_log_metric_filter_root_usage", + "cloudwatch_log_metric_filter_security_group_changes", + "cloudwatch_log_metric_filter_unauthorized_api_calls", + "rds_instance_enhanced_monitoring_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "id_sc_4", + "Name": "ID.SC-4", + "Description": "Suppliers and third-party partners are routinely assessed using audits, test results, or other forms of evaluations to confirm they are meeting their contractual obligations.", + "Attributes": [ + { + "ItemId": "id_sc_4", + "Section": "Identify (ID)", + "SubSection": "Supply Chain Risk Management (ID.SC)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_cloudwatch_logging_enabled", + "config_recorder_all_regions_enabled", + "ec2_instance_imdsv2_enabled", + "guardduty_is_enabled", + "cloudwatch_log_metric_filter_for_s3_bucket_policy_changes", + "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled", + "cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled", + "cloudwatch_log_metric_filter_authentication_failures", + "cloudwatch_log_metric_filter_sign_in_without_mfa", + "cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk", + "cloudwatch_log_metric_filter_policy_changes", + "cloudwatch_log_metric_filter_root_usage", + "cloudwatch_log_metric_filter_security_group_changes", + "cloudwatch_log_metric_filter_unauthorized_api_calls", + "rds_instance_enhanced_monitoring_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "ac_1", + "Name": "PR.AC-1", + "Description": "Identities and credentials are issued, managed, verified, revoked, and audited for authorized devices, users and processes.", + "Attributes": [ + { + "ItemId": "ac_1", + "Section": "Protect (PR)", + "SubSection": "Identity Management and Access Control (PR.AC)", + "Service": "aws" + } + ], + "Checks": [ + "iam_password_policy_reuse_24", + "iam_aws_attached_policy_no_administrative_privileges", + "iam_customer_attached_policy_no_administrative_privileges", + "iam_inline_policy_no_administrative_privileges", + "iam_no_root_access_key", + "iam_rotate_access_key_90_days", + "iam_user_accesskey_unused", + "iam_user_console_access_unused", + "secretsmanager_automatic_rotation_enabled" + ] + }, + { + "Id": "ac_3", + "Name": "PR.AC-3", + "Description": "Remote access is managed.", + "Attributes": [ + { + "ItemId": "ac_3", + "Section": "Protect (PR)", + "SubSection": "Identity Management and Access Control (PR.AC)", + "Service": "aws" + } + ], + "Checks": [ + "ec2_ebs_public_snapshot", + "ec2_instance_public_ip", + "emr_cluster_master_nodes_no_public_ip", + "iam_root_hardware_mfa_enabled", + "iam_root_mfa_enabled", + "iam_user_mfa_enabled_console_access", + "awslambda_function_not_publicly_accessible", + "awslambda_function_url_public", + "rds_instance_no_public_access", + "rds_snapshots_public_access", + "redshift_cluster_public_access", + "s3_bucket_public_access", + "s3_bucket_policy_public_write_access", + "s3_account_level_public_access_blocks", + "sagemaker_notebook_instance_without_direct_internet_access_configured", + "ec2_securitygroup_default_restrict_traffic", + "ec2_networkacl_allow_ingress_any_port", + "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22" + ] + }, + { + "Id": "ac_4", + "Name": "PR.AC-4", + "Description": "Access permissions and authorizations are managed, incorporating the principles of least privilege and separation of duties.", + "Attributes": [ + { + "ItemId": "ac_4", + "Section": "Protect (PR)", + "SubSection": "Identity Management and Access Control (PR.AC)", + "Service": "aws" + } + ], + "Checks": [ + "iam_aws_attached_policy_no_administrative_privileges", + "iam_customer_attached_policy_no_administrative_privileges", + "iam_inline_policy_no_administrative_privileges", + "iam_no_root_access_key", + "iam_user_accesskey_unused", + "iam_user_console_access_unused" + ] + }, + { + "Id": "ac_5", + "Name": "PR.AC-5", + "Description": "Network integrity is protected (e.g., network segregation, network segmentation).", + "Attributes": [ + { + "ItemId": "ac_5", + "Section": "Protect (PR)", + "SubSection": "Identity Management and Access Control (PR.AC)", + "Service": "aws" + } + ], + "Checks": [ + "acm_certificates_expiration_check", + "ec2_ebs_public_snapshot", + "ec2_instance_public_ip", + "emr_cluster_master_nodes_no_public_ip", + "awslambda_function_not_publicly_accessible", + "awslambda_function_url_public", + "rds_instance_no_public_access", + "rds_snapshots_public_access", + "redshift_cluster_public_access", + "s3_bucket_public_access", + "s3_bucket_policy_public_write_access", + "s3_account_level_public_access_blocks", + "sagemaker_notebook_instance_without_direct_internet_access_configured", + "ec2_securitygroup_default_restrict_traffic", + "ec2_networkacl_allow_ingress_any_port", + "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22" + ] + }, + { + "Id": "ac_6", + "Name": "PR.AC-6", + "Description": "Identities are proofed and bound to credentials and asserted in interactions.", + "Attributes": [ + { + "ItemId": "ac_6", + "Section": "Protect (PR)", + "SubSection": "Identity Management and Access Control (PR.AC)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_multi_region_enabled", + "redshift_cluster_audit_logging", + "s3_bucket_server_access_logging_enabled" + ] + }, + { + "Id": "ac_7", + "Name": "PR.AC-7", + "Description": "Users, devices, and other assets are authenticated (e.g., single-factor, multi-factor) commensurate with the risk of the transaction (e.g., individuals' security and privacy risks and other organizational risks).", + "Attributes": [ + { + "ItemId": "ac_7", + "Section": "Protect (PR)", + "SubSection": "Identity Management and Access Control (PR.AC)", + "Service": "iam" + } + ], + "Checks": [ + "iam_root_hardware_mfa_enabled", + "iam_root_mfa_enabled", + "iam_user_mfa_enabled_console_access" + ] + }, + { + "Id": "ds_1", + "Name": "PR.DS-1", + "Description": "Data-at-rest is protected.", + "Attributes": [ + { + "ItemId": "ds_1", + "Section": "Protect (PR)", + "SubSection": "Data Security (PR.DS)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_kms_encryption_enabled", + "ec2_ebs_volume_encryption", + "efs_encryption_at_rest_enabled", + "opensearch_service_domains_encryption_at_rest_enabled", + "cloudwatch_log_group_kms_encryption_enabled", + "rds_instance_storage_encrypted", + "s3_bucket_default_encryption", + "sagemaker_notebook_instance_encryption_enabled", + "sns_topics_kms_encryption_at_rest_enabled" + ] + }, + { + "Id": "ds_2", + "Name": "PR.DS-2", + "Description": "Data-in-transit is protected.", + "Attributes": [ + { + "ItemId": "ds_2", + "Section": "Protect (PR)", + "SubSection": "Data Security (PR.DS)", + "Service": "aws" + } + ], + "Checks": [ + "acm_certificates_expiration_check", + "elb_ssl_listeners", + "opensearch_service_domains_node_to_node_encryption_enabled", + "s3_bucket_secure_transport_policy" + ] + }, + { + "Id": "ds_3", + "Name": "PR.DS-3", + "Description": "Assets are formally managed throughout removal, transfers, and disposition.", + "Attributes": [ + { + "ItemId": "ds_3", + "Section": "Protect (PR)", + "SubSection": "Data Security (PR.DS)", + "Service": "aws" + } + ], + "Checks": [ + "ec2_instance_managed_by_ssm", + "ssm_managed_compliant_patching", + "ec2_elastic_ip_unassigned" + ] + }, + { + "Id": "ds_4", + "Name": "PR.DS-4", + "Description": "Adequate capacity to ensure availability is maintained.", + "Attributes": [ + { + "ItemId": "ds_4", + "Section": "Protect (PR)", + "SubSection": "Data Security (PR.DS)", + "Service": "aws" + } + ], + "Checks": [ + "elbv2_deletion_protection", + "rds_instance_enhanced_monitoring_enabled", + "rds_instance_backup_enabled", + "rds_instance_multi_az", + "s3_bucket_object_versioning" + ] + }, + { + "Id": "ds_5", + "Name": "PR.DS-5", + "Description": "Protections against data leaks are implemented.", + "Attributes": [ + { + "ItemId": "ds_5", + "Section": "Protect (PR)", + "SubSection": "Data Security (PR.DS)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_multi_region_enabled", + "cloudtrail_s3_dataevents_read_enabled", + "cloudtrail_s3_dataevents_write_enabled", + "ec2_ebs_public_snapshot", + "elbv2_logging_enabled", + "elb_logging_enabled", + "guardduty_is_enabled", + "awslambda_function_url_public", + "rds_instance_no_public_access", + "rds_snapshots_public_access", + "redshift_cluster_public_access", + "s3_bucket_server_access_logging_enabled", + "s3_bucket_public_access", + "s3_bucket_policy_public_write_access", + "s3_account_level_public_access_blocks", + "sagemaker_notebook_instance_without_direct_internet_access_configured", + "securityhub_enabled", + "vpc_flow_logs_enabled" + ] + }, + { + "Id": "ds_6", + "Name": "PR.DS-6", + "Description": "Integrity checking mechanisms are used to verify software, firmware, and information integrity.", + "Attributes": [ + { + "ItemId": "ds_6", + "Section": "Protect (PR)", + "SubSection": "Data Security (PR.DS)", + "Service": "cloudtrail" + } + ], + "Checks": [ + "cloudtrail_log_file_validation_enabled" + ] + }, + { + "Id": "ds_7", + "Name": "PR.DS-7", + "Description": "The development and testing environment(s) are separate from the production environment.", + "Attributes": [ + { + "ItemId": "ds_7", + "Section": "Protect (PR)", + "SubSection": "Data Security (PR.DS)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_log_file_validation_enabled", + "ec2_instance_managed_by_ssm", + "ec2_instance_older_than_specific_days", + "elbv2_deletion_protection", + "ssm_managed_compliant_patching", + "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22" + ] + }, + { + "Id": "ds_8", + "Name": "PR.DS-8", + "Description": "Integrity checking mechanisms are used to verify hardware integrity.", + "Attributes": [ + { + "ItemId": "ds_8", + "Section": "Protect (PR)", + "SubSection": "Data Security (PR.DS)", + "Service": "aws" + } + ], + "Checks": [ + "ec2_instance_managed_by_ssm", + "securityhub_enabled" + ] + }, + { + "Id": "ip_1", + "Name": "PR.IP-1", + "Description": "A baseline configuration of information technology/industrial control systems is created and maintained incorporating security principles (e.g. concept of least functionality).", + "Attributes": [ + { + "ItemId": "ip_1", + "Section": "Protect (PR)", + "SubSection": "Information Protection Processes and Procedures (PR.IP)", + "Service": "aws" + } + ], + "Checks": [ + "ec2_instance_managed_by_ssm", + "ec2_instance_older_than_specific_days", + "ssm_managed_compliant_patching" + ] + }, + { + "Id": "ip_2", + "Name": "PR.IP-2", + "Description": "A System Development Life Cycle to manage systems is implemented.", + "Attributes": [ + { + "ItemId": "ip_2", + "Section": "Protect (PR)", + "SubSection": "Information Protection Processes and Procedures (PR.IP)", + "Service": "aws" + } + ], + "Checks": [ + "ec2_instance_managed_by_ssm" + ] + }, + { + "Id": "ip_3", + "Name": "PR.IP-3", + "Description": "Configuration change control processes are in place.", + "Attributes": [ + { + "ItemId": "ip_3", + "Section": "Protect (PR)", + "SubSection": "Information Protection Processes and Procedures (PR.IP)", + "Service": "elb" + } + ], + "Checks": [ + "elbv2_deletion_protection" + ] + }, + { + "Id": "ip_4", + "Name": "PR.IP-4", + "Description": "Backups of information are conducted, maintained, and tested periodically.", + "Attributes": [ + { + "ItemId": "ip_4", + "Section": "Protect (PR)", + "SubSection": "Information Protection Processes and Procedures (PR.IP)", + "Service": "aws" + } + ], + "Checks": [ + "dynamodb_tables_pitr_enabled", + "rds_instance_backup_enabled", + "s3_bucket_object_versioning" + ] + }, + { + "Id": "ip_7", + "Name": "PR.IP-7", + "Description": "Protection processes are improved.", + "Attributes": [ + { + "ItemId": "ip_7", + "Section": "Protect (PR)", + "SubSection": "Information Protection Processes and Procedures (PR.IP)", + "Service": "ec2" + } + ], + "Checks": [] + }, + { + "Id": "ip_8", + "Name": "PR.IP-8", + "Description": "Effectiveness of protection technologies is shared.", + "Attributes": [ + { + "ItemId": "ip_8", + "Section": "Protect (PR)", + "SubSection": "Information Protection Processes and Procedures (PR.IP)", + "Service": "aws" + } + ], + "Checks": [ + "ec2_ebs_public_snapshot", + "ec2_instance_public_ip", + "eks_cluster_not_publicly_accessible", + "emr_cluster_master_nodes_no_public_ip", + "awslambda_function_url_public", + "rds_instance_no_public_access", + "rds_snapshots_public_access", + "redshift_cluster_public_access", + "s3_bucket_public_access", + "s3_bucket_policy_public_write_access", + "s3_account_level_public_access_blocks", + "sagemaker_notebook_instance_without_direct_internet_access_configured" + ] + }, + { + "Id": "ip_9", + "Name": "PR.IP-9", + "Description": "Response plans (Incident Response and Business Continuity) and recovery plans (Incident Recovery and Disaster Recovery) are in place and managed.", + "Attributes": [ + { + "ItemId": "ip_9", + "Section": "Protect (PR)", + "SubSection": "Information Protection Processes and Procedures (PR.IP)", + "Service": "aws" + } + ], + "Checks": [ + "dynamodb_tables_pitr_enabled", + "efs_have_backup_enabled", + "elbv2_deletion_protection", + "rds_instance_backup_enabled", + "rds_instance_multi_az", + "redshift_cluster_automated_snapshot", + "s3_bucket_object_versioning" + ] + }, + { + "Id": "ip_12", + "Name": "PR.IP-12", + "Description": "A vulnerability management plan is developed and implemented.", + "Attributes": [ + { + "ItemId": "ip_12", + "Section": "Protect (PR)", + "SubSection": "Information Protection Processes and Procedures (PR.IP)", + "Service": "aws" + } + ], + "Checks": [ + "config_recorder_all_regions_enabled", + "ec2_instance_managed_by_ssm", + "ssm_managed_compliant_patching" + ] + }, + { + "Id": "ma_2", + "Name": "PR.MA-2", + "Description": "Remote maintenance of organizational assets is approved, logged, and performed in a manner that prevents unauthorized access.", + "Attributes": [ + { + "ItemId": "ma_2", + "Section": "Protect (PR)", + "SubSection": "Maintenance (PR.MA)", + "Service": "cloudtrail" + } + ], + "Checks": [ + "cloudtrail_multi_region_enabled" + ] + }, + { + "Id": "pt_1", + "Name": "PR.PT-1", + "Description": "Audit/log records are determined, documented, implemented, and reviewed in accordance with policy.", + "Attributes": [ + { + "ItemId": "pt_1", + "Section": "Protect (PR)", + "SubSection": "Protective Technology (PR.PT)", + "Service": "aws" + } + ], + "Checks": [ + "apigateway_restapi_logging_enabled", + "cloudtrail_multi_region_enabled", + "cloudtrail_cloudwatch_logging_enabled", + "elbv2_logging_enabled", + "elb_logging_enabled", + "s3_bucket_server_access_logging_enabled", + "vpc_flow_logs_enabled" + ] + }, + { + "Id": "pt_3", + "Name": "PR.PT-3", + "Description": "The principle of least functionality is incorporated by configuring systems to provide only essential capabilities.", + "Attributes": [ + { + "ItemId": "pt_3", + "Section": "Protect (PR)", + "SubSection": "Protective Technology (PR.PT)", + "Service": "aws" + } + ], + "Checks": [ + "ec2_ebs_public_snapshot", + "iam_aws_attached_policy_no_administrative_privileges", + "iam_customer_attached_policy_no_administrative_privileges", + "iam_inline_policy_no_administrative_privileges", + "iam_no_root_access_key", + "awslambda_function_url_public", + "rds_snapshots_public_access", + "redshift_cluster_public_access", + "s3_bucket_public_access", + "s3_bucket_policy_public_write_access", + "s3_account_level_public_access_blocks" + ] + }, + { + "Id": "pt_4", + "Name": "PR.PT-4", + "Description": "Communications and control networks are protected.", + "Attributes": [ + { + "ItemId": "pt_4", + "Section": "Protect (PR)", + "SubSection": "Protective Technology (PR.PT)", + "Service": "aws" + } + ], + "Checks": [ + "awslambda_function_not_publicly_accessible", + "rds_instance_no_public_access", + "redshift_cluster_public_access", + "ec2_networkacl_allow_ingress_any_port", + "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22" + ] + }, + { + "Id": "pt_5", + "Name": "PR.PT-5", + "Description": "Mechanisms (e.g., failsafe, load balancing, hot swap) are implemented to achieve resilience requirements in normal and adverse situations.", + "Attributes": [ + { + "ItemId": "pt_5", + "Section": "Protect (PR)", + "SubSection": "Protective Technology (PR.PT)", + "Service": "aws" + } + ], + "Checks": [ + "elbv2_deletion_protection", + "rds_instance_backup_enabled", + "rds_instance_multi_az", + "s3_bucket_object_versioning" + ] + }, + { + "Id": "ae_1", + "Name": "DE.AE-1", + "Description": "A baseline of network operations and expected data flows for users and systems is established and managed.", + "Attributes": [ + { + "ItemId": "ae_1", + "Section": "Detect (DE)", + "SubSection": "Anomalies and Events (DE.AE)", + "Service": "aws" + } + ], + "Checks": [ + "apigateway_restapi_logging_enabled", + "cloudtrail_multi_region_enabled", + "cloudtrail_cloudwatch_logging_enabled", + "elbv2_logging_enabled", + "elb_logging_enabled", + "redshift_cluster_audit_logging", + "s3_bucket_server_access_logging_enabled", + "ec2_securitygroup_default_restrict_traffic", + "vpc_flow_logs_enabled", + "ec2_networkacl_allow_ingress_any_port", + "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22" + ] + }, + { + "Id": "ae_2", + "Name": "DE.AE-2", + "Description": "Detected events are analyzed to understand attack targets and methods.", + "Attributes": [ + { + "ItemId": "ae_2", + "Section": "Detect (DE)", + "SubSection": "Anomalies and Events (DE.AE)", + "Service": "aws" + } + ], + "Checks": [ + "guardduty_is_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "ae_3", + "Name": "DE.AE-3", + "Description": "Event data are collected and correlated from multiple sources and sensors.", + "Attributes": [ + { + "ItemId": "ae_3", + "Section": "Detect (DE)", + "SubSection": "Anomalies and Events (DE.AE)", + "Service": "aws" + } + ], + "Checks": [ + "apigateway_restapi_logging_enabled", + "cloudtrail_multi_region_enabled", + "cloudtrail_s3_dataevents_read_enabled", + "cloudtrail_s3_dataevents_write_enabled", + "cloudtrail_cloudwatch_logging_enabled", + "elbv2_logging_enabled", + "elb_logging_enabled", + "redshift_cluster_audit_logging", + "s3_bucket_server_access_logging_enabled", + "vpc_flow_logs_enabled" + ] + }, + { + "Id": "ae_4", + "Name": "DE.AE-4", + "Description": "Impact of events is determined.", + "Attributes": [ + { + "ItemId": "ae_4", + "Section": "Detect (DE)", + "SubSection": "Anomalies and Events (DE.AE)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_multi_region_enabled", + "cloudtrail_s3_dataevents_read_enabled", + "cloudtrail_s3_dataevents_write_enabled", + "elbv2_logging_enabled", + "elb_logging_enabled", + "guardduty_is_enabled", + "guardduty_no_high_severity_findings", + "s3_bucket_server_access_logging_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "ae_5", + "Name": "DE.AE-5", + "Description": "Incident alert thresholds are established.", + "Attributes": [ + { + "ItemId": "ae_5", + "Section": "Detect (DE)", + "SubSection": "Anomalies and Events (DE.AE)", + "Service": "aws" + } + ], + "Checks": [ + "cloudwatch_changes_to_network_acls_alarm_configured", + "cloudwatch_changes_to_network_gateways_alarm_configured", + "cloudwatch_changes_to_network_route_tables_alarm_configured", + "cloudwatch_changes_to_vpcs_alarm_configured" + ] + }, + { + "Id": "cm_1", + "Name": "DE.CM-1", + "Description": "The network is monitored to detect potential cybersecurity events.", + "Attributes": [ + { + "ItemId": "cm_1", + "Section": "Detect (DE)", + "SubSection": "Security Continuous Monitoring (DE.CM)", + "Service": "aws" + } + ], + "Checks": [ + "apigateway_restapi_logging_enabled", + "cloudtrail_multi_region_enabled", + "cloudtrail_s3_dataevents_read_enabled", + "cloudtrail_s3_dataevents_write_enabled", + "elbv2_logging_enabled", + "elb_logging_enabled", + "guardduty_is_enabled", + "s3_bucket_server_access_logging_enabled", + "securityhub_enabled", + "vpc_flow_logs_enabled" + ] + }, + { + "Id": "cm_2", + "Name": "DE.CM-2", + "Description": "The physical environment is monitored to detect potential cybersecurity events.", + "Attributes": [ + { + "ItemId": "cm_2", + "Section": "Detect (DE)", + "SubSection": "Security Continuous Monitoring (DE.CM)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_cloudwatch_logging_enabled", + "cloudwatch_changes_to_network_acls_alarm_configured", + "cloudwatch_changes_to_network_gateways_alarm_configured", + "cloudwatch_changes_to_network_route_tables_alarm_configured", + "cloudwatch_changes_to_vpcs_alarm_configured", + "config_recorder_all_regions_enabled", + "ec2_instance_imdsv2_enabled", + "guardduty_is_enabled", + "cloudwatch_log_metric_filter_for_s3_bucket_policy_changes", + "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled", + "cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled", + "cloudwatch_log_metric_filter_authentication_failures", + "cloudwatch_log_metric_filter_sign_in_without_mfa", + "cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk", + "cloudwatch_log_metric_filter_policy_changes", + "cloudwatch_log_metric_filter_root_usage", + "cloudwatch_log_metric_filter_security_group_changes", + "cloudwatch_log_metric_filter_unauthorized_api_calls", + "rds_instance_enhanced_monitoring_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "cm_3", + "Name": "DE.CM-3", + "Description": "Personnel activity is monitored to detect potential cybersecurity events.", + "Attributes": [ + { + "ItemId": "cm_3", + "Section": "Detect (DE)", + "SubSection": "Security Continuous Monitoring (DE.CM)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_multi_region_enabled", + "cloudtrail_s3_dataevents_read_enabled", + "cloudtrail_s3_dataevents_write_enabled", + "guardduty_is_enabled", + "s3_bucket_server_access_logging_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "cm_4", + "Name": "DE.CM-4", + "Description": "Malicious code is detected.", + "Attributes": [ + { + "ItemId": "cm_4", + "Section": "Detect (DE)", + "SubSection": "Security Continuous Monitoring (DE.CM)", + "Service": "aws" + } + ], + "Checks": [ + "guardduty_is_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "cm_5", + "Name": "DE.CM-5", + "Description": "Unauthorized mobile code is detected.", + "Attributes": [ + { + "ItemId": "cm_5", + "Section": "Detect (DE)", + "SubSection": "Security Continuous Monitoring (DE.CM)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_cloudwatch_logging_enabled", + "cloudwatch_changes_to_network_acls_alarm_configured", + "cloudwatch_changes_to_network_gateways_alarm_configured", + "cloudwatch_changes_to_network_route_tables_alarm_configured", + "cloudwatch_changes_to_vpcs_alarm_configured", + "ec2_instance_imdsv2_enabled", + "elbv2_waf_acl_attached", + "guardduty_is_enabled", + "guardduty_no_high_severity_findings", + "securityhub_enabled" + ] + }, + { + "Id": "cm_6", + "Name": "DE.CM-6", + "Description": "External service provider activity is monitored to detect potential cybersecurity events.", + "Attributes": [ + { + "ItemId": "cm_6", + "Section": "Detect (DE)", + "SubSection": "Security Continuous Monitoring (DE.CM)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_multi_region_enabled", + "cloudtrail_s3_dataevents_read_enabled", + "cloudtrail_s3_dataevents_write_enabled", + "guardduty_is_enabled", + "s3_bucket_server_access_logging_enabled", + "securityhub_enabled" + ] + }, + { + "Id": "cm_7", + "Name": "DE.CM-7", + "Description": "Monitoring for unauthorized personnel, connections, devices, and software is performed.", + "Attributes": [ + { + "ItemId": "cm_7", + "Section": "Detect (DE)", + "SubSection": "Security Continuous Monitoring (DE.CM)", + "Service": "aws" + } + ], + "Checks": [ + "apigateway_restapi_logging_enabled", + "cloudtrail_multi_region_enabled", + "cloudtrail_s3_dataevents_read_enabled", + "cloudtrail_s3_dataevents_write_enabled", + "elbv2_logging_enabled", + "elb_logging_enabled", + "guardduty_is_enabled", + "s3_bucket_server_access_logging_enabled", + "securityhub_enabled", + "vpc_flow_logs_enabled" + ] + }, + { + "Id": "dp_4", + "Name": "DE.DP-4", + "Description": "Event detection information is communicated.", + "Attributes": [ + { + "ItemId": "dp_4", + "Section": "Detect (DE)", + "SubSection": "Detection Processes (DE.DP)", + "Service": "aws" + } + ], + "Checks": [ + "cloudtrail_cloudwatch_logging_enabled", + "cloudwatch_changes_to_network_acls_alarm_configured", + "cloudwatch_changes_to_network_gateways_alarm_configured", + "cloudwatch_changes_to_network_route_tables_alarm_configured", + "cloudwatch_changes_to_vpcs_alarm_configured", + "ec2_instance_imdsv2_enabled", + "elbv2_waf_acl_attached", + "guardduty_is_enabled", + "guardduty_no_high_severity_findings", + "securityhub_enabled" + ] + }, + { + "Id": "dp_5", + "Name": "DE.DP-5", + "Description": "Detection processes are continuously improved.", + "Attributes": [ + { + "ItemId": "dp_5", + "Section": "Detect (DE)", + "SubSection": "Detection Processes (DE.DP)", + "Service": "ec2" + } + ], + "Checks": [ + "ec2_instance_imdsv2_enabled" + ] + }, + { + "Id": "an_2", + "Name": "RS.AN-2", + "Description": "The impact of the incident is understood.", + "Attributes": [ + { + "ItemId": "an_2", + "Section": "Respond (RS)", + "SubSection": "Analysis (RS.AN)", + "Service": "guardduty" + } + ], + "Checks": [ + "guardduty_no_high_severity_findings" + ] + }, + { + "Id": "mi_3", + "Name": "RS.MI-3", + "Description": "Newly identified vulnerabilities are mitigated or documented as accepted risks.", + "Attributes": [ + { + "ItemId": "mi_3", + "Section": "Respond (RS)", + "SubSection": "Mitigation (RS.MI)", + "Service": "guardduty" + } + ], + "Checks": [ + "guardduty_no_high_severity_findings" + ] + }, + { + "Id": "rp_1", + "Name": "RS.RP-1", + "Description": "Response plan is executed during or after an incident.", + "Attributes": [ + { + "ItemId": "rp_1", + "Section": "Respond (RS)", + "SubSection": "Response Planning (RS.RP)", + "Service": "aws" + } + ], + "Checks": [ + "dynamodb_tables_pitr_enabled", + "efs_have_backup_enabled", + "elbv2_deletion_protection", + "rds_instance_backup_enabled", + "rds_instance_multi_az", + "redshift_cluster_automated_snapshot", + "s3_bucket_object_versioning" + ] + }, + { + "Id": "rc_rp_1", + "Name": "RC.RP-1", + "Description": "Recovery plan is executed during or after a cybersecurity incident.", + "Attributes": [ + { + "ItemId": "rc_rp_1", + "Section": "Recover (RC)", + "SubSection": "Recovery Planning (RC.RP)", + "Service": "aws" + } + ], + "Checks": [ + "dynamodb_tables_pitr_enabled", + "efs_have_backup_enabled", + "elbv2_deletion_protection", + "rds_instance_backup_enabled", + "rds_instance_multi_az", + "redshift_cluster_automated_snapshot", + "s3_bucket_object_versioning" + ] + } + ] +} + From 13e486650704ef6f71f45aaab04591132f8a9e9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20De=20la=20Torre=20Vico?= Date: Thu, 6 Nov 2025 22:58:59 +0100 Subject: [PATCH 35/37] chore(oraclecloud): enhance metadata for `analytics` service (#9114) Co-authored-by: Sergio Garcia --- prowler/CHANGELOG.md | 4 ++- ...s_instance_access_restricted.metadata.json | 34 +++++++++++-------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/prowler/CHANGELOG.md b/prowler/CHANGELOG.md index ffb83b7bb5..eb33889546 100644 --- a/prowler/CHANGELOG.md +++ b/prowler/CHANGELOG.md @@ -37,6 +37,8 @@ All notable changes to the **Prowler SDK** are documented in this file. - Update AWS FMS service metadata to new format [(#9005)](https://github.com/prowler-cloud/prowler/pull/9005) - Update AWS FSx service metadata to new format [(#9006)](https://github.com/prowler-cloud/prowler/pull/9006) - Update AWS Glacier service metadata to new format [(#9007)](https://github.com/prowler-cloud/prowler/pull/9007) +- Update oraclecloud analytics service metadata to new format [(#9114)](https://github.com/prowler-cloud/prowler/pull/9114) + - Update AWS CodeArtifact service metadata to new format [(#8850)](https://github.com/prowler-cloud/prowler/pull/8850) - Rename OCI provider to oraclecloud with oci alias [(#9126)](https://github.com/prowler-cloud/prowler/pull/9126) @@ -49,7 +51,7 @@ All notable changes to the **Prowler SDK** are documented in this file. --- -## [v5.13.1] (Prowler UNRELEASED) +## [v5.13.1] (Prowler v5.13.1) ### Fixed - Add `resource_name` for checks under `logging` for the GCP provider [(#9023)](https://github.com/prowler-cloud/prowler/pull/9023) diff --git a/prowler/providers/oraclecloud/services/analytics/analytics_instance_access_restricted/analytics_instance_access_restricted.metadata.json b/prowler/providers/oraclecloud/services/analytics/analytics_instance_access_restricted/analytics_instance_access_restricted.metadata.json index 17828fc2c4..b5d7bcc6ae 100644 --- a/prowler/providers/oraclecloud/services/analytics/analytics_instance_access_restricted/analytics_instance_access_restricted.metadata.json +++ b/prowler/providers/oraclecloud/services/analytics/analytics_instance_access_restricted/analytics_instance_access_restricted.metadata.json @@ -1,34 +1,38 @@ { "Provider": "oraclecloud", "CheckID": "analytics_instance_access_restricted", - "CheckTitle": "Ensure Oracle Analytics Cloud (OAC) access is restricted to allowed sources or deployed within a Virtual Cloud Network", - "CheckType": [ - "Software and Configuration Checks", - "Industry and Regulatory Standards", - "CIS OCI Foundations Benchmark" - ], + "CheckTitle": "Oracle Analytics Cloud instance is deployed within a Virtual Cloud Network or restricts public access to allowed sources", + "CheckType": [], "ServiceName": "analytics", "SubServiceName": "", - "ResourceIdTemplate": "oci:analytics:instance", + "ResourceIdTemplate": "", "Severity": "high", "ResourceType": "AnalyticsInstance", - "Description": "Oracle Analytics Cloud access should be restricted or deployed in VCN.", - "Risk": "Not meeting this network security requirement increases risk of unauthorized access.", - "RelatedUrl": "https://docs.oracle.com/en-us/iaas/Content/Network/home.htm", + "Description": "Oracle Analytics Cloud endpoints are evaluated for **network exposure**. Public endpoints must use **restricted allowlists** of specific IPs/CIDRs; presence of `0.0.0.0/0` or no allowed sources indicates unrestricted access. Instances using a **VCN/private endpoint** or public endpoints limited to specific sources align with the intended exposure model.", + "Risk": "Unrestricted OAC endpoints allow Internet-wide access to the login surface, enabling **credential stuffing** and **brute force**. Account takeover can expose **reports and data sources** (**confidentiality**), permit **dashboard/model changes** (**integrity**), and support **lateral movement** into connected systems.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://docs.public.content.oci.oraclecloud.com/en-us/iaas/analytics-cloud/doc/public-endpoints-and-access-control-rules.html", + "https://docs.oracle.com/en/cloud/paas/analytics-cloud/acsds/connect-databases-deployed-public-ip-address.html", + "https://docs.oracle.com/en/cloud/paas/analytics-cloud/acoci/top-faqs-public-or-private-endpoint-security.html", + "https://docs.oracle.com/en/cloud/paas/analytics-cloud/acoci/manage-ingress-access-rules-public-endpoint-using-console.html", + "https://docs.oracle.com/en-us/iaas/analytics-cloud/doc/public-endpoints-and-access-control-rules.html" + ], "Remediation": { "Code": { "CLI": "", "NativeIaC": "", - "Other": "", - "Terraform": "" + "Other": "1. In OCI Console, go to Analytics & AI > Analytics Cloud and select your instance\n2. On Instance Details, under Network Access, click Edit next to Access Control\n3. Remove any 0.0.0.0/0 entry (if present)\n4. Add an access rule with the specific allowed public IP or CIDR\n5. Click Save", + "Terraform": "```hcl\nresource \"oci_analytics_analytics_instance\" \"example\" {\n compartment_id = \"\"\n name = \"\"\n feature_set = \"ENTERPRISE_ANALYTICS\"\n license_type = \"LICENSE_INCLUDED\"\n idcs_access_token = \"\"\n\n capacity {\n capacity_type = \"OLPU_COUNT\"\n capacity_value = 1\n }\n\n network_endpoint_details {\n network_endpoint_type = \"PUBLIC\"\n whitelisted_ips = [\"\"] # Critical: restrict to specific allowed CIDR; not 0.0.0.0/0\n }\n}\n```" }, "Recommendation": { - "Text": "Ensure Oracle Analytics Cloud (OAC) access is restricted to allowed sources or deployed within a Virtual Cloud Network", - "Url": "https://hub.prowler.com/check/oci/analytics_instance_access_restricted" + "Text": "Prefer **private deployment in a VCN** and apply **least privilege** network access. *If public is required*, enforce **allowlists** to specific IPs/CIDRs and never include `0.0.0.0/0`. Use **private access channels/service gateways**, require **MFA/SSO**, and apply **defense in depth** (WAF, audit monitoring) to reduce exposure.", + "Url": "https://hub.prowler.com/check/analytics_instance_access_restricted" } }, "Categories": [ - "network-security" + "internet-exposed", + "trust-boundaries" ], "DependsOn": [], "RelatedTo": [], From 5d4b7445f83527c9738ce358c543ef572b450ada Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20De=20la=20Torre=20Vico?= Date: Fri, 7 Nov 2025 10:17:42 +0100 Subject: [PATCH 36/37] chore: fix image path in README for Prowler App (#9186) --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9791d93e4e..83af8dcfb7 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ Prowler includes hundreds of built-in controls to ensure compliance with standar 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/products/img/overview.png) +![Prowler App](docs/images/products/overview.png) >For more details, refer to the [Prowler App Documentation](https://docs.prowler.com/projects/prowler-open-source/en/latest/#prowler-app-installation) @@ -73,7 +73,7 @@ prowler ```console prowler dashboard ``` -![Prowler Dashboard](docs/products/img/dashboard.png) +![Prowler Dashboard](docs/images/products/dashboard.png) # Prowler at a Glance > [!Tip] From a73a79f420e8dddfb183541fbb8afc81fcec5c62 Mon Sep 17 00:00:00 2001 From: Alan Buscaglia Date: Fri, 7 Nov 2025 10:49:27 +0100 Subject: [PATCH 37/37] fix: exclude docs folder from Tailwind content scanning (#9184) Co-authored-by: alejandrobailo --- ui/Dockerfile | 1 + ui/package.json | 2 +- ui/scripts/postinstall.js | 32 ++++++++++++++++++++++++++++++++ ui/tailwind.config.js | 5 +++-- 4 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 ui/scripts/postinstall.js diff --git a/ui/Dockerfile b/ui/Dockerfile index da920e52fe..234ed10399 100644 --- a/ui/Dockerfile +++ b/ui/Dockerfile @@ -10,6 +10,7 @@ WORKDIR /app # Install dependencies based on the preferred package manager COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./ +COPY scripts ./scripts RUN \ if [ -f package-lock.json ]; then npm install; \ else echo "Lockfile not found." && exit 1; \ diff --git a/ui/package.json b/ui/package.json index 8394a221d9..e89a07c1bf 100644 --- a/ui/package.json +++ b/ui/package.json @@ -7,7 +7,7 @@ "start": "next start", "start:standalone": "node .next/standalone/server.js", "deps:log": "node scripts/update-dependency-log.js", - "postinstall": "node -e \"const fs=require('fs'); if(fs.existsSync('scripts/update-dependency-log.js')) require('./scripts/update-dependency-log.js'); else console.log('skip deps:log (script missing)');\" && node scripts/setup-git-hooks.js", + "postinstall": "node scripts/postinstall.js", "typecheck": "tsc", "healthcheck": "npm run typecheck && npm run lint:check", "lint:check": "eslint . --ext .ts,.tsx -c .eslintrc.cjs", diff --git a/ui/scripts/postinstall.js b/ui/scripts/postinstall.js new file mode 100644 index 0000000000..d545707178 --- /dev/null +++ b/ui/scripts/postinstall.js @@ -0,0 +1,32 @@ +#!/usr/bin/env node + +/** + * Post-install script for Prowler UI + * + * This script runs after npm install to: + * 1. Update dependency log (if the script exists) + * 2. Setup git hooks (if the script exists) + */ + +const fs = require("fs"); +const path = require("path"); + +function runScriptIfExists(scriptPath, scriptName) { + const fullPath = path.join(__dirname, scriptPath); + + if (fs.existsSync(fullPath)) { + try { + require(fullPath); + } catch (error) { + console.warn(`⚠️ Error running ${scriptName}:`, error.message); + } + } else { + console.log(`Skip ${scriptName} (script missing)`); + } +} + +// Run dependency log update +runScriptIfExists("./update-dependency-log.js", "deps:log"); + +// Run git hooks setup +runScriptIfExists("./setup-git-hooks.js", "setup-git-hooks"); diff --git a/ui/tailwind.config.js b/ui/tailwind.config.js index fedd8da682..d9f032ada8 100644 --- a/ui/tailwind.config.js +++ b/ui/tailwind.config.js @@ -4,9 +4,10 @@ const { heroui } = require("@heroui/theme"); module.exports = { darkMode: ["class"], content: [ - "./components/**/*.{ts,jsx,tsx,mdx}", - "./app/**/*.{ts,jsx,tsx,mdx}", + "./components/**/*.{ts,jsx,tsx}", + "./app/**/*.{ts,jsx,tsx}", "./node_modules/@heroui/theme/dist/**/*.{js,ts,jsx,tsx}", + "!./docs/**/*", ], prefix: "", theme: {