prowler-cloud 5.13.1__py3-none-any.whl → 5.14.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. dashboard/__main__.py +2 -1
  2. dashboard/compliance/c5_azure.py +43 -0
  3. dashboard/compliance/fedramp_20x_ksi_low_aws.py +46 -0
  4. dashboard/compliance/fedramp_20x_ksi_low_azure.py +46 -0
  5. dashboard/compliance/fedramp_20x_ksi_low_gcp.py +46 -0
  6. dashboard/compliance/hipaa_gcp.py +25 -0
  7. dashboard/compliance/nist_csf_2_0_aws.py +24 -0
  8. dashboard/compliance/prowler_threatscore_kubernetes.py +28 -0
  9. prowler/AGENTS.md +366 -0
  10. prowler/CHANGELOG.md +85 -2
  11. prowler/__main__.py +54 -7
  12. prowler/compliance/aws/ens_rd2022_aws.json +1 -1
  13. prowler/compliance/aws/fedramp_20x_ksi_low_aws.json +347 -0
  14. prowler/compliance/aws/nis2_aws.json +1 -1
  15. prowler/compliance/aws/nist_csf_2.0_aws.json +1781 -0
  16. prowler/compliance/azure/c5_azure.json +9471 -0
  17. prowler/compliance/azure/ens_rd2022_azure.json +1 -1
  18. prowler/compliance/azure/fedramp_20x_ksi_low_azure.json +358 -0
  19. prowler/compliance/azure/nis2_azure.json +1 -1
  20. prowler/compliance/gcp/c5_gcp.json +9401 -0
  21. prowler/compliance/gcp/ens_rd2022_gcp.json +1 -1
  22. prowler/compliance/gcp/fedramp_20x_ksi_low_gcp.json +293 -0
  23. prowler/compliance/gcp/hipaa_gcp.json +415 -0
  24. prowler/compliance/gcp/nis2_gcp.json +1 -1
  25. prowler/compliance/github/cis_1.0_github.json +6 -2
  26. prowler/compliance/kubernetes/prowler_threatscore_kubernetes.json +1269 -0
  27. prowler/compliance/m365/prowler_threatscore_m365.json +6 -6
  28. prowler/compliance/{oci/cis_3.0_oci.json → oraclecloud/cis_3.0_oraclecloud.json} +1 -1
  29. prowler/config/config.py +59 -5
  30. prowler/config/config.yaml +3 -0
  31. prowler/lib/check/check.py +1 -9
  32. prowler/lib/check/checks_loader.py +65 -1
  33. prowler/lib/check/models.py +12 -2
  34. prowler/lib/check/utils.py +1 -7
  35. prowler/lib/cli/parser.py +17 -7
  36. prowler/lib/mutelist/mutelist.py +15 -7
  37. prowler/lib/outputs/compliance/c5/c5_azure.py +92 -0
  38. prowler/lib/outputs/compliance/c5/c5_gcp.py +92 -0
  39. prowler/lib/outputs/compliance/c5/models.py +54 -0
  40. prowler/lib/outputs/compliance/cis/{cis_oci.py → cis_oraclecloud.py} +7 -7
  41. prowler/lib/outputs/compliance/cis/models.py +3 -3
  42. prowler/lib/outputs/compliance/prowler_threatscore/models.py +29 -0
  43. prowler/lib/outputs/compliance/prowler_threatscore/prowler_threatscore_kubernetes.py +98 -0
  44. prowler/lib/outputs/finding.py +16 -5
  45. prowler/lib/outputs/html/html.py +10 -8
  46. prowler/lib/outputs/outputs.py +1 -1
  47. prowler/lib/outputs/summary_table.py +1 -1
  48. prowler/lib/powershell/powershell.py +12 -11
  49. prowler/lib/scan/scan.py +105 -24
  50. prowler/lib/utils/utils.py +1 -1
  51. prowler/providers/aws/aws_regions_by_service.json +73 -15
  52. prowler/providers/aws/lib/quick_inventory/quick_inventory.py +1 -1
  53. prowler/providers/aws/lib/security_hub/security_hub.py +1 -1
  54. prowler/providers/aws/services/account/account_service.py +1 -1
  55. prowler/providers/aws/services/awslambda/awslambda_function_using_supported_runtimes/awslambda_function_using_supported_runtimes.metadata.json +1 -3
  56. prowler/providers/aws/services/cloudwatch/cloudwatch_alarm_actions_alarm_state_configured/cloudwatch_alarm_actions_alarm_state_configured.metadata.json +23 -12
  57. prowler/providers/aws/services/cloudwatch/cloudwatch_alarm_actions_enabled/cloudwatch_alarm_actions_enabled.metadata.json +21 -12
  58. prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_acls_alarm_configured/cloudwatch_changes_to_network_acls_alarm_configured.metadata.json +23 -12
  59. prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_gateways_alarm_configured/cloudwatch_changes_to_network_gateways_alarm_configured.metadata.json +24 -12
  60. prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_route_tables_alarm_configured/cloudwatch_changes_to_network_route_tables_alarm_configured.metadata.json +21 -12
  61. prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_vpcs_alarm_configured/cloudwatch_changes_to_vpcs_alarm_configured.metadata.json +17 -11
  62. prowler/providers/aws/services/cloudwatch/cloudwatch_cross_account_sharing_disabled/cloudwatch_cross_account_sharing_disabled.metadata.json +20 -12
  63. prowler/providers/aws/services/cloudwatch/cloudwatch_log_group_kms_encryption_enabled/cloudwatch_log_group_kms_encryption_enabled.metadata.json +22 -13
  64. prowler/providers/aws/services/cloudwatch/cloudwatch_log_group_no_secrets_in_logs/cloudwatch_log_group_no_secrets_in_logs.metadata.json +22 -17
  65. prowler/providers/aws/services/cloudwatch/cloudwatch_log_group_not_publicly_accessible/cloudwatch_log_group_not_publicly_accessible.metadata.json +18 -12
  66. prowler/providers/aws/services/cloudwatch/cloudwatch_log_group_retention_policy_specific_days_enabled/cloudwatch_log_group_retention_policy_specific_days_enabled.metadata.json +27 -13
  67. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled/cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled.metadata.json +20 -12
  68. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled/cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled.metadata.json +22 -12
  69. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_authentication_failures/cloudwatch_log_metric_filter_authentication_failures.metadata.json +25 -12
  70. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_aws_organizations_changes/cloudwatch_log_metric_filter_aws_organizations_changes.metadata.json +23 -12
  71. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk/cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk.metadata.json +17 -12
  72. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_for_s3_bucket_policy_changes/cloudwatch_log_metric_filter_for_s3_bucket_policy_changes.metadata.json +21 -12
  73. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_policy_changes/cloudwatch_log_metric_filter_policy_changes.metadata.json +21 -12
  74. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_root_usage/cloudwatch_log_metric_filter_root_usage.metadata.json +27 -12
  75. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_security_group_changes/cloudwatch_log_metric_filter_security_group_changes.metadata.json +22 -12
  76. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_sign_in_without_mfa/cloudwatch_log_metric_filter_sign_in_without_mfa.metadata.json +26 -12
  77. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_unauthorized_api_calls/cloudwatch_log_metric_filter_unauthorized_api_calls.metadata.json +25 -12
  78. prowler/providers/aws/services/codeartifact/codeartifact_packages_external_public_publishing_disabled/codeartifact_packages_external_public_publishing_disabled.metadata.json +20 -11
  79. prowler/providers/aws/services/codebuild/codebuild_project_logging_enabled/codebuild_project_logging_enabled.metadata.json +22 -12
  80. prowler/providers/aws/services/codebuild/codebuild_project_no_secrets_in_variables/codebuild_project_no_secrets_in_variables.metadata.json +28 -12
  81. prowler/providers/aws/services/codebuild/codebuild_project_not_publicly_accessible/codebuild_project_not_publicly_accessible.metadata.json +22 -12
  82. prowler/providers/aws/services/codebuild/codebuild_project_older_90_days/codebuild_project_older_90_days.metadata.json +15 -10
  83. prowler/providers/aws/services/codebuild/codebuild_project_s3_logs_encrypted/codebuild_project_s3_logs_encrypted.metadata.json +19 -11
  84. prowler/providers/aws/services/codebuild/codebuild_project_source_repo_url_no_sensitive_credentials/codebuild_project_source_repo_url_no_sensitive_credentials.metadata.json +21 -12
  85. prowler/providers/aws/services/codebuild/codebuild_project_user_controlled_buildspec/codebuild_project_user_controlled_buildspec.metadata.json +19 -12
  86. prowler/providers/aws/services/codebuild/codebuild_project_uses_allowed_github_organizations/codebuild_project_uses_allowed_github_organizations.metadata.json +24 -13
  87. prowler/providers/aws/services/codebuild/codebuild_report_group_export_encrypted/codebuild_report_group_export_encrypted.metadata.json +35 -13
  88. prowler/providers/aws/services/codepipeline/__init__.py +0 -0
  89. prowler/providers/aws/services/codepipeline/codepipeline_client.py +6 -0
  90. prowler/providers/aws/services/codepipeline/codepipeline_project_repo_private/__init__.py +0 -0
  91. prowler/providers/aws/services/codepipeline/codepipeline_project_repo_private/codepipeline_project_repo_private.metadata.json +30 -0
  92. prowler/providers/aws/services/codepipeline/codepipeline_project_repo_private/codepipeline_project_repo_private.py +95 -0
  93. prowler/providers/aws/services/codepipeline/codepipeline_service.py +164 -0
  94. prowler/providers/aws/services/directconnect/directconnect_connection_redundancy/directconnect_connection_redundancy.metadata.json +18 -12
  95. prowler/providers/aws/services/directconnect/directconnect_virtual_interface_redundancy/directconnect_virtual_interface_redundancy.metadata.json +18 -12
  96. prowler/providers/aws/services/documentdb/documentdb_cluster_backup_enabled/documentdb_cluster_backup_enabled.metadata.json +24 -13
  97. prowler/providers/aws/services/documentdb/documentdb_cluster_cloudwatch_log_export/documentdb_cluster_cloudwatch_log_export.metadata.json +23 -13
  98. prowler/providers/aws/services/documentdb/documentdb_cluster_deletion_protection/documentdb_cluster_deletion_protection.metadata.json +24 -13
  99. prowler/providers/aws/services/documentdb/documentdb_cluster_multi_az_enabled/documentdb_cluster_multi_az_enabled.metadata.json +19 -13
  100. prowler/providers/aws/services/documentdb/documentdb_cluster_public_snapshot/documentdb_cluster_public_snapshot.metadata.json +20 -10
  101. prowler/providers/aws/services/documentdb/documentdb_cluster_storage_encrypted/documentdb_cluster_storage_encrypted.metadata.json +26 -13
  102. prowler/providers/aws/services/drs/drs_job_exist/drs_job_exist.metadata.json +20 -10
  103. prowler/providers/aws/services/dynamodb/dynamodb_accelerator_cluster_encryption_enabled/dynamodb_accelerator_cluster_encryption_enabled.metadata.json +18 -11
  104. prowler/providers/aws/services/dynamodb/dynamodb_accelerator_cluster_in_transit_encryption_enabled/dynamodb_accelerator_cluster_in_transit_encryption_enabled.metadata.json +16 -11
  105. prowler/providers/aws/services/dynamodb/dynamodb_accelerator_cluster_multi_az/dynamodb_accelerator_cluster_multi_az.metadata.json +21 -13
  106. prowler/providers/aws/services/dynamodb/dynamodb_table_autoscaling_enabled/dynamodb_table_autoscaling_enabled.metadata.json +20 -12
  107. prowler/providers/aws/services/dynamodb/dynamodb_table_cross_account_access/dynamodb_table_cross_account_access.metadata.json +17 -10
  108. prowler/providers/aws/services/dynamodb/dynamodb_table_deletion_protection_enabled/dynamodb_table_deletion_protection_enabled.metadata.json +21 -13
  109. prowler/providers/aws/services/dynamodb/dynamodb_table_protected_by_backup_plan/dynamodb_table_protected_by_backup_plan.metadata.json +18 -12
  110. prowler/providers/aws/services/dynamodb/dynamodb_tables_kms_cmk_encryption_enabled/dynamodb_tables_kms_cmk_encryption_enabled.metadata.json +18 -12
  111. prowler/providers/aws/services/dynamodb/dynamodb_tables_pitr_enabled/dynamodb_tables_pitr_enabled.metadata.json +19 -12
  112. prowler/providers/aws/services/ecr/ecr_registry_scan_images_on_push_enabled/ecr_registry_scan_images_on_push_enabled.metadata.json +16 -11
  113. prowler/providers/aws/services/ecr/ecr_repositories_lifecycle_policy_enabled/ecr_repositories_lifecycle_policy_enabled.metadata.json +22 -13
  114. prowler/providers/aws/services/ecr/ecr_repositories_not_publicly_accessible/ecr_repositories_not_publicly_accessible.metadata.json +19 -13
  115. prowler/providers/aws/services/ecr/ecr_repositories_scan_images_on_push_enabled/ecr_repositories_scan_images_on_push_enabled.metadata.json +21 -13
  116. prowler/providers/aws/services/ecr/ecr_repositories_scan_vulnerabilities_in_latest_image/ecr_repositories_scan_vulnerabilities_in_latest_image.metadata.json +22 -12
  117. prowler/providers/aws/services/ecr/ecr_repositories_tag_immutability/ecr_repositories_tag_immutability.metadata.json +20 -12
  118. prowler/providers/aws/services/ecs/ecs_cluster_container_insights_enabled/ecs_cluster_container_insights_enabled.metadata.json +21 -11
  119. prowler/providers/aws/services/ecs/ecs_service_fargate_latest_platform_version/ecs_service_fargate_latest_platform_version.metadata.json +20 -11
  120. prowler/providers/aws/services/ecs/ecs_service_no_assign_public_ip/ecs_service_no_assign_public_ip.metadata.json +18 -12
  121. prowler/providers/aws/services/ecs/ecs_task_definitions_containers_readonly_access/ecs_task_definitions_containers_readonly_access.metadata.json +20 -13
  122. prowler/providers/aws/services/ecs/ecs_task_definitions_host_namespace_not_shared/ecs_task_definitions_host_namespace_not_shared.metadata.json +21 -13
  123. prowler/providers/aws/services/ecs/ecs_task_definitions_host_networking_mode_users/ecs_task_definitions_host_networking_mode_users.metadata.json +26 -13
  124. prowler/providers/aws/services/ecs/ecs_task_definitions_logging_block_mode/ecs_task_definitions_logging_block_mode.metadata.json +19 -12
  125. prowler/providers/aws/services/ecs/ecs_task_definitions_logging_enabled/ecs_task_definitions_logging_enabled.metadata.json +18 -12
  126. prowler/providers/aws/services/ecs/ecs_task_definitions_no_environment_secrets/ecs_task_definitions_no_environment_secrets.metadata.json +16 -12
  127. prowler/providers/aws/services/ecs/ecs_task_definitions_no_privileged_containers/ecs_task_definitions_no_privileged_containers.metadata.json +21 -14
  128. prowler/providers/aws/services/ecs/ecs_task_set_no_assign_public_ip/ecs_task_set_no_assign_public_ip.metadata.json +19 -13
  129. prowler/providers/aws/services/eks/eks_cluster_deletion_protection_enabled/eks_cluster_deletion_protection_enabled.metadata.json +20 -13
  130. prowler/providers/aws/services/eks/eks_cluster_kms_cmk_encryption_in_secrets_enabled/eks_cluster_kms_cmk_encryption_in_secrets_enabled.metadata.json +20 -13
  131. prowler/providers/aws/services/eks/eks_cluster_network_policy_enabled/eks_cluster_network_policy_enabled.metadata.json +20 -14
  132. prowler/providers/aws/services/eks/eks_cluster_not_publicly_accessible/eks_cluster_not_publicly_accessible.metadata.json +22 -13
  133. prowler/providers/aws/services/eks/eks_cluster_private_nodes_enabled/eks_cluster_private_nodes_enabled.metadata.json +19 -13
  134. prowler/providers/aws/services/eks/eks_cluster_uses_a_supported_version/eks_cluster_uses_a_supported_version.metadata.json +21 -12
  135. prowler/providers/aws/services/eks/eks_control_plane_logging_all_types_enabled/eks_control_plane_logging_all_types_enabled.metadata.json +20 -13
  136. prowler/providers/aws/services/elasticache/elasticache_cluster_uses_public_subnet/elasticache_cluster_uses_public_subnet.metadata.json +20 -12
  137. prowler/providers/aws/services/elasticache/elasticache_redis_cluster_auto_minor_version_upgrades/elasticache_redis_cluster_auto_minor_version_upgrades.metadata.json +21 -12
  138. prowler/providers/aws/services/elasticache/elasticache_redis_cluster_automatic_failover_enabled/elasticache_redis_cluster_automatic_failover_enabled.metadata.json +20 -13
  139. prowler/providers/aws/services/elasticache/elasticache_redis_cluster_backup_enabled/elasticache_redis_cluster_backup_enabled.metadata.json +23 -13
  140. prowler/providers/aws/services/elasticache/elasticache_redis_cluster_in_transit_encryption_enabled/elasticache_redis_cluster_in_transit_encryption_enabled.metadata.json +21 -12
  141. prowler/providers/aws/services/elasticache/elasticache_redis_cluster_multi_az_enabled/elasticache_redis_cluster_multi_az_enabled.metadata.json +22 -14
  142. prowler/providers/aws/services/elasticache/elasticache_redis_cluster_rest_encryption_enabled/elasticache_redis_cluster_rest_encryption_enabled.metadata.json +20 -11
  143. prowler/providers/aws/services/elasticache/elasticache_redis_replication_group_auth_enabled/elasticache_redis_replication_group_auth_enabled.metadata.json +23 -13
  144. prowler/providers/aws/services/elasticbeanstalk/elasticbeanstalk_environment_cloudwatch_logging_enabled/elasticbeanstalk_environment_cloudwatch_logging_enabled.metadata.json +18 -12
  145. prowler/providers/aws/services/elasticbeanstalk/elasticbeanstalk_environment_enhanced_health_reporting/elasticbeanstalk_environment_enhanced_health_reporting.metadata.json +17 -12
  146. prowler/providers/aws/services/elasticbeanstalk/elasticbeanstalk_environment_managed_updates_enabled/elasticbeanstalk_environment_managed_updates_enabled.metadata.json +17 -11
  147. prowler/providers/aws/services/elb/elb_connection_draining_enabled/elb_connection_draining_enabled.metadata.json +22 -13
  148. prowler/providers/aws/services/elb/elb_cross_zone_load_balancing_enabled/elb_cross_zone_load_balancing_enabled.metadata.json +24 -13
  149. prowler/providers/aws/services/elb/elb_desync_mitigation_mode/elb_desync_mitigation_mode.metadata.json +20 -11
  150. prowler/providers/aws/services/elb/elb_insecure_ssl_ciphers/elb_insecure_ssl_ciphers.metadata.json +20 -10
  151. prowler/providers/aws/services/elb/elb_internet_facing/elb_internet_facing.metadata.json +20 -11
  152. prowler/providers/aws/services/elb/elb_is_in_multiple_az/elb_is_in_multiple_az.metadata.json +20 -12
  153. prowler/providers/aws/services/elb/elb_logging_enabled/elb_logging_enabled.metadata.json +19 -12
  154. prowler/providers/aws/services/elb/elb_ssl_listeners/elb_ssl_listeners.metadata.json +19 -11
  155. prowler/providers/aws/services/elb/elb_ssl_listeners_use_acm_certificate/elb_ssl_listeners_use_acm_certificate.metadata.json +17 -12
  156. prowler/providers/aws/services/elbv2/elbv2_cross_zone_load_balancing_enabled/elbv2_cross_zone_load_balancing_enabled.metadata.json +21 -13
  157. prowler/providers/aws/services/elbv2/elbv2_deletion_protection/elbv2_deletion_protection.metadata.json +19 -11
  158. prowler/providers/aws/services/elbv2/elbv2_desync_mitigation_mode/elbv2_desync_mitigation_mode.metadata.json +21 -12
  159. prowler/providers/aws/services/elbv2/elbv2_insecure_ssl_ciphers/elbv2_insecure_ssl_ciphers.metadata.json +18 -11
  160. prowler/providers/aws/services/elbv2/elbv2_internet_facing/elbv2_internet_facing.metadata.json +17 -10
  161. prowler/providers/aws/services/elbv2/elbv2_is_in_multiple_az/elbv2_is_in_multiple_az.metadata.json +22 -13
  162. prowler/providers/aws/services/elbv2/elbv2_listeners_underneath/elbv2_listeners_underneath.metadata.json +18 -12
  163. prowler/providers/aws/services/elbv2/elbv2_logging_enabled/elbv2_logging_enabled.metadata.json +17 -12
  164. prowler/providers/aws/services/elbv2/elbv2_nlb_tls_termination_enabled/elbv2_nlb_tls_termination_enabled.metadata.json +18 -11
  165. prowler/providers/aws/services/elbv2/elbv2_ssl_listeners/elbv2_ssl_listeners.metadata.json +18 -12
  166. prowler/providers/aws/services/elbv2/elbv2_waf_acl_attached/elbv2_waf_acl_attached.metadata.json +16 -11
  167. prowler/providers/aws/services/emr/emr_cluster_account_public_block_enabled/emr_cluster_account_public_block_enabled.metadata.json +21 -13
  168. prowler/providers/aws/services/emr/emr_cluster_master_nodes_no_public_ip/emr_cluster_master_nodes_no_public_ip.metadata.json +24 -11
  169. prowler/providers/aws/services/emr/emr_cluster_publicly_accesible/emr_cluster_publicly_accesible.metadata.json +18 -11
  170. prowler/providers/aws/services/eventbridge/eventbridge_bus_cross_account_access/eventbridge_bus_cross_account_access.metadata.json +26 -13
  171. prowler/providers/aws/services/eventbridge/eventbridge_bus_exposed/eventbridge_bus_exposed.metadata.json +21 -11
  172. prowler/providers/aws/services/eventbridge/eventbridge_global_endpoint_event_replication_enabled/eventbridge_global_endpoint_event_replication_enabled.metadata.json +24 -13
  173. prowler/providers/aws/services/eventbridge/eventbridge_schema_registry_cross_account_access/eventbridge_schema_registry_cross_account_access.metadata.json +26 -14
  174. prowler/providers/aws/services/firehose/firehose_stream_encrypted_at_rest/firehose_stream_encrypted_at_rest.metadata.json +26 -15
  175. prowler/providers/aws/services/firehose/firehose_stream_encrypted_at_rest/firehose_stream_encrypted_at_rest.py +15 -16
  176. prowler/providers/aws/services/fms/fms_policy_compliant/fms_policy_compliant.metadata.json +23 -11
  177. prowler/providers/aws/services/fsx/fsx_file_system_copy_tags_to_backups_enabled/fsx_file_system_copy_tags_to_backups_enabled.metadata.json +19 -12
  178. prowler/providers/aws/services/fsx/fsx_file_system_copy_tags_to_volumes_enabled/fsx_file_system_copy_tags_to_volumes_enabled.metadata.json +17 -12
  179. prowler/providers/aws/services/fsx/fsx_windows_file_system_multi_az_enabled/fsx_windows_file_system_multi_az_enabled.metadata.json +22 -13
  180. prowler/providers/aws/services/glacier/glacier_vaults_policy_public_access/glacier_vaults_policy_public_access.metadata.json +21 -12
  181. prowler/providers/aws/services/iam/lib/policy.py +24 -16
  182. prowler/providers/aws/services/kinesis/kinesis_stream_data_retention_period/kinesis_stream_data_retention_period.metadata.json +21 -13
  183. prowler/providers/aws/services/kinesis/kinesis_stream_encrypted_at_rest/kinesis_stream_encrypted_at_rest.metadata.json +22 -13
  184. prowler/providers/azure/services/cosmosdb/cosmosdb_service.py +7 -2
  185. prowler/providers/azure/services/defender/defender_service.py +4 -2
  186. prowler/providers/azure/services/postgresql/postgresql_flexible_server_entra_id_authentication_enabled/__init__.py +0 -0
  187. prowler/providers/azure/services/postgresql/postgresql_flexible_server_entra_id_authentication_enabled/postgresql_flexible_server_entra_id_authentication_enabled.metadata.json +36 -0
  188. prowler/providers/azure/services/postgresql/postgresql_flexible_server_entra_id_authentication_enabled/postgresql_flexible_server_entra_id_authentication_enabled.py +43 -0
  189. prowler/providers/azure/services/postgresql/postgresql_service.py +66 -9
  190. prowler/providers/azure/services/storage/storage_service.py +13 -4
  191. prowler/providers/azure/services/vm/vm_service.py +4 -7
  192. prowler/providers/common/arguments.py +19 -16
  193. prowler/providers/common/provider.py +2 -18
  194. prowler/providers/gcp/services/artifacts/artifacts_container_analysis_enabled/artifacts_container_analysis_enabled.metadata.json +16 -15
  195. prowler/providers/gcp/services/cloudresourcemanager/cloudresourcemanager_service.py +30 -4
  196. prowler/providers/gcp/services/cloudstorage/cloudstorage_audit_logs_enabled/__init__.py +0 -0
  197. prowler/providers/gcp/services/cloudstorage/cloudstorage_audit_logs_enabled/cloudstorage_audit_logs_enabled.metadata.json +36 -0
  198. prowler/providers/gcp/services/cloudstorage/cloudstorage_audit_logs_enabled/cloudstorage_audit_logs_enabled.py +61 -0
  199. prowler/providers/gcp/services/cloudstorage/cloudstorage_bucket_log_retention_policy_lock/cloudstorage_bucket_log_retention_policy_lock.metadata.json +12 -9
  200. prowler/providers/gcp/services/cloudstorage/cloudstorage_bucket_log_retention_policy_lock/cloudstorage_bucket_log_retention_policy_lock.py +10 -3
  201. prowler/providers/gcp/services/cloudstorage/cloudstorage_bucket_logging_enabled/__init__.py +0 -0
  202. prowler/providers/gcp/services/cloudstorage/cloudstorage_bucket_logging_enabled/cloudstorage_bucket_logging_enabled.metadata.json +36 -0
  203. prowler/providers/gcp/services/cloudstorage/cloudstorage_bucket_logging_enabled/cloudstorage_bucket_logging_enabled.py +40 -0
  204. prowler/providers/gcp/services/cloudstorage/cloudstorage_bucket_soft_delete_enabled/__init__.py +0 -0
  205. prowler/providers/gcp/services/cloudstorage/cloudstorage_bucket_soft_delete_enabled/cloudstorage_bucket_soft_delete_enabled.metadata.json +36 -0
  206. prowler/providers/gcp/services/cloudstorage/cloudstorage_bucket_soft_delete_enabled/cloudstorage_bucket_soft_delete_enabled.py +31 -0
  207. prowler/providers/gcp/services/cloudstorage/cloudstorage_bucket_sufficient_retention_period/__init__.py +0 -0
  208. prowler/providers/gcp/services/cloudstorage/cloudstorage_bucket_sufficient_retention_period/cloudstorage_bucket_sufficient_retention_period.metadata.json +35 -0
  209. prowler/providers/gcp/services/cloudstorage/cloudstorage_bucket_sufficient_retention_period/cloudstorage_bucket_sufficient_retention_period.py +55 -0
  210. prowler/providers/gcp/services/cloudstorage/cloudstorage_bucket_versioning_enabled/__init__.py +0 -0
  211. prowler/providers/gcp/services/cloudstorage/cloudstorage_bucket_versioning_enabled/cloudstorage_bucket_versioning_enabled.metadata.json +36 -0
  212. prowler/providers/gcp/services/cloudstorage/cloudstorage_bucket_versioning_enabled/cloudstorage_bucket_versioning_enabled.py +30 -0
  213. prowler/providers/gcp/services/cloudstorage/cloudstorage_service.py +48 -2
  214. prowler/providers/github/services/organization/organization_default_repository_permission_strict/__init__.py +0 -0
  215. prowler/providers/github/services/organization/organization_default_repository_permission_strict/organization_default_repository_permission_strict.metadata.json +35 -0
  216. prowler/providers/github/services/organization/organization_default_repository_permission_strict/organization_default_repository_permission_strict.py +36 -0
  217. prowler/providers/github/services/organization/organization_members_mfa_required/organization_members_mfa_required.metadata.json +14 -8
  218. prowler/providers/github/services/organization/organization_repository_creation_limited/__init__.py +0 -0
  219. prowler/providers/github/services/organization/organization_repository_creation_limited/organization_repository_creation_limited.metadata.json +30 -0
  220. prowler/providers/github/services/organization/organization_repository_creation_limited/organization_repository_creation_limited.py +106 -0
  221. prowler/providers/github/services/organization/organization_service.py +84 -10
  222. prowler/providers/iac/iac_provider.py +279 -55
  223. prowler/providers/kubernetes/services/etcd/etcd_client_cert_auth/etcd_client_cert_auth.metadata.json +18 -13
  224. prowler/providers/kubernetes/services/etcd/etcd_no_auto_tls/etcd_no_auto_tls.metadata.json +16 -11
  225. prowler/providers/kubernetes/services/etcd/etcd_no_peer_auto_tls/etcd_no_peer_auto_tls.metadata.json +16 -11
  226. prowler/providers/kubernetes/services/etcd/etcd_peer_client_cert_auth/etcd_peer_client_cert_auth.metadata.json +18 -13
  227. prowler/providers/kubernetes/services/etcd/etcd_peer_tls_config/etcd_peer_tls_config.metadata.json +16 -12
  228. prowler/providers/kubernetes/services/etcd/etcd_tls_encryption/etcd_tls_encryption.metadata.json +16 -11
  229. prowler/providers/kubernetes/services/etcd/etcd_unique_ca/etcd_unique_ca.metadata.json +16 -10
  230. prowler/providers/m365/lib/powershell/m365_powershell.py +80 -93
  231. prowler/providers/m365/m365_provider.py +1 -6
  232. prowler/providers/mongodbatlas/exceptions/exceptions.py +16 -0
  233. prowler/providers/mongodbatlas/mongodbatlas_provider.py +15 -3
  234. prowler/providers/mongodbatlas/services/projects/projects_auditing_enabled/projects_auditing_enabled.metadata.json +20 -9
  235. prowler/providers/mongodbatlas/services/projects/projects_network_access_list_exposed_to_internet/projects_network_access_list_exposed_to_internet.metadata.json +14 -9
  236. prowler/providers/oraclecloud/lib/arguments/arguments.py +4 -13
  237. prowler/providers/oraclecloud/lib/service/service.py +3 -3
  238. prowler/providers/oraclecloud/{oci_provider.py → oraclecloud_provider.py} +15 -15
  239. prowler/providers/oraclecloud/services/analytics/analytics_instance_access_restricted/analytics_instance_access_restricted.metadata.json +20 -16
  240. prowler/providers/oraclecloud/services/audit/audit_log_retention_period_365_days/audit_log_retention_period_365_days.metadata.json +17 -17
  241. prowler/providers/oraclecloud/services/blockstorage/blockstorage_block_volume_encrypted_with_cmk/blockstorage_block_volume_encrypted_with_cmk.metadata.json +17 -19
  242. prowler/providers/oraclecloud/services/blockstorage/blockstorage_boot_volume_encrypted_with_cmk/blockstorage_boot_volume_encrypted_with_cmk.metadata.json +18 -18
  243. prowler/providers/oraclecloud/services/cloudguard/cloudguard_enabled/cloudguard_enabled.metadata.json +17 -18
  244. prowler/providers/oraclecloud/services/compute/compute_instance_in_transit_encryption_enabled/compute_instance_in_transit_encryption_enabled.metadata.json +1 -1
  245. prowler/providers/oraclecloud/services/compute/compute_instance_legacy_metadata_endpoint_disabled/compute_instance_legacy_metadata_endpoint_disabled.metadata.json +1 -1
  246. prowler/providers/oraclecloud/services/compute/compute_instance_secure_boot_enabled/compute_instance_secure_boot_enabled.metadata.json +1 -1
  247. prowler/providers/oraclecloud/services/database/database_autonomous_database_access_restricted/database_autonomous_database_access_restricted.metadata.json +1 -1
  248. prowler/providers/oraclecloud/services/events/events_notification_topic_and_subscription_exists/events_notification_topic_and_subscription_exists.metadata.json +1 -1
  249. prowler/providers/oraclecloud/services/events/events_rule_cloudguard_problems/events_rule_cloudguard_problems.metadata.json +1 -1
  250. prowler/providers/oraclecloud/services/events/events_rule_iam_group_changes/events_rule_iam_group_changes.metadata.json +1 -1
  251. prowler/providers/oraclecloud/services/events/events_rule_iam_policy_changes/events_rule_iam_policy_changes.metadata.json +1 -1
  252. prowler/providers/oraclecloud/services/events/events_rule_identity_provider_changes/events_rule_identity_provider_changes.metadata.json +1 -1
  253. prowler/providers/oraclecloud/services/events/events_rule_idp_group_mapping_changes/events_rule_idp_group_mapping_changes.metadata.json +1 -1
  254. prowler/providers/oraclecloud/services/events/events_rule_local_user_authentication/events_rule_local_user_authentication.metadata.json +1 -1
  255. prowler/providers/oraclecloud/services/events/events_rule_network_gateway_changes/events_rule_network_gateway_changes.metadata.json +1 -1
  256. prowler/providers/oraclecloud/services/events/events_rule_network_security_group_changes/events_rule_network_security_group_changes.metadata.json +1 -1
  257. prowler/providers/oraclecloud/services/events/events_rule_route_table_changes/events_rule_route_table_changes.metadata.json +1 -1
  258. prowler/providers/oraclecloud/services/events/events_rule_security_list_changes/events_rule_security_list_changes.metadata.json +1 -1
  259. prowler/providers/oraclecloud/services/events/events_rule_user_changes/events_rule_user_changes.metadata.json +1 -1
  260. prowler/providers/oraclecloud/services/events/events_rule_vcn_changes/events_rule_vcn_changes.metadata.json +1 -1
  261. prowler/providers/oraclecloud/services/filestorage/filestorage_file_system_encrypted_with_cmk/filestorage_file_system_encrypted_with_cmk.metadata.json +1 -1
  262. prowler/providers/oraclecloud/services/identity/identity_iam_admins_cannot_update_tenancy_admins/identity_iam_admins_cannot_update_tenancy_admins.metadata.json +1 -1
  263. prowler/providers/oraclecloud/services/identity/identity_instance_principal_used/identity_instance_principal_used.metadata.json +1 -1
  264. prowler/providers/oraclecloud/services/identity/identity_no_resources_in_root_compartment/identity_no_resources_in_root_compartment.metadata.json +1 -1
  265. prowler/providers/oraclecloud/services/identity/identity_non_root_compartment_exists/identity_non_root_compartment_exists.metadata.json +1 -1
  266. prowler/providers/oraclecloud/services/identity/identity_password_policy_expires_within_365_days/identity_password_policy_expires_within_365_days.metadata.json +1 -1
  267. prowler/providers/oraclecloud/services/identity/identity_password_policy_minimum_length_14/identity_password_policy_minimum_length_14.metadata.json +1 -1
  268. prowler/providers/oraclecloud/services/identity/identity_password_policy_prevents_reuse/identity_password_policy_prevents_reuse.metadata.json +1 -1
  269. prowler/providers/oraclecloud/services/identity/identity_service_level_admins_exist/identity_service_level_admins_exist.metadata.json +1 -1
  270. prowler/providers/oraclecloud/services/identity/identity_tenancy_admin_permissions_limited/identity_tenancy_admin_permissions_limited.metadata.json +1 -1
  271. prowler/providers/oraclecloud/services/identity/identity_tenancy_admin_users_no_api_keys/identity_tenancy_admin_users_no_api_keys.metadata.json +1 -1
  272. prowler/providers/oraclecloud/services/identity/identity_user_api_keys_rotated_90_days/identity_user_api_keys_rotated_90_days.metadata.json +1 -1
  273. prowler/providers/oraclecloud/services/identity/identity_user_auth_tokens_rotated_90_days/identity_user_auth_tokens_rotated_90_days.metadata.json +1 -1
  274. prowler/providers/oraclecloud/services/identity/identity_user_customer_secret_keys_rotated_90_days/identity_user_customer_secret_keys_rotated_90_days.metadata.json +1 -1
  275. prowler/providers/oraclecloud/services/identity/identity_user_db_passwords_rotated_90_days/identity_user_db_passwords_rotated_90_days.metadata.json +1 -1
  276. prowler/providers/oraclecloud/services/identity/identity_user_mfa_enabled_console_access/identity_user_mfa_enabled_console_access.metadata.json +1 -1
  277. prowler/providers/oraclecloud/services/identity/identity_user_valid_email_address/identity_user_valid_email_address.metadata.json +1 -1
  278. prowler/providers/oraclecloud/services/integration/integration_instance_access_restricted/integration_instance_access_restricted.metadata.json +1 -1
  279. prowler/providers/oraclecloud/services/kms/kms_key_rotation_enabled/kms_key_rotation_enabled.metadata.json +1 -1
  280. prowler/providers/oraclecloud/services/network/network_default_security_list_restricts_traffic/network_default_security_list_restricts_traffic.metadata.json +1 -1
  281. 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 -1
  282. 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 -1
  283. 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 -1
  284. 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 -1
  285. prowler/providers/oraclecloud/services/network/network_vcn_subnet_flow_logs_enabled/network_vcn_subnet_flow_logs_enabled.metadata.json +1 -1
  286. prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_encrypted_with_cmk/objectstorage_bucket_encrypted_with_cmk.metadata.json +1 -1
  287. prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_logging_enabled/objectstorage_bucket_logging_enabled.metadata.json +1 -1
  288. prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_not_publicly_accessible/objectstorage_bucket_not_publicly_accessible.metadata.json +1 -1
  289. prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_versioning_enabled/objectstorage_bucket_versioning_enabled.metadata.json +1 -1
  290. {prowler_cloud-5.13.1.dist-info → prowler_cloud-5.14.0.dist-info}/METADATA +17 -16
  291. {prowler_cloud-5.13.1.dist-info → prowler_cloud-5.14.0.dist-info}/RECORD +295 -246
  292. /prowler/compliance/{oci → oraclecloud}/__init__.py +0 -0
  293. {prowler_cloud-5.13.1.dist-info → prowler_cloud-5.14.0.dist-info}/LICENSE +0 -0
  294. {prowler_cloud-5.13.1.dist-info → prowler_cloud-5.14.0.dist-info}/WHEEL +0 -0
  295. {prowler_cloud-5.13.1.dist-info → prowler_cloud-5.14.0.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,92 @@
1
+ from prowler.config.config import timestamp
2
+ from prowler.lib.check.compliance_models import Compliance
3
+ from prowler.lib.outputs.compliance.c5.models import GCPC5Model
4
+ from prowler.lib.outputs.compliance.compliance_output import ComplianceOutput
5
+ from prowler.lib.outputs.finding import Finding
6
+
7
+
8
+ class GCPC5(ComplianceOutput):
9
+ """
10
+ This class represents the GCP C5 compliance output.
11
+
12
+ Attributes:
13
+ - _data (list): A list to store transformed data from findings.
14
+ - _file_descriptor (TextIOWrapper): A file descriptor to write data to a file.
15
+
16
+ Methods:
17
+ - transform: Transforms findings into GCP C5 compliance format.
18
+ """
19
+
20
+ def transform(
21
+ self,
22
+ findings: list[Finding],
23
+ compliance: Compliance,
24
+ compliance_name: str,
25
+ ) -> None:
26
+ """
27
+ Transforms a list of findings into GCP C5 compliance format.
28
+
29
+ Parameters:
30
+ - findings (list): A list of findings.
31
+ - compliance (Compliance): A compliance model.
32
+ - compliance_name (str): The name of the compliance model.
33
+
34
+ Returns:
35
+ - None
36
+ """
37
+ for finding in findings:
38
+ # Get the compliance requirements for the finding
39
+ finding_requirements = finding.compliance.get(compliance_name, [])
40
+ for requirement in compliance.Requirements:
41
+ if requirement.Id in finding_requirements:
42
+ for attribute in requirement.Attributes:
43
+ compliance_row = GCPC5Model(
44
+ Provider=finding.provider,
45
+ Description=compliance.Description,
46
+ ProjectId=finding.account_uid,
47
+ Location=finding.region,
48
+ AssessmentDate=str(timestamp),
49
+ Requirements_Id=requirement.Id,
50
+ Requirements_Description=requirement.Description,
51
+ Requirements_Attributes_Section=attribute.Section,
52
+ Requirements_Attributes_SubSection=attribute.SubSection,
53
+ Requirements_Attributes_Type=attribute.Type,
54
+ Requirements_Attributes_AboutCriteria=attribute.AboutCriteria,
55
+ Requirements_Attributes_ComplementaryCriteria=attribute.ComplementaryCriteria,
56
+ Status=finding.status,
57
+ StatusExtended=finding.status_extended,
58
+ ResourceId=finding.resource_uid,
59
+ ResourceName=finding.resource_name,
60
+ CheckId=finding.check_id,
61
+ Muted=finding.muted,
62
+ Framework=compliance.Framework,
63
+ Name=compliance.Name,
64
+ )
65
+ self._data.append(compliance_row)
66
+ # Add manual requirements to the compliance output
67
+ for requirement in compliance.Requirements:
68
+ if not requirement.Checks:
69
+ for attribute in requirement.Attributes:
70
+ compliance_row = GCPC5Model(
71
+ Provider=compliance.Provider.lower(),
72
+ Description=compliance.Description,
73
+ ProjectId="",
74
+ Location="",
75
+ AssessmentDate=str(timestamp),
76
+ Requirements_Id=requirement.Id,
77
+ Requirements_Description=requirement.Description,
78
+ Requirements_Attributes_Section=attribute.Section,
79
+ Requirements_Attributes_SubSection=attribute.SubSection,
80
+ Requirements_Attributes_Type=attribute.Type,
81
+ Requirements_Attributes_AboutCriteria=attribute.AboutCriteria,
82
+ Requirements_Attributes_ComplementaryCriteria=attribute.ComplementaryCriteria,
83
+ Status="MANUAL",
84
+ StatusExtended="Manual check",
85
+ ResourceId="manual_check",
86
+ ResourceName="Manual check",
87
+ CheckId="manual",
88
+ Muted=False,
89
+ Framework=compliance.Framework,
90
+ Name=compliance.Name,
91
+ )
92
+ self._data.append(compliance_row)
@@ -28,3 +28,57 @@ class AWSC5Model(BaseModel):
28
28
  Muted: bool
29
29
  Framework: str
30
30
  Name: str
31
+
32
+
33
+ class AzureC5Model(BaseModel):
34
+ """
35
+ AzureC5Model generates a finding's output in Azure C5 Compliance format.
36
+ """
37
+
38
+ Provider: str
39
+ Description: str
40
+ SubscriptionId: str
41
+ Location: str
42
+ AssessmentDate: str
43
+ Requirements_Id: str
44
+ Requirements_Description: str
45
+ Requirements_Attributes_Section: str
46
+ Requirements_Attributes_SubSection: str = None
47
+ Requirements_Attributes_Type: str = None
48
+ Requirements_Attributes_AboutCriteria: Optional[str] = None
49
+ Requirements_Attributes_ComplementaryCriteria: Optional[str] = None
50
+ Status: str
51
+ StatusExtended: str
52
+ ResourceId: str
53
+ ResourceName: str
54
+ CheckId: str
55
+ Muted: bool
56
+ Framework: str
57
+ Name: str
58
+
59
+
60
+ class GCPC5Model(BaseModel):
61
+ """
62
+ GCPC5Model generates a finding's output in GCP C5 Compliance format.
63
+ """
64
+
65
+ Provider: str
66
+ Description: str
67
+ ProjectId: str
68
+ Location: str
69
+ AssessmentDate: str
70
+ Requirements_Id: str
71
+ Requirements_Description: str
72
+ Requirements_Attributes_Section: str
73
+ Requirements_Attributes_SubSection: str = None
74
+ Requirements_Attributes_Type: str = None
75
+ Requirements_Attributes_AboutCriteria: Optional[str] = None
76
+ Requirements_Attributes_ComplementaryCriteria: Optional[str] = None
77
+ Status: str
78
+ StatusExtended: str
79
+ ResourceId: str
80
+ ResourceName: str
81
+ CheckId: str
82
+ Muted: bool
83
+ Framework: str
84
+ Name: str
@@ -1,20 +1,20 @@
1
1
  from prowler.config.config import timestamp
2
2
  from prowler.lib.check.compliance_models import Compliance
3
- from prowler.lib.outputs.compliance.cis.models import OCICISModel
3
+ from prowler.lib.outputs.compliance.cis.models import OracleCloudCISModel
4
4
  from prowler.lib.outputs.compliance.compliance_output import ComplianceOutput
5
5
  from prowler.lib.outputs.finding import Finding
6
6
 
7
7
 
8
- class OCICIS(ComplianceOutput):
8
+ class OracleCloudCIS(ComplianceOutput):
9
9
  """
10
- This class represents the OCI CIS compliance output.
10
+ This class represents the Oracle Cloud CIS compliance output.
11
11
 
12
12
  Attributes:
13
13
  - _data (list): A list to store transformed data from findings.
14
14
  - _file_descriptor (TextIOWrapper): A file descriptor to write data to a file.
15
15
 
16
16
  Methods:
17
- - transform: Transforms findings into OCI CIS compliance format.
17
+ - transform: Transforms findings into Oracle Cloud CIS compliance format.
18
18
  """
19
19
 
20
20
  def transform(
@@ -24,7 +24,7 @@ class OCICIS(ComplianceOutput):
24
24
  compliance_name: str,
25
25
  ) -> None:
26
26
  """
27
- Transforms a list of findings into OCI CIS compliance format.
27
+ Transforms a list of findings into Oracle Cloud CIS compliance format.
28
28
 
29
29
  Parameters:
30
30
  - findings (list): A list of findings.
@@ -40,7 +40,7 @@ class OCICIS(ComplianceOutput):
40
40
  for requirement in compliance.Requirements:
41
41
  if requirement.Id in finding_requirements:
42
42
  for attribute in requirement.Attributes:
43
- compliance_row = OCICISModel(
43
+ compliance_row = OracleCloudCISModel(
44
44
  Provider=finding.provider,
45
45
  Description=compliance.Description,
46
46
  TenancyId=finding.account_uid,
@@ -74,7 +74,7 @@ class OCICIS(ComplianceOutput):
74
74
  for requirement in compliance.Requirements:
75
75
  if not requirement.Checks:
76
76
  for attribute in requirement.Attributes:
77
- compliance_row = OCICISModel(
77
+ compliance_row = OracleCloudCISModel(
78
78
  Provider=compliance.Provider.lower(),
79
79
  Description=compliance.Description,
80
80
  TenancyId="",
@@ -207,9 +207,9 @@ class GithubCISModel(BaseModel):
207
207
  Name: str
208
208
 
209
209
 
210
- class OCICISModel(BaseModel):
210
+ class OracleCloudCISModel(BaseModel):
211
211
  """
212
- OCICISModel generates a finding's output in OCI CIS Compliance format.
212
+ OracleCloudCISModel generates a finding's output in Oracle Cloud CIS Compliance format.
213
213
  """
214
214
 
215
215
  Provider: str
@@ -248,7 +248,7 @@ CIS_GCP = GCPCISModel
248
248
  CIS_Kubernetes = KubernetesCISModel
249
249
  CIS_M365 = M365CISModel
250
250
  CIS_Github = GithubCISModel
251
- CIS_OCI = OCICISModel
251
+ CIS_OracleCloud = OracleCloudCISModel
252
252
 
253
253
 
254
254
  # TODO: Create a parent class for the common fields of CIS and have the specific classes from each provider to inherit from it.
@@ -117,3 +117,32 @@ class ProwlerThreatScoreM365Model(BaseModel):
117
117
  Muted: bool
118
118
  Framework: str
119
119
  Name: str
120
+
121
+
122
+ class ProwlerThreatScoreKubernetesModel(BaseModel):
123
+ """
124
+ ProwlerThreatScoreKubernetesModel generates a finding's output in Kubernetes Prowler ThreatScore Compliance format.
125
+ """
126
+
127
+ Provider: str
128
+ Description: str
129
+ Context: str
130
+ Namespace: str
131
+ AssessmentDate: str
132
+ Requirements_Id: str
133
+ Requirements_Description: str
134
+ Requirements_Attributes_Title: str
135
+ Requirements_Attributes_Section: str
136
+ Requirements_Attributes_SubSection: Optional[str] = None
137
+ Requirements_Attributes_AttributeDescription: str
138
+ Requirements_Attributes_AdditionalInformation: str
139
+ Requirements_Attributes_LevelOfRisk: int
140
+ Requirements_Attributes_Weight: int
141
+ Status: str
142
+ StatusExtended: str
143
+ ResourceId: str
144
+ ResourceName: str
145
+ CheckId: str
146
+ Muted: bool
147
+ Framework: str
148
+ Name: str
@@ -0,0 +1,98 @@
1
+ from prowler.config.config import timestamp
2
+ from prowler.lib.check.compliance_models import Compliance
3
+ from prowler.lib.outputs.compliance.compliance_output import ComplianceOutput
4
+ from prowler.lib.outputs.compliance.prowler_threatscore.models import (
5
+ ProwlerThreatScoreKubernetesModel,
6
+ )
7
+ from prowler.lib.outputs.finding import Finding
8
+
9
+
10
+ class ProwlerThreatScoreKubernetes(ComplianceOutput):
11
+ """
12
+ This class represents the Kubernetes Prowler ThreatScore compliance output.
13
+
14
+ Attributes:
15
+ - _data (list): A list to store transformed data from findings.
16
+ - _file_descriptor (TextIOWrapper): A file descriptor to write data to a file.
17
+
18
+ Methods:
19
+ - transform: Transforms findings into Kubernetes Prowler ThreatScore compliance format.
20
+ """
21
+
22
+ def transform(
23
+ self,
24
+ findings: list[Finding],
25
+ compliance: Compliance,
26
+ compliance_name: str,
27
+ ) -> None:
28
+ """
29
+ Transforms a list of findings into Kubernetes Prowler ThreatScore compliance format.
30
+
31
+ Parameters:
32
+ - findings (list): A list of findings.
33
+ - compliance (Compliance): A compliance model.
34
+ - compliance_name (str): The name of the compliance model.
35
+
36
+ Returns:
37
+ - None
38
+ """
39
+ for finding in findings:
40
+ # Get the compliance requirements for the finding
41
+ finding_requirements = finding.compliance.get(compliance_name, [])
42
+ for requirement in compliance.Requirements:
43
+ if requirement.Id in finding_requirements:
44
+ for attribute in requirement.Attributes:
45
+ compliance_row = ProwlerThreatScoreKubernetesModel(
46
+ Provider=finding.provider,
47
+ Description=compliance.Description,
48
+ Context=finding.account_name,
49
+ Namespace=finding.region,
50
+ AssessmentDate=str(timestamp),
51
+ Requirements_Id=requirement.Id,
52
+ Requirements_Description=requirement.Description,
53
+ Requirements_Attributes_Title=attribute.Title,
54
+ Requirements_Attributes_Section=attribute.Section,
55
+ Requirements_Attributes_SubSection=attribute.SubSection,
56
+ Requirements_Attributes_AttributeDescription=attribute.AttributeDescription,
57
+ Requirements_Attributes_AdditionalInformation=attribute.AdditionalInformation,
58
+ Requirements_Attributes_LevelOfRisk=attribute.LevelOfRisk,
59
+ Requirements_Attributes_Weight=attribute.Weight,
60
+ Status=finding.status,
61
+ StatusExtended=finding.status_extended,
62
+ ResourceId=finding.resource_uid,
63
+ ResourceName=finding.resource_name,
64
+ CheckId=finding.check_id,
65
+ Muted=finding.muted,
66
+ Framework=compliance.Framework,
67
+ Name=compliance.Name,
68
+ )
69
+ self._data.append(compliance_row)
70
+ # Add manual requirements to the compliance output
71
+ for requirement in compliance.Requirements:
72
+ if not requirement.Checks:
73
+ for attribute in requirement.Attributes:
74
+ compliance_row = ProwlerThreatScoreKubernetesModel(
75
+ Provider=compliance.Provider.lower(),
76
+ Description=compliance.Description,
77
+ Context="",
78
+ Namespace="",
79
+ AssessmentDate=str(timestamp),
80
+ Requirements_Id=requirement.Id,
81
+ Requirements_Description=requirement.Description,
82
+ Requirements_Attributes_Title=attribute.Title,
83
+ Requirements_Attributes_Section=attribute.Section,
84
+ Requirements_Attributes_SubSection=attribute.SubSection,
85
+ Requirements_Attributes_AttributeDescription=attribute.AttributeDescription,
86
+ Requirements_Attributes_AdditionalInformation=attribute.AdditionalInformation,
87
+ Requirements_Attributes_LevelOfRisk=attribute.LevelOfRisk,
88
+ Requirements_Attributes_Weight=attribute.Weight,
89
+ Status="MANUAL",
90
+ StatusExtended="Manual check",
91
+ ResourceId="manual_check",
92
+ ResourceName="Manual check",
93
+ CheckId="manual",
94
+ Muted=False,
95
+ Framework=compliance.Framework,
96
+ Name=compliance.Name,
97
+ )
98
+ self._data.append(compliance_row)
@@ -309,10 +309,15 @@ class Finding(BaseModel):
309
309
  output_data["auth_method"] = provider.auth_method
310
310
  output_data["account_uid"] = "iac"
311
311
  output_data["account_name"] = "iac"
312
- output_data["resource_name"] = check_output.resource_name
313
- output_data["resource_uid"] = check_output.resource_name
314
- output_data["region"] = check_output.resource_line_range
315
- output_data["resource_line_range"] = check_output.resource_line_range
312
+ output_data["resource_name"] = getattr(
313
+ check_output, "resource_name", ""
314
+ )
315
+ output_data["resource_uid"] = getattr(check_output, "resource_name", "")
316
+ # For IaC, resource_line_range only exists on CheckReportIAC, not on Finding objects
317
+ output_data["region"] = getattr(check_output, "region", "global")
318
+ output_data["resource_line_range"] = getattr(
319
+ check_output, "resource_line_range", ""
320
+ )
316
321
  output_data["framework"] = check_output.check_metadata.ServiceName
317
322
 
318
323
  elif provider.type == "llm":
@@ -323,7 +328,7 @@ class Finding(BaseModel):
323
328
  output_data["resource_uid"] = check_output.model
324
329
  output_data["region"] = check_output.model
325
330
 
326
- elif provider.type == "oci":
331
+ elif provider.type == "oraclecloud":
327
332
  output_data["auth_method"] = (
328
333
  f"Profile: {get_nested_attribute(provider, 'session.profile')}"
329
334
  )
@@ -407,6 +412,12 @@ class Finding(BaseModel):
407
412
  finding.subscription = list(provider.identity.subscriptions.keys())[0]
408
413
  elif provider.type == "gcp":
409
414
  finding.project_id = list(provider.projects.keys())[0]
415
+ elif provider.type == "iac":
416
+ # For IaC, we don't have resource_line_range in the Finding model
417
+ # It would need to be extracted from the resource metadata if needed
418
+ finding.resource_line_range = "" # Set empty for compatibility
419
+ elif provider.type == "oraclecloud":
420
+ finding.compartment_id = getattr(finding, "compartment_id", "")
410
421
 
411
422
  finding.check_metadata = CheckMetadata(
412
423
  Provider=finding.check_metadata["provider"],
@@ -241,7 +241,7 @@ class HTML(Output):
241
241
  <th scope="col">Status</th>
242
242
  <th scope="col">Severity</th>
243
243
  <th scope="col">Service Name</th>
244
- <th scope="col">{"Line Range" if provider.type == "iac" else "Region"}</th>
244
+ <th scope="col">Region</th>
245
245
  <th style="width:20%" scope="col">Check ID</th>
246
246
  <th style="width:20%" scope="col">Check Title</th>
247
247
  <th scope="col">Resource ID</th>
@@ -974,18 +974,20 @@ class HTML(Output):
974
974
  return ""
975
975
 
976
976
  @staticmethod
977
- def get_oci_assessment_summary(provider: Provider) -> str:
977
+ def get_oraclecloud_assessment_summary(provider: Provider) -> str:
978
978
  """
979
- get_oci_assessment_summary gets the HTML assessment summary for the OCI provider
979
+ get_oraclecloud_assessment_summary gets the HTML assessment summary for the OracleCloud provider
980
980
 
981
981
  Args:
982
- provider (Provider): the OCI provider object
982
+ provider (Provider): the OracleCloud provider object
983
983
 
984
984
  Returns:
985
- str: HTML assessment summary for the OCI provider
985
+ str: HTML assessment summary for the OracleCloud provider
986
986
  """
987
987
  try:
988
988
  profile = getattr(provider.session, "profile", "default")
989
+ if profile is None:
990
+ profile = "instance-principal"
989
991
  tenancy_name = getattr(provider.identity, "tenancy_name", "unknown")
990
992
  tenancy_id = getattr(provider.identity, "tenancy_id", "unknown")
991
993
 
@@ -993,11 +995,11 @@ class HTML(Output):
993
995
  <div class="col-md-2">
994
996
  <div class="card">
995
997
  <div class="card-header">
996
- OCI Assessment Summary
998
+ OracleCloud Assessment Summary
997
999
  </div>
998
1000
  <ul class="list-group list-group-flush">
999
1001
  <li class="list-group-item">
1000
- <b>OCI Tenancy:</b> {tenancy_name if tenancy_name != "unknown" else tenancy_id}
1002
+ <b>OracleCloud Tenancy:</b> {tenancy_name if tenancy_name != "unknown" else tenancy_id}
1001
1003
  </li>
1002
1004
  </ul>
1003
1005
  </div>
@@ -1005,7 +1007,7 @@ class HTML(Output):
1005
1007
  <div class="col-md-4">
1006
1008
  <div class="card">
1007
1009
  <div class="card-header">
1008
- OCI Credentials
1010
+ OracleCloud Credentials
1009
1011
  </div>
1010
1012
  <ul class="list-group list-group-flush">
1011
1013
  <li class="list-group-item">
@@ -28,7 +28,7 @@ def stdout_report(finding, color, verbose, status, fix):
28
28
  details = finding.check_metadata.CheckID
29
29
  if finding.check_metadata.Provider == "iac":
30
30
  details = finding.check_metadata.CheckID
31
- if finding.check_metadata.Provider == "oci":
31
+ if finding.check_metadata.Provider == "oraclecloud":
32
32
  details = finding.region
33
33
 
34
34
  if (verbose or fix) and (not status or finding.status in status):
@@ -67,7 +67,7 @@ def display_summary_table(
67
67
  elif provider.type == "llm":
68
68
  entity_type = "LLM"
69
69
  audited_entities = provider.model
70
- elif provider.type == "oci":
70
+ elif provider.type == "oraclecloud":
71
71
  entity_type = "Tenancy"
72
72
  audited_entities = (
73
73
  provider.identity.tenancy_name
@@ -220,18 +220,19 @@ class PowerShellSession:
220
220
  if output == "":
221
221
  return {}
222
222
 
223
- json_match = re.search(r"(\[.*\]|\{.*\})", output, re.DOTALL)
224
- if not json_match:
225
- logger.error(
226
- f"Unexpected PowerShell output: {output}\n",
227
- )
228
- else:
223
+ decoder = json.JSONDecoder()
224
+ for index, character in enumerate(output):
225
+ if character not in ("{", "["):
226
+ continue
229
227
  try:
230
- return json.loads(json_match.group(1))
231
- except json.JSONDecodeError as error:
232
- logger.error(
233
- f"Error parsing PowerShell output as JSON: {str(error)}\n",
234
- )
228
+ parsed_json, _ = decoder.raw_decode(output[index:])
229
+ return parsed_json
230
+ except json.JSONDecodeError:
231
+ continue
232
+
233
+ logger.error(
234
+ f"Unexpected PowerShell output: {output}\n",
235
+ )
235
236
 
236
237
  return {}
237
238