prowler-cloud 5.14.1__py3-none-any.whl → 5.15.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 (326) hide show
  1. dashboard/assets/images/providers/alibabacloud_provider.png +0 -0
  2. dashboard/compliance/cis_2_0_alibabacloud.py +24 -0
  3. dashboard/lib/layouts.py +1 -0
  4. dashboard/pages/compliance.py +8 -2
  5. dashboard/pages/overview.py +52 -1
  6. prowler/CHANGELOG.md +59 -20
  7. prowler/__main__.py +40 -0
  8. prowler/compliance/alibabacloud/__init__.py +0 -0
  9. prowler/compliance/alibabacloud/cis_2.0_alibabacloud.json +1833 -0
  10. prowler/compliance/aws/iso27001_2013_aws.json +158 -158
  11. prowler/compliance/aws/soc2_aws.json +100 -0
  12. prowler/compliance/azure/rbi_cyber_security_framework_azure.json +248 -0
  13. prowler/compliance/azure/soc2_azure.json +87 -1
  14. prowler/compliance/gcp/soc2_gcp.json +82 -1
  15. prowler/config/config.py +2 -1
  16. prowler/lib/check/check.py +47 -1
  17. prowler/lib/check/models.py +23 -0
  18. prowler/lib/check/utils.py +1 -1
  19. prowler/lib/cli/parser.py +3 -2
  20. prowler/lib/outputs/compliance/cis/cis_alibabacloud.py +106 -0
  21. prowler/lib/outputs/compliance/cis/models.py +35 -0
  22. prowler/lib/outputs/finding.py +16 -0
  23. prowler/lib/outputs/html/html.py +67 -0
  24. prowler/lib/outputs/outputs.py +2 -0
  25. prowler/lib/outputs/summary_table.py +3 -0
  26. prowler/providers/alibabacloud/__init__.py +0 -0
  27. prowler/providers/alibabacloud/alibabacloud_provider.py +872 -0
  28. prowler/providers/alibabacloud/config.py +41 -0
  29. prowler/providers/alibabacloud/exceptions/__init__.py +0 -0
  30. prowler/providers/alibabacloud/exceptions/exceptions.py +116 -0
  31. prowler/providers/alibabacloud/lib/__init__.py +0 -0
  32. prowler/providers/alibabacloud/lib/arguments/__init__.py +0 -0
  33. prowler/providers/alibabacloud/lib/arguments/arguments.py +58 -0
  34. prowler/providers/alibabacloud/lib/mutelist/__init__.py +0 -0
  35. prowler/providers/alibabacloud/lib/mutelist/mutelist.py +175 -0
  36. prowler/providers/alibabacloud/lib/service/__init__.py +0 -0
  37. prowler/providers/alibabacloud/lib/service/service.py +113 -0
  38. prowler/providers/alibabacloud/models.py +266 -0
  39. prowler/providers/alibabacloud/services/__init__.py +0 -0
  40. prowler/providers/alibabacloud/services/actiontrail/__init__.py +0 -0
  41. prowler/providers/alibabacloud/services/actiontrail/actiontrail_client.py +6 -0
  42. prowler/providers/alibabacloud/services/actiontrail/actiontrail_multi_region_enabled/__init__.py +0 -0
  43. prowler/providers/alibabacloud/services/actiontrail/actiontrail_multi_region_enabled/actiontrail_multi_region_enabled.metadata.json +39 -0
  44. prowler/providers/alibabacloud/services/actiontrail/actiontrail_multi_region_enabled/actiontrail_multi_region_enabled.py +81 -0
  45. prowler/providers/alibabacloud/services/actiontrail/actiontrail_oss_bucket_not_publicly_accessible/__init__.py +0 -0
  46. prowler/providers/alibabacloud/services/actiontrail/actiontrail_oss_bucket_not_publicly_accessible/actiontrail_oss_bucket_not_publicly_accessible.metadata.json +40 -0
  47. prowler/providers/alibabacloud/services/actiontrail/actiontrail_oss_bucket_not_publicly_accessible/actiontrail_oss_bucket_not_publicly_accessible.py +119 -0
  48. prowler/providers/alibabacloud/services/actiontrail/actiontrail_service.py +110 -0
  49. prowler/providers/alibabacloud/services/cs/__init__.py +0 -0
  50. prowler/providers/alibabacloud/services/cs/cs_client.py +4 -0
  51. prowler/providers/alibabacloud/services/cs/cs_kubernetes_cloudmonitor_enabled/__init__.py +0 -0
  52. prowler/providers/alibabacloud/services/cs/cs_kubernetes_cloudmonitor_enabled/cs_kubernetes_cloudmonitor_enabled.metadata.json +38 -0
  53. prowler/providers/alibabacloud/services/cs/cs_kubernetes_cloudmonitor_enabled/cs_kubernetes_cloudmonitor_enabled.py +26 -0
  54. prowler/providers/alibabacloud/services/cs/cs_kubernetes_cluster_check_recent/__init__.py +0 -0
  55. prowler/providers/alibabacloud/services/cs/cs_kubernetes_cluster_check_recent/cs_kubernetes_cluster_check_recent.metadata.json +38 -0
  56. prowler/providers/alibabacloud/services/cs/cs_kubernetes_cluster_check_recent/cs_kubernetes_cluster_check_recent.py +62 -0
  57. prowler/providers/alibabacloud/services/cs/cs_kubernetes_cluster_check_weekly/cs_kubernetes_cluster_check_weekly.metadata.json +38 -0
  58. prowler/providers/alibabacloud/services/cs/cs_kubernetes_cluster_check_weekly/cs_kubernetes_cluster_check_weekly.py +62 -0
  59. prowler/providers/alibabacloud/services/cs/cs_kubernetes_dashboard_disabled/__init__.py +0 -0
  60. prowler/providers/alibabacloud/services/cs/cs_kubernetes_dashboard_disabled/cs_kubernetes_dashboard_disabled.metadata.json +39 -0
  61. prowler/providers/alibabacloud/services/cs/cs_kubernetes_dashboard_disabled/cs_kubernetes_dashboard_disabled.py +26 -0
  62. prowler/providers/alibabacloud/services/cs/cs_kubernetes_eni_multiple_ip_enabled/__init__.py +0 -0
  63. prowler/providers/alibabacloud/services/cs/cs_kubernetes_eni_multiple_ip_enabled/cs_kubernetes_eni_multiple_ip_enabled.metadata.json +39 -0
  64. prowler/providers/alibabacloud/services/cs/cs_kubernetes_eni_multiple_ip_enabled/cs_kubernetes_eni_multiple_ip_enabled.py +26 -0
  65. prowler/providers/alibabacloud/services/cs/cs_kubernetes_log_service_enabled/__init__.py +0 -0
  66. prowler/providers/alibabacloud/services/cs/cs_kubernetes_log_service_enabled/cs_kubernetes_log_service_enabled.metadata.json +40 -0
  67. prowler/providers/alibabacloud/services/cs/cs_kubernetes_log_service_enabled/cs_kubernetes_log_service_enabled.py +26 -0
  68. prowler/providers/alibabacloud/services/cs/cs_kubernetes_network_policy_enabled/__init__.py +0 -0
  69. prowler/providers/alibabacloud/services/cs/cs_kubernetes_network_policy_enabled/cs_kubernetes_network_policy_enabled.metadata.json +39 -0
  70. prowler/providers/alibabacloud/services/cs/cs_kubernetes_network_policy_enabled/cs_kubernetes_network_policy_enabled.py +26 -0
  71. prowler/providers/alibabacloud/services/cs/cs_kubernetes_private_cluster_enabled/__init__.py +0 -0
  72. prowler/providers/alibabacloud/services/cs/cs_kubernetes_private_cluster_enabled/cs_kubernetes_private_cluster_enabled.metadata.json +39 -0
  73. prowler/providers/alibabacloud/services/cs/cs_kubernetes_private_cluster_enabled/cs_kubernetes_private_cluster_enabled.py +26 -0
  74. prowler/providers/alibabacloud/services/cs/cs_kubernetes_rbac_enabled/__init__.py +0 -0
  75. prowler/providers/alibabacloud/services/cs/cs_kubernetes_rbac_enabled/cs_kubernetes_rbac_enabled.metadata.json +40 -0
  76. prowler/providers/alibabacloud/services/cs/cs_kubernetes_rbac_enabled/cs_kubernetes_rbac_enabled.py +28 -0
  77. prowler/providers/alibabacloud/services/cs/cs_service.py +354 -0
  78. prowler/providers/alibabacloud/services/ecs/__init__.py +0 -0
  79. prowler/providers/alibabacloud/services/ecs/ecs_attached_disk_encrypted/__init__.py +0 -0
  80. prowler/providers/alibabacloud/services/ecs/ecs_attached_disk_encrypted/ecs_attached_disk_encrypted.metadata.json +38 -0
  81. prowler/providers/alibabacloud/services/ecs/ecs_attached_disk_encrypted/ecs_attached_disk_encrypted.py +38 -0
  82. prowler/providers/alibabacloud/services/ecs/ecs_client.py +4 -0
  83. prowler/providers/alibabacloud/services/ecs/ecs_instance_endpoint_protection_installed/__init__.py +0 -0
  84. prowler/providers/alibabacloud/services/ecs/ecs_instance_endpoint_protection_installed/ecs_instance_endpoint_protection_installed.metadata.json +41 -0
  85. prowler/providers/alibabacloud/services/ecs/ecs_instance_endpoint_protection_installed/ecs_instance_endpoint_protection_installed.py +47 -0
  86. prowler/providers/alibabacloud/services/ecs/ecs_instance_latest_os_patches_applied/__init__.py +0 -0
  87. prowler/providers/alibabacloud/services/ecs/ecs_instance_latest_os_patches_applied/ecs_instance_latest_os_patches_applied.metadata.json +38 -0
  88. prowler/providers/alibabacloud/services/ecs/ecs_instance_latest_os_patches_applied/ecs_instance_latest_os_patches_applied.py +50 -0
  89. prowler/providers/alibabacloud/services/ecs/ecs_instance_no_legacy_network/__init__.py +0 -0
  90. prowler/providers/alibabacloud/services/ecs/ecs_instance_no_legacy_network/ecs_instance_no_legacy_network.metadata.json +38 -0
  91. prowler/providers/alibabacloud/services/ecs/ecs_instance_no_legacy_network/ecs_instance_no_legacy_network.py +34 -0
  92. prowler/providers/alibabacloud/services/ecs/ecs_securitygroup_restrict_rdp_internet/__init__.py +0 -0
  93. prowler/providers/alibabacloud/services/ecs/ecs_securitygroup_restrict_rdp_internet/ecs_securitygroup_restrict_rdp_internet.metadata.json +39 -0
  94. prowler/providers/alibabacloud/services/ecs/ecs_securitygroup_restrict_rdp_internet/ecs_securitygroup_restrict_rdp_internet.py +68 -0
  95. prowler/providers/alibabacloud/services/ecs/ecs_securitygroup_restrict_ssh_internet/__init__.py +0 -0
  96. prowler/providers/alibabacloud/services/ecs/ecs_securitygroup_restrict_ssh_internet/ecs_securitygroup_restrict_ssh_internet.metadata.json +39 -0
  97. prowler/providers/alibabacloud/services/ecs/ecs_securitygroup_restrict_ssh_internet/ecs_securitygroup_restrict_ssh_internet.py +68 -0
  98. prowler/providers/alibabacloud/services/ecs/ecs_service.py +380 -0
  99. prowler/providers/alibabacloud/services/ecs/ecs_unattached_disk_encrypted/__init__.py +0 -0
  100. prowler/providers/alibabacloud/services/ecs/ecs_unattached_disk_encrypted/ecs_unattached_disk_encrypted.metadata.json +38 -0
  101. prowler/providers/alibabacloud/services/ecs/ecs_unattached_disk_encrypted/ecs_unattached_disk_encrypted.py +38 -0
  102. prowler/providers/alibabacloud/services/ecs/lib/security_groups.py +23 -0
  103. prowler/providers/alibabacloud/services/oss/__init__.py +0 -0
  104. prowler/providers/alibabacloud/services/oss/oss_bucket_logging_enabled/__init__.py +0 -0
  105. prowler/providers/alibabacloud/services/oss/oss_bucket_logging_enabled/oss_bucket_logging_enabled.metadata.json +39 -0
  106. prowler/providers/alibabacloud/services/oss/oss_bucket_logging_enabled/oss_bucket_logging_enabled.py +37 -0
  107. prowler/providers/alibabacloud/services/oss/oss_bucket_not_publicly_accessible/__init__.py +0 -0
  108. prowler/providers/alibabacloud/services/oss/oss_bucket_not_publicly_accessible/oss_bucket_not_publicly_accessible.metadata.json +39 -0
  109. prowler/providers/alibabacloud/services/oss/oss_bucket_not_publicly_accessible/oss_bucket_not_publicly_accessible.py +89 -0
  110. prowler/providers/alibabacloud/services/oss/oss_bucket_secure_transport_enabled/__init__.py +0 -0
  111. prowler/providers/alibabacloud/services/oss/oss_bucket_secure_transport_enabled/oss_bucket_secure_transport_enabled.metadata.json +38 -0
  112. prowler/providers/alibabacloud/services/oss/oss_bucket_secure_transport_enabled/oss_bucket_secure_transport_enabled.py +87 -0
  113. prowler/providers/alibabacloud/services/oss/oss_client.py +4 -0
  114. prowler/providers/alibabacloud/services/oss/oss_service.py +317 -0
  115. prowler/providers/alibabacloud/services/ram/__init__.py +0 -0
  116. prowler/providers/alibabacloud/services/ram/ram_client.py +4 -0
  117. prowler/providers/alibabacloud/services/ram/ram_no_root_access_key/__init__.py +0 -0
  118. prowler/providers/alibabacloud/services/ram/ram_no_root_access_key/ram_no_root_access_key.metadata.json +39 -0
  119. prowler/providers/alibabacloud/services/ram/ram_no_root_access_key/ram_no_root_access_key.py +33 -0
  120. prowler/providers/alibabacloud/services/ram/ram_password_policy_lowercase/__init__.py +0 -0
  121. prowler/providers/alibabacloud/services/ram/ram_password_policy_lowercase/ram_password_policy_lowercase.metadata.json +39 -0
  122. prowler/providers/alibabacloud/services/ram/ram_password_policy_lowercase/ram_password_policy_lowercase.py +32 -0
  123. prowler/providers/alibabacloud/services/ram/ram_password_policy_max_login_attempts/__init__.py +0 -0
  124. prowler/providers/alibabacloud/services/ram/ram_password_policy_max_login_attempts/ram_password_policy_max_login_attempts.metadata.json +39 -0
  125. prowler/providers/alibabacloud/services/ram/ram_password_policy_max_login_attempts/ram_password_policy_max_login_attempts.py +32 -0
  126. prowler/providers/alibabacloud/services/ram/ram_password_policy_max_password_age/__init__.py +0 -0
  127. prowler/providers/alibabacloud/services/ram/ram_password_policy_max_password_age/ram_password_policy_max_password_age.metadata.json +39 -0
  128. prowler/providers/alibabacloud/services/ram/ram_password_policy_max_password_age/ram_password_policy_max_password_age.py +35 -0
  129. prowler/providers/alibabacloud/services/ram/ram_password_policy_minimum_length/__init__.py +0 -0
  130. prowler/providers/alibabacloud/services/ram/ram_password_policy_minimum_length/ram_password_policy_minimum_length.metadata.json +39 -0
  131. prowler/providers/alibabacloud/services/ram/ram_password_policy_minimum_length/ram_password_policy_minimum_length.py +30 -0
  132. prowler/providers/alibabacloud/services/ram/ram_password_policy_number/__init__.py +0 -0
  133. prowler/providers/alibabacloud/services/ram/ram_password_policy_number/ram_password_policy_number.metadata.json +39 -0
  134. prowler/providers/alibabacloud/services/ram/ram_password_policy_password_reuse_prevention/__init__.py +0 -0
  135. prowler/providers/alibabacloud/services/ram/ram_password_policy_password_reuse_prevention/ram_password_policy_password_reuse_prevention.metadata.json +39 -0
  136. prowler/providers/alibabacloud/services/ram/ram_password_policy_password_reuse_prevention/ram_password_policy_password_reuse_prevention.py +35 -0
  137. prowler/providers/alibabacloud/services/ram/ram_password_policy_symbol/__init__.py +0 -0
  138. prowler/providers/alibabacloud/services/ram/ram_password_policy_symbol/ram_password_policy_symbol.metadata.json +39 -0
  139. prowler/providers/alibabacloud/services/ram/ram_password_policy_symbol/ram_password_policy_symbol.py +34 -0
  140. prowler/providers/alibabacloud/services/ram/ram_password_policy_uppercase/__init__.py +0 -0
  141. prowler/providers/alibabacloud/services/ram/ram_password_policy_uppercase/ram_password_policy_uppercase.metadata.json +39 -0
  142. prowler/providers/alibabacloud/services/ram/ram_password_policy_uppercase/ram_password_policy_uppercase.py +32 -0
  143. prowler/providers/alibabacloud/services/ram/ram_policy_attached_only_to_group_or_roles/__init__.py +0 -0
  144. prowler/providers/alibabacloud/services/ram/ram_policy_attached_only_to_group_or_roles/ram_policy_attached_only_to_group_or_roles.metadata.json +39 -0
  145. prowler/providers/alibabacloud/services/ram/ram_policy_attached_only_to_group_or_roles/ram_policy_attached_only_to_group_or_roles.py +35 -0
  146. prowler/providers/alibabacloud/services/ram/ram_policy_no_administrative_privileges/__init__.py +0 -0
  147. prowler/providers/alibabacloud/services/ram/ram_policy_no_administrative_privileges/ram_policy_no_administrative_privileges.metadata.json +39 -0
  148. prowler/providers/alibabacloud/services/ram/ram_policy_no_administrative_privileges/ram_policy_no_administrative_privileges.py +73 -0
  149. prowler/providers/alibabacloud/services/ram/ram_rotate_access_key_90_days/__init__.py +0 -0
  150. prowler/providers/alibabacloud/services/ram/ram_rotate_access_key_90_days/ram_rotate_access_key_90_days.metadata.json +39 -0
  151. prowler/providers/alibabacloud/services/ram/ram_rotate_access_key_90_days/ram_rotate_access_key_90_days.py +58 -0
  152. prowler/providers/alibabacloud/services/ram/ram_service.py +478 -0
  153. prowler/providers/alibabacloud/services/ram/ram_user_console_access_unused/__init__.py +0 -0
  154. prowler/providers/alibabacloud/services/ram/ram_user_console_access_unused/ram_user_console_access_unused.metadata.json +39 -0
  155. prowler/providers/alibabacloud/services/ram/ram_user_console_access_unused/ram_user_console_access_unused.py +56 -0
  156. prowler/providers/alibabacloud/services/ram/ram_user_mfa_enabled_console_access/__init__.py +0 -0
  157. prowler/providers/alibabacloud/services/ram/ram_user_mfa_enabled_console_access/ram_user_mfa_enabled_console_access.metadata.json +39 -0
  158. prowler/providers/alibabacloud/services/ram/ram_user_mfa_enabled_console_access/ram_user_mfa_enabled_console_access.py +36 -0
  159. prowler/providers/alibabacloud/services/rds/__init__.py +0 -0
  160. prowler/providers/alibabacloud/services/rds/rds_client.py +4 -0
  161. prowler/providers/alibabacloud/services/rds/rds_instance_no_public_access_whitelist/__init__.py +0 -0
  162. prowler/providers/alibabacloud/services/rds/rds_instance_no_public_access_whitelist/rds_instance_no_public_access_whitelist.metadata.json +39 -0
  163. prowler/providers/alibabacloud/services/rds/rds_instance_no_public_access_whitelist/rds_instance_no_public_access_whitelist.py +36 -0
  164. prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_connections_enabled/__init__.py +0 -0
  165. prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_connections_enabled/rds_instance_postgresql_log_connections_enabled.metadata.json +39 -0
  166. prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_connections_enabled/rds_instance_postgresql_log_connections_enabled.py +29 -0
  167. prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_disconnections_enabled/__init__.py +0 -0
  168. prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_disconnections_enabled/rds_instance_postgresql_log_disconnections_enabled.metadata.json +39 -0
  169. prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_disconnections_enabled/rds_instance_postgresql_log_disconnections_enabled.py +29 -0
  170. prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_duration_enabled/__init__.py +0 -0
  171. prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_duration_enabled/rds_instance_postgresql_log_duration_enabled.metadata.json +38 -0
  172. prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_duration_enabled/rds_instance_postgresql_log_duration_enabled.py +29 -0
  173. prowler/providers/alibabacloud/services/rds/rds_instance_sql_audit_enabled/__init__.py +0 -0
  174. prowler/providers/alibabacloud/services/rds/rds_instance_sql_audit_enabled/rds_instance_sql_audit_enabled.metadata.json +39 -0
  175. prowler/providers/alibabacloud/services/rds/rds_instance_sql_audit_enabled/rds_instance_sql_audit_enabled.py +32 -0
  176. prowler/providers/alibabacloud/services/rds/rds_instance_sql_audit_retention/__init__.py +0 -0
  177. prowler/providers/alibabacloud/services/rds/rds_instance_sql_audit_retention/rds_instance_sql_audit_retention.metadata.json +39 -0
  178. prowler/providers/alibabacloud/services/rds/rds_instance_sql_audit_retention/rds_instance_sql_audit_retention.py +41 -0
  179. prowler/providers/alibabacloud/services/rds/rds_instance_ssl_enabled/__init__.py +0 -0
  180. prowler/providers/alibabacloud/services/rds/rds_instance_ssl_enabled/rds_instance_ssl_enabled.metadata.json +39 -0
  181. prowler/providers/alibabacloud/services/rds/rds_instance_ssl_enabled/rds_instance_ssl_enabled.py +30 -0
  182. prowler/providers/alibabacloud/services/rds/rds_instance_tde_enabled/__init__.py +0 -0
  183. prowler/providers/alibabacloud/services/rds/rds_instance_tde_enabled/rds_instance_tde_enabled.metadata.json +39 -0
  184. prowler/providers/alibabacloud/services/rds/rds_instance_tde_enabled/rds_instance_tde_enabled.py +32 -0
  185. prowler/providers/alibabacloud/services/rds/rds_instance_tde_key_custom/__init__.py +0 -0
  186. prowler/providers/alibabacloud/services/rds/rds_instance_tde_key_custom/rds_instance_tde_key_custom.metadata.json +39 -0
  187. prowler/providers/alibabacloud/services/rds/rds_instance_tde_key_custom/rds_instance_tde_key_custom.py +38 -0
  188. prowler/providers/alibabacloud/services/rds/rds_service.py +274 -0
  189. prowler/providers/alibabacloud/services/securitycenter/__init__.py +0 -0
  190. prowler/providers/alibabacloud/services/securitycenter/securitycenter_advanced_or_enterprise_edition/__init__.py +0 -0
  191. prowler/providers/alibabacloud/services/securitycenter/securitycenter_advanced_or_enterprise_edition/securitycenter_advanced_or_enterprise_edition.metadata.json +43 -0
  192. prowler/providers/alibabacloud/services/securitycenter/securitycenter_advanced_or_enterprise_edition/securitycenter_advanced_or_enterprise_edition.py +48 -0
  193. prowler/providers/alibabacloud/services/securitycenter/securitycenter_all_assets_agent_installed/__init__.py +0 -0
  194. prowler/providers/alibabacloud/services/securitycenter/securitycenter_all_assets_agent_installed/securitycenter_all_assets_agent_installed.metadata.json +42 -0
  195. prowler/providers/alibabacloud/services/securitycenter/securitycenter_all_assets_agent_installed/securitycenter_all_assets_agent_installed.py +48 -0
  196. prowler/providers/alibabacloud/services/securitycenter/securitycenter_client.py +6 -0
  197. prowler/providers/alibabacloud/services/securitycenter/securitycenter_notification_enabled_high_risk/__init__.py +0 -0
  198. prowler/providers/alibabacloud/services/securitycenter/securitycenter_notification_enabled_high_risk/securitycenter_notification_enabled_high_risk.metadata.json +42 -0
  199. prowler/providers/alibabacloud/services/securitycenter/securitycenter_notification_enabled_high_risk/securitycenter_notification_enabled_high_risk.py +65 -0
  200. prowler/providers/alibabacloud/services/securitycenter/securitycenter_service.py +394 -0
  201. prowler/providers/alibabacloud/services/securitycenter/securitycenter_vulnerability_scan_enabled/__init__.py +0 -0
  202. prowler/providers/alibabacloud/services/securitycenter/securitycenter_vulnerability_scan_enabled/securitycenter_vulnerability_scan_enabled.metadata.json +39 -0
  203. prowler/providers/alibabacloud/services/securitycenter/securitycenter_vulnerability_scan_enabled/securitycenter_vulnerability_scan_enabled.py +68 -0
  204. prowler/providers/alibabacloud/services/sls/__init__.py +0 -0
  205. prowler/providers/alibabacloud/services/sls/sls_client.py +4 -0
  206. prowler/providers/alibabacloud/services/sls/sls_cloud_firewall_changes_alert_enabled/__init__.py +0 -0
  207. prowler/providers/alibabacloud/services/sls/sls_cloud_firewall_changes_alert_enabled/sls_cloud_firewall_changes_alert_enabled.metadata.json +39 -0
  208. prowler/providers/alibabacloud/services/sls/sls_cloud_firewall_changes_alert_enabled/sls_cloud_firewall_changes_alert_enabled.py +50 -0
  209. prowler/providers/alibabacloud/services/sls/sls_customer_created_cmk_changes_alert_enabled/__init__.py +0 -0
  210. prowler/providers/alibabacloud/services/sls/sls_customer_created_cmk_changes_alert_enabled/sls_customer_created_cmk_changes_alert_enabled.metadata.json +39 -0
  211. prowler/providers/alibabacloud/services/sls/sls_customer_created_cmk_changes_alert_enabled/sls_customer_created_cmk_changes_alert_enabled.py +48 -0
  212. prowler/providers/alibabacloud/services/sls/sls_logstore_retention_period/__init__.py +0 -0
  213. prowler/providers/alibabacloud/services/sls/sls_logstore_retention_period/sls_logstore_retention_period.metadata.json +38 -0
  214. prowler/providers/alibabacloud/services/sls/sls_logstore_retention_period/sls_logstore_retention_period.py +32 -0
  215. prowler/providers/alibabacloud/services/sls/sls_management_console_authentication_failures_alert_enabled/__init__.py +0 -0
  216. prowler/providers/alibabacloud/services/sls/sls_management_console_authentication_failures_alert_enabled/sls_management_console_authentication_failures_alert_enabled.metadata.json +39 -0
  217. prowler/providers/alibabacloud/services/sls/sls_management_console_authentication_failures_alert_enabled/sls_management_console_authentication_failures_alert_enabled.py +44 -0
  218. prowler/providers/alibabacloud/services/sls/sls_management_console_signin_without_mfa_alert_enabled/__init__.py +0 -0
  219. prowler/providers/alibabacloud/services/sls/sls_management_console_signin_without_mfa_alert_enabled/sls_management_console_signin_without_mfa_alert_enabled.metadata.json +39 -0
  220. prowler/providers/alibabacloud/services/sls/sls_management_console_signin_without_mfa_alert_enabled/sls_management_console_signin_without_mfa_alert_enabled.py +49 -0
  221. prowler/providers/alibabacloud/services/sls/sls_oss_bucket_policy_changes_alert_enabled/__init__.py +0 -0
  222. prowler/providers/alibabacloud/services/sls/sls_oss_bucket_policy_changes_alert_enabled/sls_oss_bucket_policy_changes_alert_enabled.metadata.json +39 -0
  223. prowler/providers/alibabacloud/services/sls/sls_oss_bucket_policy_changes_alert_enabled/sls_oss_bucket_policy_changes_alert_enabled.py +57 -0
  224. prowler/providers/alibabacloud/services/sls/sls_oss_permission_changes_alert_enabled/__init__.py +0 -0
  225. prowler/providers/alibabacloud/services/sls/sls_oss_permission_changes_alert_enabled/sls_oss_permission_changes_alert_enabled.metadata.json +39 -0
  226. prowler/providers/alibabacloud/services/sls/sls_oss_permission_changes_alert_enabled/sls_oss_permission_changes_alert_enabled.py +48 -0
  227. prowler/providers/alibabacloud/services/sls/sls_ram_role_changes_alert_enabled/__init__.py +0 -0
  228. prowler/providers/alibabacloud/services/sls/sls_ram_role_changes_alert_enabled/sls_ram_role_changes_alert_enabled.metadata.json +39 -0
  229. prowler/providers/alibabacloud/services/sls/sls_ram_role_changes_alert_enabled/sls_ram_role_changes_alert_enabled.py +54 -0
  230. prowler/providers/alibabacloud/services/sls/sls_rds_instance_configuration_changes_alert_enabled/__init__.py +0 -0
  231. prowler/providers/alibabacloud/services/sls/sls_rds_instance_configuration_changes_alert_enabled/sls_rds_instance_configuration_changes_alert_enabled.metadata.json +39 -0
  232. prowler/providers/alibabacloud/services/sls/sls_rds_instance_configuration_changes_alert_enabled/sls_rds_instance_configuration_changes_alert_enabled.py +72 -0
  233. prowler/providers/alibabacloud/services/sls/sls_root_account_usage_alert_enabled/__init__.py +0 -0
  234. prowler/providers/alibabacloud/services/sls/sls_root_account_usage_alert_enabled/sls_root_account_usage_alert_enabled.metadata.json +39 -0
  235. prowler/providers/alibabacloud/services/sls/sls_root_account_usage_alert_enabled/sls_root_account_usage_alert_enabled.py +50 -0
  236. prowler/providers/alibabacloud/services/sls/sls_security_group_changes_alert_enabled/__init__.py +0 -0
  237. prowler/providers/alibabacloud/services/sls/sls_security_group_changes_alert_enabled/sls_security_group_changes_alert_enabled.metadata.json +39 -0
  238. prowler/providers/alibabacloud/services/sls/sls_security_group_changes_alert_enabled/sls_security_group_changes_alert_enabled.py +56 -0
  239. prowler/providers/alibabacloud/services/sls/sls_service.py +137 -0
  240. prowler/providers/alibabacloud/services/sls/sls_unauthorized_api_calls_alert_enabled/__init__.py +0 -0
  241. prowler/providers/alibabacloud/services/sls/sls_unauthorized_api_calls_alert_enabled/sls_unauthorized_api_calls_alert_enabled.metadata.json +39 -0
  242. prowler/providers/alibabacloud/services/sls/sls_unauthorized_api_calls_alert_enabled/sls_unauthorized_api_calls_alert_enabled.py +56 -0
  243. prowler/providers/alibabacloud/services/sls/sls_vpc_changes_alert_enabled/__init__.py +0 -0
  244. prowler/providers/alibabacloud/services/sls/sls_vpc_changes_alert_enabled/sls_vpc_changes_alert_enabled.metadata.json +39 -0
  245. prowler/providers/alibabacloud/services/sls/sls_vpc_changes_alert_enabled/sls_vpc_changes_alert_enabled.py +57 -0
  246. prowler/providers/alibabacloud/services/sls/sls_vpc_network_route_changes_alert_enabled/__init__.py +0 -0
  247. prowler/providers/alibabacloud/services/sls/sls_vpc_network_route_changes_alert_enabled/sls_vpc_network_route_changes_alert_enabled.metadata.json +39 -0
  248. prowler/providers/alibabacloud/services/sls/sls_vpc_network_route_changes_alert_enabled/sls_vpc_network_route_changes_alert_enabled.py +52 -0
  249. prowler/providers/alibabacloud/services/vpc/__init__.py +0 -0
  250. prowler/providers/alibabacloud/services/vpc/vpc_client.py +4 -0
  251. prowler/providers/alibabacloud/services/vpc/vpc_flow_logs_enabled/__init__.py +0 -0
  252. prowler/providers/alibabacloud/services/vpc/vpc_flow_logs_enabled/vpc_flow_logs_enabled.metadata.json +39 -0
  253. prowler/providers/alibabacloud/services/vpc/vpc_flow_logs_enabled/vpc_flow_logs_enabled.py +30 -0
  254. prowler/providers/alibabacloud/services/vpc/vpc_service.py +102 -0
  255. prowler/providers/aws/aws_regions_by_service.json +20 -0
  256. prowler/providers/aws/services/apigateway/apigateway_restapi_waf_acl_attached/apigateway_restapi_waf_acl_attached.metadata.json +1 -3
  257. prowler/providers/aws/services/cloudtrail/cloudtrail_insights_exist/cloudtrail_insights_exist.metadata.json +1 -1
  258. prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_acls_alarm_configured/cloudwatch_changes_to_network_acls_alarm_configured.metadata.json +1 -2
  259. prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_gateways_alarm_configured/cloudwatch_changes_to_network_gateways_alarm_configured.metadata.json +1 -2
  260. prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_route_tables_alarm_configured/cloudwatch_changes_to_network_route_tables_alarm_configured.metadata.json +1 -2
  261. prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_vpcs_alarm_configured/cloudwatch_changes_to_vpcs_alarm_configured.metadata.json +1 -2
  262. 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 +1 -2
  263. 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 +1 -2
  264. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_authentication_failures/cloudwatch_log_metric_filter_authentication_failures.metadata.json +1 -2
  265. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_aws_organizations_changes/cloudwatch_log_metric_filter_aws_organizations_changes.metadata.json +1 -2
  266. 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 +1 -2
  267. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_policy_changes/cloudwatch_log_metric_filter_policy_changes.metadata.json +1 -2
  268. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_root_usage/cloudwatch_log_metric_filter_root_usage.metadata.json +1 -2
  269. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_security_group_changes/cloudwatch_log_metric_filter_security_group_changes.metadata.json +1 -2
  270. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_sign_in_without_mfa/cloudwatch_log_metric_filter_sign_in_without_mfa.metadata.json +1 -2
  271. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_unauthorized_api_calls/cloudwatch_log_metric_filter_unauthorized_api_calls.metadata.json +0 -1
  272. prowler/providers/aws/services/guardduty/guardduty_centrally_managed/guardduty_centrally_managed.metadata.json +16 -10
  273. prowler/providers/aws/services/guardduty/guardduty_ec2_malware_protection_enabled/guardduty_ec2_malware_protection_enabled.metadata.json +23 -14
  274. prowler/providers/aws/services/guardduty/guardduty_eks_audit_log_enabled/guardduty_eks_audit_log_enabled.metadata.json +19 -13
  275. prowler/providers/aws/services/guardduty/guardduty_eks_runtime_monitoring_enabled/guardduty_eks_runtime_monitoring_enabled.metadata.json +18 -12
  276. prowler/providers/aws/services/guardduty/guardduty_is_enabled/guardduty_is_enabled.metadata.json +24 -13
  277. prowler/providers/aws/services/guardduty/guardduty_lambda_protection_enabled/guardduty_lambda_protection_enabled.metadata.json +20 -14
  278. prowler/providers/aws/services/guardduty/guardduty_no_high_severity_findings/guardduty_no_high_severity_findings.metadata.json +18 -9
  279. prowler/providers/aws/services/guardduty/guardduty_rds_protection_enabled/guardduty_rds_protection_enabled.metadata.json +18 -11
  280. prowler/providers/aws/services/guardduty/guardduty_s3_protection_enabled/guardduty_s3_protection_enabled.metadata.json +21 -12
  281. prowler/providers/aws/services/lightsail/lightsail_database_public/lightsail_database_public.metadata.json +21 -13
  282. prowler/providers/aws/services/lightsail/lightsail_instance_automated_snapshots/lightsail_instance_automated_snapshots.metadata.json +24 -13
  283. prowler/providers/aws/services/lightsail/lightsail_instance_public/lightsail_instance_public.metadata.json +21 -13
  284. prowler/providers/aws/services/lightsail/lightsail_static_ip_unused/lightsail_static_ip_unused.metadata.json +23 -14
  285. prowler/providers/aws/services/macie/macie_automated_sensitive_data_discovery_enabled/macie_automated_sensitive_data_discovery_enabled.metadata.json +20 -12
  286. prowler/providers/aws/services/macie/macie_is_enabled/macie_is_enabled.metadata.json +17 -12
  287. prowler/providers/aws/services/mq/mq_broker_active_deployment_mode/mq_broker_active_deployment_mode.metadata.json +22 -13
  288. prowler/providers/aws/services/mq/mq_broker_auto_minor_version_upgrades/mq_broker_auto_minor_version_upgrades.metadata.json +21 -12
  289. prowler/providers/aws/services/mq/mq_broker_cluster_deployment_mode/mq_broker_cluster_deployment_mode.metadata.json +23 -14
  290. prowler/providers/aws/services/mq/mq_broker_logging_enabled/mq_broker_logging_enabled.metadata.json +22 -13
  291. prowler/providers/aws/services/mq/mq_broker_not_publicly_accessible/mq_broker_not_publicly_accessible.metadata.json +20 -12
  292. prowler/providers/aws/services/networkfirewall/networkfirewall_deletion_protection/networkfirewall_deletion_protection.metadata.json +21 -13
  293. prowler/providers/aws/services/networkfirewall/networkfirewall_in_all_vpc/networkfirewall_in_all_vpc.metadata.json +23 -13
  294. prowler/providers/aws/services/networkfirewall/networkfirewall_logging_enabled/networkfirewall_logging_enabled.metadata.json +20 -13
  295. prowler/providers/aws/services/networkfirewall/networkfirewall_multi_az/networkfirewall_multi_az.metadata.json +22 -14
  296. prowler/providers/aws/services/networkfirewall/networkfirewall_policy_default_action_fragmented_packets/networkfirewall_policy_default_action_fragmented_packets.metadata.json +26 -14
  297. prowler/providers/aws/services/networkfirewall/networkfirewall_policy_default_action_full_packets/networkfirewall_policy_default_action_full_packets.metadata.json +22 -13
  298. prowler/providers/aws/services/networkfirewall/networkfirewall_policy_rule_group_associated/networkfirewall_policy_rule_group_associated.metadata.json +25 -14
  299. prowler/providers/common/provider.py +12 -0
  300. prowler/providers/gcp/services/accesscontextmanager/__init__.py +0 -0
  301. prowler/providers/gcp/services/accesscontextmanager/accesscontextmanager_client.py +6 -0
  302. prowler/providers/gcp/services/accesscontextmanager/accesscontextmanager_service.py +101 -0
  303. prowler/providers/gcp/services/cloudresourcemanager/cloudresourcemanager_service.py +10 -0
  304. prowler/providers/gcp/services/cloudstorage/cloudstorage_service.py +13 -0
  305. prowler/providers/gcp/services/cloudstorage/cloudstorage_uses_vpc_service_controls/__init__.py +0 -0
  306. prowler/providers/gcp/services/cloudstorage/cloudstorage_uses_vpc_service_controls/cloudstorage_uses_vpc_service_controls.metadata.json +36 -0
  307. prowler/providers/gcp/services/cloudstorage/cloudstorage_uses_vpc_service_controls/cloudstorage_uses_vpc_service_controls.py +67 -0
  308. prowler/providers/gcp/services/compute/compute_instance_automatic_restart_enabled/__init__.py +0 -0
  309. prowler/providers/gcp/services/compute/compute_instance_automatic_restart_enabled/compute_instance_automatic_restart_enabled.metadata.json +36 -0
  310. prowler/providers/gcp/services/compute/compute_instance_automatic_restart_enabled/compute_instance_automatic_restart_enabled.py +35 -0
  311. prowler/providers/gcp/services/compute/compute_instance_deletion_protection_enabled/__init__.py +0 -0
  312. prowler/providers/gcp/services/compute/compute_instance_deletion_protection_enabled/compute_instance_deletion_protection_enabled.metadata.json +36 -0
  313. prowler/providers/gcp/services/compute/compute_instance_deletion_protection_enabled/compute_instance_deletion_protection_enabled.py +29 -0
  314. prowler/providers/gcp/services/compute/compute_instance_preemptible_vm_disabled/__init__.py +0 -0
  315. prowler/providers/gcp/services/compute/compute_instance_preemptible_vm_disabled/compute_instance_preemptible_vm_disabled.metadata.json +37 -0
  316. prowler/providers/gcp/services/compute/compute_instance_preemptible_vm_disabled/compute_instance_preemptible_vm_disabled.py +32 -0
  317. prowler/providers/gcp/services/compute/compute_service.py +16 -0
  318. prowler/providers/github/services/repository/repository_immutable_releases_enabled/__init__.py +0 -0
  319. prowler/providers/github/services/repository/repository_immutable_releases_enabled/repository_immutable_releases_enabled.metadata.json +33 -0
  320. prowler/providers/github/services/repository/repository_immutable_releases_enabled/repository_immutable_releases_enabled.py +41 -0
  321. prowler/providers/github/services/repository/repository_service.py +52 -0
  322. {prowler_cloud-5.14.1.dist-info → prowler_cloud-5.15.0.dist-info}/METADATA +40 -22
  323. {prowler_cloud-5.14.1.dist-info → prowler_cloud-5.15.0.dist-info}/RECORD +326 -73
  324. {prowler_cloud-5.14.1.dist-info → prowler_cloud-5.15.0.dist-info}/LICENSE +0 -0
  325. {prowler_cloud-5.14.1.dist-info → prowler_cloud-5.15.0.dist-info}/WHEEL +0 -0
  326. {prowler_cloud-5.14.1.dist-info → prowler_cloud-5.15.0.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,40 @@
1
+ {
2
+ "Provider": "alibabacloud",
3
+ "CheckID": "cs_kubernetes_rbac_enabled",
4
+ "CheckTitle": "Role-based access control (RBAC) authorization is Enabled on Kubernetes Engine Clusters",
5
+ "CheckType": [
6
+ "Threat detection during container runtime",
7
+ "Abnormal account"
8
+ ],
9
+ "ServiceName": "cs",
10
+ "SubServiceName": "",
11
+ "ResourceIdTemplate": "acs:cs:region:account-id:cluster/{cluster-id}",
12
+ "Severity": "high",
13
+ "ResourceType": "AlibabaCloudKubernetesCluster",
14
+ "Description": "In Kubernetes, authorizers interact by granting a permission if any authorizer grants the permission. The legacy authorizer in Kubernetes Engine grants broad, statically defined permissions.\n\nTo ensure that **RBAC** limits permissions correctly, you must disable the legacy authorizer. RBAC has significant security advantages, helps ensure that users only have access to specific cluster resources within their own namespace, and is now stable in Kubernetes.",
15
+ "Risk": "In Kubernetes, **RBAC** is used to grant permissions to resources at the cluster and namespace level. RBAC allows you to define roles with rules containing a set of permissions.\n\nWithout RBAC, legacy authorization mechanisms like **ABAC** grant **overly broad permissions**, increasing the risk of unauthorized access and privilege escalation.",
16
+ "RelatedUrl": "",
17
+ "AdditionalURLs": [
18
+ "https://help.aliyun.com/document_detail/87656.html",
19
+ "https://help.aliyun.com/document_detail/119596.html",
20
+ "https://www.trendmicro.com/cloudoneconformity/knowledge-base/alibaba-cloud/AlibabaCloud-ACK/enable-rbac-authorization.html"
21
+ ],
22
+ "Remediation": {
23
+ "Code": {
24
+ "CLI": "RBAC is enabled by default on new ACK clusters. Verify cluster authorization configuration.",
25
+ "NativeIaC": "",
26
+ "Other": "",
27
+ "Terraform": ""
28
+ },
29
+ "Recommendation": {
30
+ "Text": "1. Log on to the **ACK Console**\n2. Navigate to **Clusters** -> **Authorizations** page\n3. Select the target RAM sub-account and configure the RBAC roles on specific clusters or namespaces\n4. Ensure **RBAC** is enabled and legacy ABAC authorization is disabled",
31
+ "Url": "https://hub.prowler.com/check/cs_kubernetes_rbac_enabled"
32
+ }
33
+ },
34
+ "Categories": [
35
+ "identity-access"
36
+ ],
37
+ "DependsOn": [],
38
+ "RelatedTo": [],
39
+ "Notes": ""
40
+ }
@@ -0,0 +1,28 @@
1
+ from prowler.lib.check.models import Check, CheckReportAlibabaCloud
2
+ from prowler.providers.alibabacloud.services.cs.cs_client import cs_client
3
+
4
+
5
+ class cs_kubernetes_rbac_enabled(Check):
6
+ """Check if RBAC authorization is enabled on Kubernetes Engine Clusters."""
7
+
8
+ def execute(self) -> list[CheckReportAlibabaCloud]:
9
+ findings = []
10
+
11
+ for cluster in cs_client.clusters:
12
+ report = CheckReportAlibabaCloud(metadata=self.metadata(), resource=cluster)
13
+ report.region = cluster.region
14
+ report.resource_id = cluster.id
15
+ report.resource_arn = f"acs:cs:{cluster.region}:{cs_client.audited_account}:cluster/{cluster.id}"
16
+
17
+ if cluster.rbac_enabled:
18
+ report.status = "PASS"
19
+ report.status_extended = (
20
+ f"Kubernetes cluster {cluster.name} has RBAC authorization enabled."
21
+ )
22
+ else:
23
+ report.status = "FAIL"
24
+ report.status_extended = f"Kubernetes cluster {cluster.name} does not have RBAC authorization enabled or is using legacy ABAC authorization."
25
+
26
+ findings.append(report)
27
+
28
+ return findings
@@ -0,0 +1,354 @@
1
+ from datetime import datetime
2
+ from typing import Optional
3
+
4
+ from alibabacloud_cs20151215 import models as cs_models
5
+ from pydantic.v1 import BaseModel
6
+
7
+ from prowler.lib.logger import logger
8
+ from prowler.lib.scan_filters.scan_filters import is_resource_filtered
9
+ from prowler.providers.alibabacloud.lib.service.service import AlibabaCloudService
10
+
11
+
12
+ class CS(AlibabaCloudService):
13
+ """
14
+ CS (Container Service) class for Alibaba Cloud Kubernetes (ACK).
15
+
16
+ This class provides methods to interact with Alibaba Cloud Container Service
17
+ to retrieve ACK clusters and their configurations.
18
+ """
19
+
20
+ def __init__(self, provider):
21
+ # Call AlibabaCloudService's __init__
22
+ super().__init__(__class__.__name__, provider, global_service=False)
23
+
24
+ # Fetch CS resources
25
+ self.clusters = []
26
+ self.__threading_call__(self._describe_clusters)
27
+
28
+ def _describe_clusters(self, regional_client):
29
+ """List all ACK clusters and fetch their details in a specific region."""
30
+ region = getattr(regional_client, "region", "unknown")
31
+ logger.info(f"CS - Describing Kubernetes clusters in {region}...")
32
+
33
+ try:
34
+ # DescribeClustersV1 returns cluster list
35
+ request = cs_models.DescribeClustersV1Request()
36
+ response = regional_client.describe_clusters_v1(request)
37
+
38
+ if response and response.body and response.body.clusters:
39
+ for cluster_data in response.body.clusters:
40
+ cluster_id = getattr(cluster_data, "cluster_id", "")
41
+
42
+ if not self.audit_resources or is_resource_filtered(
43
+ cluster_id, self.audit_resources
44
+ ):
45
+ # Get detailed information for each cluster
46
+ cluster_detail = self._get_cluster_detail(
47
+ regional_client, cluster_id
48
+ )
49
+
50
+ if cluster_detail:
51
+ # Extract audit project name from meta_data
52
+ meta_data = cluster_detail.get("meta_data", {})
53
+ audit_project_name = meta_data.get("AuditProjectName", "")
54
+
55
+ # Check RBAC status - by default RBAC is enabled on ACK clusters
56
+ # We check if there are any indicators that RBAC is disabled
57
+ rbac_enabled = self._check_rbac_enabled(
58
+ cluster_detail, region
59
+ )
60
+
61
+ # Get node pools to check CloudMonitor
62
+ cloudmonitor_enabled = self._check_cloudmonitor_enabled(
63
+ regional_client, cluster_id
64
+ )
65
+
66
+ # Check if cluster checks have been run in the last week
67
+ last_check_time = self._get_last_cluster_check(
68
+ regional_client, cluster_id
69
+ )
70
+
71
+ # Check addons for dashboard, network policy, etc.
72
+ addons_status = self._check_cluster_addons(
73
+ cluster_detail, region
74
+ )
75
+
76
+ # Check for public API server endpoint
77
+ public_access_enabled = self._check_public_access(
78
+ cluster_detail, region
79
+ )
80
+
81
+ self.clusters.append(
82
+ Cluster(
83
+ id=cluster_id,
84
+ name=getattr(cluster_data, "name", cluster_id),
85
+ region=region,
86
+ cluster_type=getattr(
87
+ cluster_data, "cluster_type", ""
88
+ ),
89
+ state=getattr(cluster_data, "state", ""),
90
+ audit_project_name=audit_project_name,
91
+ log_service_enabled=bool(audit_project_name),
92
+ cloudmonitor_enabled=cloudmonitor_enabled,
93
+ rbac_enabled=rbac_enabled,
94
+ last_check_time=last_check_time,
95
+ dashboard_enabled=addons_status[
96
+ "dashboard_enabled"
97
+ ],
98
+ network_policy_enabled=addons_status[
99
+ "network_policy_enabled"
100
+ ],
101
+ eni_multiple_ip_enabled=addons_status[
102
+ "eni_multiple_ip_enabled"
103
+ ],
104
+ private_cluster_enabled=not public_access_enabled,
105
+ )
106
+ )
107
+
108
+ except Exception as error:
109
+ logger.error(
110
+ f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
111
+ )
112
+
113
+ def _get_cluster_detail(self, regional_client, cluster_id: str) -> dict:
114
+ """Get detailed information for a specific cluster."""
115
+ try:
116
+ # DescribeClusterDetail returns detailed cluster information
117
+ request = cs_models.DescribeClusterDetailRequest()
118
+ response = regional_client.describe_cluster_detail(cluster_id, request)
119
+
120
+ if response and response.body:
121
+ # Convert response body to dict
122
+ body = response.body
123
+ result = {"meta_data": {}}
124
+
125
+ # Check if meta_data exists in the response
126
+ if hasattr(body, "meta_data"):
127
+ meta_data = body.meta_data
128
+ if meta_data:
129
+ result["meta_data"] = dict(meta_data)
130
+
131
+ return result
132
+
133
+ return {}
134
+
135
+ except Exception as error:
136
+ logger.error(
137
+ f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
138
+ )
139
+ return {}
140
+
141
+ def _check_cloudmonitor_enabled(self, regional_client, cluster_id: str) -> bool:
142
+ """Check if CloudMonitor is enabled on cluster node pools."""
143
+ try:
144
+ # DescribeClusterNodePools returns node pool information
145
+ request = cs_models.DescribeClusterNodePoolsRequest()
146
+ response = regional_client.describe_cluster_node_pools(cluster_id, request)
147
+
148
+ if response and response.body and response.body.nodepools:
149
+ nodepools = response.body.nodepools
150
+
151
+ # Check if ALL node pools have CloudMonitor enabled
152
+ # If any node pool has cms_enabled=false, the cluster fails
153
+ for nodepool in nodepools:
154
+ kubernetes_config = getattr(nodepool, "kubernetes_config", None)
155
+ if kubernetes_config:
156
+ cms_enabled = getattr(kubernetes_config, "cms_enabled", False)
157
+ if not cms_enabled:
158
+ return False
159
+
160
+ # All node pools have CloudMonitor enabled
161
+ return True if nodepools else False
162
+
163
+ return False
164
+
165
+ except Exception as error:
166
+ logger.error(
167
+ f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
168
+ )
169
+ return False
170
+
171
+ def _check_rbac_enabled(self, cluster_detail: dict, region: str) -> bool:
172
+ """
173
+ Check if RBAC is enabled on the cluster.
174
+
175
+ By default, RBAC is enabled on ACK clusters and ABAC is disabled.
176
+ We check for any indicators that RBAC might be disabled or legacy auth enabled.
177
+ """
178
+ try:
179
+ # Check if cluster has RBAC enabled (default is true for ACK clusters)
180
+ # Look for security_options or parameters that indicate RBAC status
181
+
182
+ # Check meta_data for any RBAC-related settings
183
+ meta_data = cluster_detail.get("meta_data", {})
184
+
185
+ # If there's an explicit RBAC disabled flag, check it
186
+ if "RBACEnabled" in meta_data:
187
+ return meta_data.get("RBACEnabled", "true") in ["true", "True", True]
188
+
189
+ # Check parameters for authorization mode
190
+ parameters = cluster_detail.get("parameters", {})
191
+ if parameters:
192
+ # Check if there's an authorization mode parameter
193
+ auth_mode = parameters.get("authorization_mode", "RBAC")
194
+ if "ABAC" in auth_mode and "RBAC" not in auth_mode:
195
+ # Legacy ABAC-only mode
196
+ return False
197
+
198
+ # By default, RBAC is enabled on ACK clusters
199
+ # If we don't find explicit indicators that it's disabled, assume it's enabled
200
+ return True
201
+
202
+ except Exception as error:
203
+ logger.error(
204
+ f"{region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
205
+ )
206
+ # Default to True as RBAC is enabled by default on ACK
207
+ return True
208
+
209
+ def _get_last_cluster_check(self, regional_client, cluster_id: str):
210
+ """
211
+ Get the most recent successful cluster check time.
212
+
213
+ Returns the finished_at timestamp of the most recent successful cluster check,
214
+ or None if no successful checks found.
215
+ """
216
+ try:
217
+ # DescribeClusterChecks returns cluster check history
218
+ request = cs_models.DescribeClusterChecksRequest()
219
+ response = regional_client.describe_cluster_checks(cluster_id, request)
220
+
221
+ if response and response.body and response.body.checks:
222
+ checks = response.body.checks
223
+
224
+ # Find the most recent successful check
225
+ most_recent_check = None
226
+
227
+ for check in checks:
228
+ status = getattr(check, "status", "")
229
+ finished_at = getattr(check, "finished_at", None)
230
+
231
+ if status == "Succeeded" and finished_at:
232
+ # Parse the timestamp
233
+ if most_recent_check is None or finished_at > most_recent_check:
234
+ most_recent_check = finished_at
235
+
236
+ return most_recent_check
237
+
238
+ return None
239
+
240
+ except Exception as error:
241
+ logger.error(
242
+ f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
243
+ )
244
+ return None
245
+
246
+ def _check_cluster_addons(self, cluster_detail: dict, region: str) -> dict:
247
+ """
248
+ Check cluster addons for various security configurations.
249
+
250
+ Returns:
251
+ dict: {
252
+ "dashboard_enabled": bool,
253
+ "network_policy_enabled": bool,
254
+ "eni_multiple_ip_enabled": bool
255
+ }
256
+ """
257
+ result = {
258
+ "dashboard_enabled": False,
259
+ "network_policy_enabled": False,
260
+ "eni_multiple_ip_enabled": False,
261
+ }
262
+
263
+ try:
264
+ meta_data = cluster_detail.get("meta_data", {})
265
+
266
+ # Check Addons list in meta_data
267
+ # Note: Addons structure from API is typically a string representation of JSON or a list
268
+ # Based on sample: "Addons": [{"name": "gateway-api", ...}, ...]
269
+ addons = meta_data.get("Addons", [])
270
+
271
+ # If addons is string, try to parse it?
272
+ # The SDK typically handles this conversion, but let's be safe
273
+ if isinstance(addons, str):
274
+ import json
275
+
276
+ try:
277
+ addons = json.loads(addons)
278
+ except Exception:
279
+ addons = []
280
+
281
+ for addon in addons:
282
+ name = addon.get("name", "")
283
+ disabled = addon.get("disabled", False)
284
+
285
+ # Check 7.5: Kubernetes Dashboard
286
+ if name == "kubernetes-dashboard" and not disabled:
287
+ result["dashboard_enabled"] = True
288
+
289
+ # Check 7.7 & 7.8: Terway network plugin
290
+ if name == "terway-eniip" or name == "terway":
291
+ result["network_policy_enabled"] = True
292
+ result["eni_multiple_ip_enabled"] = True
293
+
294
+ return result
295
+
296
+ except Exception as error:
297
+ logger.error(
298
+ f"{region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
299
+ )
300
+ return result
301
+
302
+ def _check_public_access(self, cluster_detail: dict, region: str) -> bool:
303
+ """
304
+ Check if cluster API server is accessible from public internet.
305
+
306
+ Returns:
307
+ bool: True if public access is enabled, False otherwise.
308
+ """
309
+ try:
310
+ # Check master_url in cluster detail
311
+ master_url = cluster_detail.get("master_url", "")
312
+
313
+ # If master_url contains a public IP or DNS, public access is enabled
314
+ # Private clusters typically don't expose a public endpoint or have specific settings
315
+
316
+ # Check endpoint_public in parameters
317
+ parameters = cluster_detail.get("parameters", {})
318
+ endpoint_public = parameters.get("endpoint_public", "")
319
+
320
+ if endpoint_public:
321
+ return True
322
+
323
+ # If we can't find explicit indicator, check if master_url is present
324
+ # This is a heuristic - typical ACK public clusters expose a master_url
325
+ if master_url:
326
+ return True
327
+
328
+ return False
329
+
330
+ except Exception as error:
331
+ logger.error(
332
+ f"{region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
333
+ )
334
+ return False
335
+
336
+
337
+ # Models for CS service
338
+ class Cluster(BaseModel):
339
+ """ACK Cluster model."""
340
+
341
+ id: str
342
+ name: str
343
+ region: str
344
+ cluster_type: str
345
+ state: str
346
+ audit_project_name: str = ""
347
+ log_service_enabled: bool = False
348
+ cloudmonitor_enabled: bool = False
349
+ rbac_enabled: bool = True # Default is True for ACK clusters
350
+ last_check_time: Optional[datetime] = None
351
+ dashboard_enabled: bool = False
352
+ network_policy_enabled: bool = False
353
+ eni_multiple_ip_enabled: bool = False
354
+ private_cluster_enabled: bool = False
@@ -0,0 +1,38 @@
1
+ {
2
+ "Provider": "alibabacloud",
3
+ "CheckID": "ecs_attached_disk_encrypted",
4
+ "CheckTitle": "Virtual Machines disk are encrypted",
5
+ "CheckType": [
6
+ "Sensitive file tampering"
7
+ ],
8
+ "ServiceName": "ecs",
9
+ "SubServiceName": "",
10
+ "ResourceIdTemplate": "acs:ecs:region:account-id:disk/{disk-id}",
11
+ "Severity": "high",
12
+ "ResourceType": "AlibabaCloudECSDisk",
13
+ "Description": "**ECS cloud disk encryption** protects your data at rest. The cloud disk data encryption feature automatically encrypts data when data is transferred from ECS instances to disks, and decrypts data when read from disks.\n\nEnsure that disks are encrypted when they are created with the creation of VM instances.",
14
+ "Risk": "**Unencrypted disks** attached to ECS instances pose a security risk as they may contain sensitive data that could be accessed if the disk is compromised or accessed by unauthorized parties.\n\nData at rest without encryption is vulnerable to **unauthorized access** if storage media is lost, stolen, or improperly decommissioned.",
15
+ "RelatedUrl": "",
16
+ "AdditionalURLs": [
17
+ "https://www.alibabacloud.com/help/doc-detail/59643.htm",
18
+ "https://www.trendmicro.com/cloudoneconformity/knowledge-base/alibaba-cloud/AlibabaCloud-ECS/encrypt-vm-instance-disks.html"
19
+ ],
20
+ "Remediation": {
21
+ "Code": {
22
+ "CLI": "aliyun ecs CreateDisk --DiskName <disk_name> --Size <size> --Encrypted true --KmsKeyId <kms_key_id>",
23
+ "NativeIaC": "",
24
+ "Other": "",
25
+ "Terraform": "resource \"alicloud_ecs_disk\" \"encrypted\" {\n zone_id = \"cn-hangzhou-a\"\n disk_name = \"encrypted-disk\"\n category = \"cloud_efficiency\"\n size = 20\n encrypted = true\n kms_key_id = alicloud_kms_key.example.id\n}"
26
+ },
27
+ "Recommendation": {
28
+ "Text": "**Encrypt a system disk when copying an image:**\n1. Log on to the **ECS Console** > **Instances & Images** > **Images**\n2. Select the **Custom Image** tab and select target image\n3. Click **Copy Image** and check the **Encrypt** box\n4. Select a key and click **OK**\n\n**Encrypt a data disk when creating an instance:**\n1. Log on to the **ECS Console** > **Instances & Images** > **Instances** > **Create Instance**\n2. In the Storage section, click **Add Disk**\n3. Select **Disk Encryption** and choose a key\n\n**Note:** You cannot directly convert unencrypted disks to encrypted disks.",
29
+ "Url": "https://hub.prowler.com/check/ecs_attached_disk_encrypted"
30
+ }
31
+ },
32
+ "Categories": [
33
+ "encryption"
34
+ ],
35
+ "DependsOn": [],
36
+ "RelatedTo": [],
37
+ "Notes": ""
38
+ }
@@ -0,0 +1,38 @@
1
+ from prowler.lib.check.models import Check, CheckReportAlibabaCloud
2
+ from prowler.providers.alibabacloud.services.ecs.ecs_client import ecs_client
3
+
4
+
5
+ class ecs_attached_disk_encrypted(Check):
6
+ """Check if attached disks are encrypted."""
7
+
8
+ def execute(self) -> list[CheckReportAlibabaCloud]:
9
+ findings = []
10
+
11
+ for disk in ecs_client.disks:
12
+ # Only check attached disks
13
+ if disk.is_attached:
14
+ report = CheckReportAlibabaCloud(
15
+ metadata=self.metadata(), resource=disk
16
+ )
17
+ report.region = disk.region
18
+ report.resource_id = disk.id
19
+ report.resource_arn = (
20
+ f"acs:ecs:{disk.region}:{ecs_client.audited_account}:disk/{disk.id}"
21
+ )
22
+
23
+ if disk.is_encrypted:
24
+ report.status = "PASS"
25
+ report.status_extended = (
26
+ f"Disk {disk.name if disk.name else disk.id} attached to instance "
27
+ f"{disk.attached_instance_id} is encrypted."
28
+ )
29
+ else:
30
+ report.status = "FAIL"
31
+ report.status_extended = (
32
+ f"Disk {disk.name if disk.name else disk.id} attached to instance "
33
+ f"{disk.attached_instance_id} is not encrypted."
34
+ )
35
+
36
+ findings.append(report)
37
+
38
+ return findings
@@ -0,0 +1,4 @@
1
+ from prowler.providers.alibabacloud.services.ecs.ecs_service import ECS
2
+ from prowler.providers.common.provider import Provider
3
+
4
+ ecs_client = ECS(Provider.get_global_provider())
@@ -0,0 +1,41 @@
1
+ {
2
+ "Provider": "alibabacloud",
3
+ "CheckID": "ecs_instance_endpoint_protection_installed",
4
+ "CheckTitle": "The endpoint protection for all Virtual Machines is installed",
5
+ "CheckType": [
6
+ "Suspicious process",
7
+ "Webshell",
8
+ "Unusual logon",
9
+ "Sensitive file tampering",
10
+ "Malicious software"
11
+ ],
12
+ "ServiceName": "ecs",
13
+ "SubServiceName": "",
14
+ "ResourceIdTemplate": "acs:ecs:region:account-id:instance/{instance-id}",
15
+ "Severity": "high",
16
+ "ResourceType": "AlibabaCloudECSInstance",
17
+ "Description": "Installing **endpoint protection systems** (like **Security Center** for Alibaba Cloud) provides real-time protection capability that helps identify and remove viruses, spyware, and other malicious software.\n\nConfigurable alerts notify when known malicious software attempts to install itself or run on ECS instances.",
18
+ "Risk": "ECS instances without **endpoint protection** are vulnerable to **malware**, **viruses**, and other security threats.\n\nEndpoint protection provides real-time monitoring and protection capabilities essential for detecting and preventing security incidents.",
19
+ "RelatedUrl": "",
20
+ "AdditionalURLs": [
21
+ "https://www.trendmicro.com/cloudoneconformity/knowledge-base/alibaba-cloud/AlibabaCloud-ECS/enable-endpoint-protection.html"
22
+ ],
23
+ "Remediation": {
24
+ "Code": {
25
+ "CLI": "Logon to Security Center Console > Select Settings > Click Agent > Select virtual machines without Security Center agent > Click Install",
26
+ "NativeIaC": "",
27
+ "Other": "",
28
+ "Terraform": ""
29
+ },
30
+ "Recommendation": {
31
+ "Text": "1. Log on to the **Security Center Console**\n2. Select **Settings**\n3. Click **Agent**\n4. On the Agent tab, select the virtual machines without Security Center agent installed\n5. Click **Install**",
32
+ "Url": "https://hub.prowler.com/check/ecs_instance_endpoint_protection_installed"
33
+ }
34
+ },
35
+ "Categories": [
36
+ "forensics-ready"
37
+ ],
38
+ "DependsOn": [],
39
+ "RelatedTo": [],
40
+ "Notes": ""
41
+ }
@@ -0,0 +1,47 @@
1
+ from prowler.lib.check.models import Check, CheckReportAlibabaCloud
2
+ from prowler.providers.alibabacloud.services.ecs.ecs_client import ecs_client
3
+ from prowler.providers.alibabacloud.services.securitycenter.securitycenter_client import (
4
+ securitycenter_client,
5
+ )
6
+
7
+
8
+ class ecs_instance_endpoint_protection_installed(Check):
9
+ """Check if endpoint protection for all Virtual Machines is installed."""
10
+
11
+ def execute(self) -> list[CheckReportAlibabaCloud]:
12
+ findings = []
13
+
14
+ # Check each ECS instance for Security Center agent
15
+ for instance in ecs_client.instances:
16
+ # Only check running instances
17
+ if instance.status.lower() not in ["running", "starting"]:
18
+ continue
19
+
20
+ report = CheckReportAlibabaCloud(
21
+ metadata=self.metadata(), resource=instance
22
+ )
23
+ report.region = instance.region
24
+ report.resource_id = instance.id
25
+ report.resource_arn = f"acs:ecs:{instance.region}:{ecs_client.audited_account}:instance/{instance.id}"
26
+
27
+ # Check if Security Center agent is installed
28
+ instance_key = f"{instance.region}:{instance.id}"
29
+ agent = securitycenter_client.instance_agents.get(instance_key)
30
+
31
+ if agent:
32
+ if agent.agent_installed and agent.agent_status == "online":
33
+ report.status = "PASS"
34
+ report.status_extended = (
35
+ f"ECS instance {instance.name if instance.name else instance.id} "
36
+ "has Security Center agent installed and online."
37
+ )
38
+ else:
39
+ report.status = "FAIL"
40
+ report.status_extended = (
41
+ f"ECS instance {instance.name if instance.name else instance.id} "
42
+ f"does not have Security Center agent installed or agent is {agent.agent_status}."
43
+ )
44
+
45
+ findings.append(report)
46
+
47
+ return findings
@@ -0,0 +1,38 @@
1
+ {
2
+ "Provider": "alibabacloud",
3
+ "CheckID": "ecs_instance_latest_os_patches_applied",
4
+ "CheckTitle": "The latest OS Patches for all Virtual Machines are applied",
5
+ "CheckType": [
6
+ "Malicious software",
7
+ "Web application threat detection"
8
+ ],
9
+ "ServiceName": "ecs",
10
+ "SubServiceName": "",
11
+ "ResourceIdTemplate": "acs:ecs:region:account-id:instance/{instance-id}",
12
+ "Severity": "high",
13
+ "ResourceType": "AlibabaCloudECSInstance",
14
+ "Description": "Windows and Linux virtual machines should be kept updated to address specific bugs or flaws, improve OS or application's general stability, and fix **security vulnerabilities**.\n\nThe Alibaba Cloud **Security Center** checks for the latest updates in Linux and Windows systems.",
15
+ "Risk": "**Unpatched systems** are vulnerable to known security exploits and may be compromised by attackers.\n\nKeeping systems updated with the latest patches is critical for maintaining security and preventing **exploitation of known vulnerabilities**.",
16
+ "RelatedUrl": "",
17
+ "AdditionalURLs": [
18
+ "https://www.trendmicro.com/cloudoneconformity/knowledge-base/alibaba-cloud/AlibabaCloud-ECS/apply-latest-os-patches.html"
19
+ ],
20
+ "Remediation": {
21
+ "Code": {
22
+ "CLI": "Logon to Security Center Console > Select Vulnerabilities > Apply all patches for vulnerabilities",
23
+ "NativeIaC": "",
24
+ "Other": "",
25
+ "Terraform": ""
26
+ },
27
+ "Recommendation": {
28
+ "Text": "1. Log on to the **Security Center Console**\n2. Select **Vulnerabilities**\n3. Ensure all vulnerabilities are fixed\n4. Apply all patches for vulnerabilities",
29
+ "Url": "https://hub.prowler.com/check/ecs_instance_latest_os_patches_applied"
30
+ }
31
+ },
32
+ "Categories": [
33
+ "vulnerabilities"
34
+ ],
35
+ "DependsOn": [],
36
+ "RelatedTo": [],
37
+ "Notes": ""
38
+ }