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.
- dashboard/assets/images/providers/alibabacloud_provider.png +0 -0
- dashboard/compliance/cis_2_0_alibabacloud.py +24 -0
- dashboard/lib/layouts.py +1 -0
- dashboard/pages/compliance.py +8 -2
- dashboard/pages/overview.py +52 -1
- prowler/CHANGELOG.md +59 -20
- prowler/__main__.py +40 -0
- prowler/compliance/alibabacloud/__init__.py +0 -0
- prowler/compliance/alibabacloud/cis_2.0_alibabacloud.json +1833 -0
- prowler/compliance/aws/iso27001_2013_aws.json +158 -158
- prowler/compliance/aws/soc2_aws.json +100 -0
- prowler/compliance/azure/rbi_cyber_security_framework_azure.json +248 -0
- prowler/compliance/azure/soc2_azure.json +87 -1
- prowler/compliance/gcp/soc2_gcp.json +82 -1
- prowler/config/config.py +2 -1
- prowler/lib/check/check.py +47 -1
- prowler/lib/check/models.py +23 -0
- prowler/lib/check/utils.py +1 -1
- prowler/lib/cli/parser.py +3 -2
- prowler/lib/outputs/compliance/cis/cis_alibabacloud.py +106 -0
- prowler/lib/outputs/compliance/cis/models.py +35 -0
- prowler/lib/outputs/finding.py +16 -0
- prowler/lib/outputs/html/html.py +67 -0
- prowler/lib/outputs/outputs.py +2 -0
- prowler/lib/outputs/summary_table.py +3 -0
- prowler/providers/alibabacloud/__init__.py +0 -0
- prowler/providers/alibabacloud/alibabacloud_provider.py +872 -0
- prowler/providers/alibabacloud/config.py +41 -0
- prowler/providers/alibabacloud/exceptions/__init__.py +0 -0
- prowler/providers/alibabacloud/exceptions/exceptions.py +116 -0
- prowler/providers/alibabacloud/lib/__init__.py +0 -0
- prowler/providers/alibabacloud/lib/arguments/__init__.py +0 -0
- prowler/providers/alibabacloud/lib/arguments/arguments.py +58 -0
- prowler/providers/alibabacloud/lib/mutelist/__init__.py +0 -0
- prowler/providers/alibabacloud/lib/mutelist/mutelist.py +175 -0
- prowler/providers/alibabacloud/lib/service/__init__.py +0 -0
- prowler/providers/alibabacloud/lib/service/service.py +113 -0
- prowler/providers/alibabacloud/models.py +266 -0
- prowler/providers/alibabacloud/services/__init__.py +0 -0
- prowler/providers/alibabacloud/services/actiontrail/__init__.py +0 -0
- prowler/providers/alibabacloud/services/actiontrail/actiontrail_client.py +6 -0
- prowler/providers/alibabacloud/services/actiontrail/actiontrail_multi_region_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/actiontrail/actiontrail_multi_region_enabled/actiontrail_multi_region_enabled.metadata.json +39 -0
- prowler/providers/alibabacloud/services/actiontrail/actiontrail_multi_region_enabled/actiontrail_multi_region_enabled.py +81 -0
- prowler/providers/alibabacloud/services/actiontrail/actiontrail_oss_bucket_not_publicly_accessible/__init__.py +0 -0
- prowler/providers/alibabacloud/services/actiontrail/actiontrail_oss_bucket_not_publicly_accessible/actiontrail_oss_bucket_not_publicly_accessible.metadata.json +40 -0
- prowler/providers/alibabacloud/services/actiontrail/actiontrail_oss_bucket_not_publicly_accessible/actiontrail_oss_bucket_not_publicly_accessible.py +119 -0
- prowler/providers/alibabacloud/services/actiontrail/actiontrail_service.py +110 -0
- prowler/providers/alibabacloud/services/cs/__init__.py +0 -0
- prowler/providers/alibabacloud/services/cs/cs_client.py +4 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_cloudmonitor_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_cloudmonitor_enabled/cs_kubernetes_cloudmonitor_enabled.metadata.json +38 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_cloudmonitor_enabled/cs_kubernetes_cloudmonitor_enabled.py +26 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_cluster_check_recent/__init__.py +0 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_cluster_check_recent/cs_kubernetes_cluster_check_recent.metadata.json +38 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_cluster_check_recent/cs_kubernetes_cluster_check_recent.py +62 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_cluster_check_weekly/cs_kubernetes_cluster_check_weekly.metadata.json +38 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_cluster_check_weekly/cs_kubernetes_cluster_check_weekly.py +62 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_dashboard_disabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_dashboard_disabled/cs_kubernetes_dashboard_disabled.metadata.json +39 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_dashboard_disabled/cs_kubernetes_dashboard_disabled.py +26 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_eni_multiple_ip_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_eni_multiple_ip_enabled/cs_kubernetes_eni_multiple_ip_enabled.metadata.json +39 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_eni_multiple_ip_enabled/cs_kubernetes_eni_multiple_ip_enabled.py +26 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_log_service_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_log_service_enabled/cs_kubernetes_log_service_enabled.metadata.json +40 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_log_service_enabled/cs_kubernetes_log_service_enabled.py +26 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_network_policy_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_network_policy_enabled/cs_kubernetes_network_policy_enabled.metadata.json +39 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_network_policy_enabled/cs_kubernetes_network_policy_enabled.py +26 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_private_cluster_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_private_cluster_enabled/cs_kubernetes_private_cluster_enabled.metadata.json +39 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_private_cluster_enabled/cs_kubernetes_private_cluster_enabled.py +26 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_rbac_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_rbac_enabled/cs_kubernetes_rbac_enabled.metadata.json +40 -0
- prowler/providers/alibabacloud/services/cs/cs_kubernetes_rbac_enabled/cs_kubernetes_rbac_enabled.py +28 -0
- prowler/providers/alibabacloud/services/cs/cs_service.py +354 -0
- prowler/providers/alibabacloud/services/ecs/__init__.py +0 -0
- prowler/providers/alibabacloud/services/ecs/ecs_attached_disk_encrypted/__init__.py +0 -0
- prowler/providers/alibabacloud/services/ecs/ecs_attached_disk_encrypted/ecs_attached_disk_encrypted.metadata.json +38 -0
- prowler/providers/alibabacloud/services/ecs/ecs_attached_disk_encrypted/ecs_attached_disk_encrypted.py +38 -0
- prowler/providers/alibabacloud/services/ecs/ecs_client.py +4 -0
- prowler/providers/alibabacloud/services/ecs/ecs_instance_endpoint_protection_installed/__init__.py +0 -0
- prowler/providers/alibabacloud/services/ecs/ecs_instance_endpoint_protection_installed/ecs_instance_endpoint_protection_installed.metadata.json +41 -0
- prowler/providers/alibabacloud/services/ecs/ecs_instance_endpoint_protection_installed/ecs_instance_endpoint_protection_installed.py +47 -0
- prowler/providers/alibabacloud/services/ecs/ecs_instance_latest_os_patches_applied/__init__.py +0 -0
- prowler/providers/alibabacloud/services/ecs/ecs_instance_latest_os_patches_applied/ecs_instance_latest_os_patches_applied.metadata.json +38 -0
- prowler/providers/alibabacloud/services/ecs/ecs_instance_latest_os_patches_applied/ecs_instance_latest_os_patches_applied.py +50 -0
- prowler/providers/alibabacloud/services/ecs/ecs_instance_no_legacy_network/__init__.py +0 -0
- prowler/providers/alibabacloud/services/ecs/ecs_instance_no_legacy_network/ecs_instance_no_legacy_network.metadata.json +38 -0
- prowler/providers/alibabacloud/services/ecs/ecs_instance_no_legacy_network/ecs_instance_no_legacy_network.py +34 -0
- prowler/providers/alibabacloud/services/ecs/ecs_securitygroup_restrict_rdp_internet/__init__.py +0 -0
- prowler/providers/alibabacloud/services/ecs/ecs_securitygroup_restrict_rdp_internet/ecs_securitygroup_restrict_rdp_internet.metadata.json +39 -0
- prowler/providers/alibabacloud/services/ecs/ecs_securitygroup_restrict_rdp_internet/ecs_securitygroup_restrict_rdp_internet.py +68 -0
- prowler/providers/alibabacloud/services/ecs/ecs_securitygroup_restrict_ssh_internet/__init__.py +0 -0
- prowler/providers/alibabacloud/services/ecs/ecs_securitygroup_restrict_ssh_internet/ecs_securitygroup_restrict_ssh_internet.metadata.json +39 -0
- prowler/providers/alibabacloud/services/ecs/ecs_securitygroup_restrict_ssh_internet/ecs_securitygroup_restrict_ssh_internet.py +68 -0
- prowler/providers/alibabacloud/services/ecs/ecs_service.py +380 -0
- prowler/providers/alibabacloud/services/ecs/ecs_unattached_disk_encrypted/__init__.py +0 -0
- prowler/providers/alibabacloud/services/ecs/ecs_unattached_disk_encrypted/ecs_unattached_disk_encrypted.metadata.json +38 -0
- prowler/providers/alibabacloud/services/ecs/ecs_unattached_disk_encrypted/ecs_unattached_disk_encrypted.py +38 -0
- prowler/providers/alibabacloud/services/ecs/lib/security_groups.py +23 -0
- prowler/providers/alibabacloud/services/oss/__init__.py +0 -0
- prowler/providers/alibabacloud/services/oss/oss_bucket_logging_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/oss/oss_bucket_logging_enabled/oss_bucket_logging_enabled.metadata.json +39 -0
- prowler/providers/alibabacloud/services/oss/oss_bucket_logging_enabled/oss_bucket_logging_enabled.py +37 -0
- prowler/providers/alibabacloud/services/oss/oss_bucket_not_publicly_accessible/__init__.py +0 -0
- prowler/providers/alibabacloud/services/oss/oss_bucket_not_publicly_accessible/oss_bucket_not_publicly_accessible.metadata.json +39 -0
- prowler/providers/alibabacloud/services/oss/oss_bucket_not_publicly_accessible/oss_bucket_not_publicly_accessible.py +89 -0
- prowler/providers/alibabacloud/services/oss/oss_bucket_secure_transport_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/oss/oss_bucket_secure_transport_enabled/oss_bucket_secure_transport_enabled.metadata.json +38 -0
- prowler/providers/alibabacloud/services/oss/oss_bucket_secure_transport_enabled/oss_bucket_secure_transport_enabled.py +87 -0
- prowler/providers/alibabacloud/services/oss/oss_client.py +4 -0
- prowler/providers/alibabacloud/services/oss/oss_service.py +317 -0
- prowler/providers/alibabacloud/services/ram/__init__.py +0 -0
- prowler/providers/alibabacloud/services/ram/ram_client.py +4 -0
- prowler/providers/alibabacloud/services/ram/ram_no_root_access_key/__init__.py +0 -0
- prowler/providers/alibabacloud/services/ram/ram_no_root_access_key/ram_no_root_access_key.metadata.json +39 -0
- prowler/providers/alibabacloud/services/ram/ram_no_root_access_key/ram_no_root_access_key.py +33 -0
- prowler/providers/alibabacloud/services/ram/ram_password_policy_lowercase/__init__.py +0 -0
- prowler/providers/alibabacloud/services/ram/ram_password_policy_lowercase/ram_password_policy_lowercase.metadata.json +39 -0
- prowler/providers/alibabacloud/services/ram/ram_password_policy_lowercase/ram_password_policy_lowercase.py +32 -0
- prowler/providers/alibabacloud/services/ram/ram_password_policy_max_login_attempts/__init__.py +0 -0
- prowler/providers/alibabacloud/services/ram/ram_password_policy_max_login_attempts/ram_password_policy_max_login_attempts.metadata.json +39 -0
- prowler/providers/alibabacloud/services/ram/ram_password_policy_max_login_attempts/ram_password_policy_max_login_attempts.py +32 -0
- prowler/providers/alibabacloud/services/ram/ram_password_policy_max_password_age/__init__.py +0 -0
- prowler/providers/alibabacloud/services/ram/ram_password_policy_max_password_age/ram_password_policy_max_password_age.metadata.json +39 -0
- prowler/providers/alibabacloud/services/ram/ram_password_policy_max_password_age/ram_password_policy_max_password_age.py +35 -0
- prowler/providers/alibabacloud/services/ram/ram_password_policy_minimum_length/__init__.py +0 -0
- prowler/providers/alibabacloud/services/ram/ram_password_policy_minimum_length/ram_password_policy_minimum_length.metadata.json +39 -0
- prowler/providers/alibabacloud/services/ram/ram_password_policy_minimum_length/ram_password_policy_minimum_length.py +30 -0
- prowler/providers/alibabacloud/services/ram/ram_password_policy_number/__init__.py +0 -0
- prowler/providers/alibabacloud/services/ram/ram_password_policy_number/ram_password_policy_number.metadata.json +39 -0
- prowler/providers/alibabacloud/services/ram/ram_password_policy_password_reuse_prevention/__init__.py +0 -0
- prowler/providers/alibabacloud/services/ram/ram_password_policy_password_reuse_prevention/ram_password_policy_password_reuse_prevention.metadata.json +39 -0
- prowler/providers/alibabacloud/services/ram/ram_password_policy_password_reuse_prevention/ram_password_policy_password_reuse_prevention.py +35 -0
- prowler/providers/alibabacloud/services/ram/ram_password_policy_symbol/__init__.py +0 -0
- prowler/providers/alibabacloud/services/ram/ram_password_policy_symbol/ram_password_policy_symbol.metadata.json +39 -0
- prowler/providers/alibabacloud/services/ram/ram_password_policy_symbol/ram_password_policy_symbol.py +34 -0
- prowler/providers/alibabacloud/services/ram/ram_password_policy_uppercase/__init__.py +0 -0
- prowler/providers/alibabacloud/services/ram/ram_password_policy_uppercase/ram_password_policy_uppercase.metadata.json +39 -0
- prowler/providers/alibabacloud/services/ram/ram_password_policy_uppercase/ram_password_policy_uppercase.py +32 -0
- prowler/providers/alibabacloud/services/ram/ram_policy_attached_only_to_group_or_roles/__init__.py +0 -0
- 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
- prowler/providers/alibabacloud/services/ram/ram_policy_attached_only_to_group_or_roles/ram_policy_attached_only_to_group_or_roles.py +35 -0
- prowler/providers/alibabacloud/services/ram/ram_policy_no_administrative_privileges/__init__.py +0 -0
- prowler/providers/alibabacloud/services/ram/ram_policy_no_administrative_privileges/ram_policy_no_administrative_privileges.metadata.json +39 -0
- prowler/providers/alibabacloud/services/ram/ram_policy_no_administrative_privileges/ram_policy_no_administrative_privileges.py +73 -0
- prowler/providers/alibabacloud/services/ram/ram_rotate_access_key_90_days/__init__.py +0 -0
- prowler/providers/alibabacloud/services/ram/ram_rotate_access_key_90_days/ram_rotate_access_key_90_days.metadata.json +39 -0
- prowler/providers/alibabacloud/services/ram/ram_rotate_access_key_90_days/ram_rotate_access_key_90_days.py +58 -0
- prowler/providers/alibabacloud/services/ram/ram_service.py +478 -0
- prowler/providers/alibabacloud/services/ram/ram_user_console_access_unused/__init__.py +0 -0
- prowler/providers/alibabacloud/services/ram/ram_user_console_access_unused/ram_user_console_access_unused.metadata.json +39 -0
- prowler/providers/alibabacloud/services/ram/ram_user_console_access_unused/ram_user_console_access_unused.py +56 -0
- prowler/providers/alibabacloud/services/ram/ram_user_mfa_enabled_console_access/__init__.py +0 -0
- prowler/providers/alibabacloud/services/ram/ram_user_mfa_enabled_console_access/ram_user_mfa_enabled_console_access.metadata.json +39 -0
- prowler/providers/alibabacloud/services/ram/ram_user_mfa_enabled_console_access/ram_user_mfa_enabled_console_access.py +36 -0
- prowler/providers/alibabacloud/services/rds/__init__.py +0 -0
- prowler/providers/alibabacloud/services/rds/rds_client.py +4 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_no_public_access_whitelist/__init__.py +0 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_no_public_access_whitelist/rds_instance_no_public_access_whitelist.metadata.json +39 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_no_public_access_whitelist/rds_instance_no_public_access_whitelist.py +36 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_connections_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_connections_enabled/rds_instance_postgresql_log_connections_enabled.metadata.json +39 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_connections_enabled/rds_instance_postgresql_log_connections_enabled.py +29 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_disconnections_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_disconnections_enabled/rds_instance_postgresql_log_disconnections_enabled.metadata.json +39 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_disconnections_enabled/rds_instance_postgresql_log_disconnections_enabled.py +29 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_duration_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_duration_enabled/rds_instance_postgresql_log_duration_enabled.metadata.json +38 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_duration_enabled/rds_instance_postgresql_log_duration_enabled.py +29 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_sql_audit_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_sql_audit_enabled/rds_instance_sql_audit_enabled.metadata.json +39 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_sql_audit_enabled/rds_instance_sql_audit_enabled.py +32 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_sql_audit_retention/__init__.py +0 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_sql_audit_retention/rds_instance_sql_audit_retention.metadata.json +39 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_sql_audit_retention/rds_instance_sql_audit_retention.py +41 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_ssl_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_ssl_enabled/rds_instance_ssl_enabled.metadata.json +39 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_ssl_enabled/rds_instance_ssl_enabled.py +30 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_tde_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_tde_enabled/rds_instance_tde_enabled.metadata.json +39 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_tde_enabled/rds_instance_tde_enabled.py +32 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_tde_key_custom/__init__.py +0 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_tde_key_custom/rds_instance_tde_key_custom.metadata.json +39 -0
- prowler/providers/alibabacloud/services/rds/rds_instance_tde_key_custom/rds_instance_tde_key_custom.py +38 -0
- prowler/providers/alibabacloud/services/rds/rds_service.py +274 -0
- prowler/providers/alibabacloud/services/securitycenter/__init__.py +0 -0
- prowler/providers/alibabacloud/services/securitycenter/securitycenter_advanced_or_enterprise_edition/__init__.py +0 -0
- prowler/providers/alibabacloud/services/securitycenter/securitycenter_advanced_or_enterprise_edition/securitycenter_advanced_or_enterprise_edition.metadata.json +43 -0
- prowler/providers/alibabacloud/services/securitycenter/securitycenter_advanced_or_enterprise_edition/securitycenter_advanced_or_enterprise_edition.py +48 -0
- prowler/providers/alibabacloud/services/securitycenter/securitycenter_all_assets_agent_installed/__init__.py +0 -0
- prowler/providers/alibabacloud/services/securitycenter/securitycenter_all_assets_agent_installed/securitycenter_all_assets_agent_installed.metadata.json +42 -0
- prowler/providers/alibabacloud/services/securitycenter/securitycenter_all_assets_agent_installed/securitycenter_all_assets_agent_installed.py +48 -0
- prowler/providers/alibabacloud/services/securitycenter/securitycenter_client.py +6 -0
- prowler/providers/alibabacloud/services/securitycenter/securitycenter_notification_enabled_high_risk/__init__.py +0 -0
- prowler/providers/alibabacloud/services/securitycenter/securitycenter_notification_enabled_high_risk/securitycenter_notification_enabled_high_risk.metadata.json +42 -0
- prowler/providers/alibabacloud/services/securitycenter/securitycenter_notification_enabled_high_risk/securitycenter_notification_enabled_high_risk.py +65 -0
- prowler/providers/alibabacloud/services/securitycenter/securitycenter_service.py +394 -0
- prowler/providers/alibabacloud/services/securitycenter/securitycenter_vulnerability_scan_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/securitycenter/securitycenter_vulnerability_scan_enabled/securitycenter_vulnerability_scan_enabled.metadata.json +39 -0
- prowler/providers/alibabacloud/services/securitycenter/securitycenter_vulnerability_scan_enabled/securitycenter_vulnerability_scan_enabled.py +68 -0
- prowler/providers/alibabacloud/services/sls/__init__.py +0 -0
- prowler/providers/alibabacloud/services/sls/sls_client.py +4 -0
- prowler/providers/alibabacloud/services/sls/sls_cloud_firewall_changes_alert_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/sls/sls_cloud_firewall_changes_alert_enabled/sls_cloud_firewall_changes_alert_enabled.metadata.json +39 -0
- prowler/providers/alibabacloud/services/sls/sls_cloud_firewall_changes_alert_enabled/sls_cloud_firewall_changes_alert_enabled.py +50 -0
- prowler/providers/alibabacloud/services/sls/sls_customer_created_cmk_changes_alert_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/sls/sls_customer_created_cmk_changes_alert_enabled/sls_customer_created_cmk_changes_alert_enabled.metadata.json +39 -0
- prowler/providers/alibabacloud/services/sls/sls_customer_created_cmk_changes_alert_enabled/sls_customer_created_cmk_changes_alert_enabled.py +48 -0
- prowler/providers/alibabacloud/services/sls/sls_logstore_retention_period/__init__.py +0 -0
- prowler/providers/alibabacloud/services/sls/sls_logstore_retention_period/sls_logstore_retention_period.metadata.json +38 -0
- prowler/providers/alibabacloud/services/sls/sls_logstore_retention_period/sls_logstore_retention_period.py +32 -0
- prowler/providers/alibabacloud/services/sls/sls_management_console_authentication_failures_alert_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/sls/sls_management_console_authentication_failures_alert_enabled/sls_management_console_authentication_failures_alert_enabled.metadata.json +39 -0
- prowler/providers/alibabacloud/services/sls/sls_management_console_authentication_failures_alert_enabled/sls_management_console_authentication_failures_alert_enabled.py +44 -0
- prowler/providers/alibabacloud/services/sls/sls_management_console_signin_without_mfa_alert_enabled/__init__.py +0 -0
- 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
- prowler/providers/alibabacloud/services/sls/sls_management_console_signin_without_mfa_alert_enabled/sls_management_console_signin_without_mfa_alert_enabled.py +49 -0
- prowler/providers/alibabacloud/services/sls/sls_oss_bucket_policy_changes_alert_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/sls/sls_oss_bucket_policy_changes_alert_enabled/sls_oss_bucket_policy_changes_alert_enabled.metadata.json +39 -0
- prowler/providers/alibabacloud/services/sls/sls_oss_bucket_policy_changes_alert_enabled/sls_oss_bucket_policy_changes_alert_enabled.py +57 -0
- prowler/providers/alibabacloud/services/sls/sls_oss_permission_changes_alert_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/sls/sls_oss_permission_changes_alert_enabled/sls_oss_permission_changes_alert_enabled.metadata.json +39 -0
- prowler/providers/alibabacloud/services/sls/sls_oss_permission_changes_alert_enabled/sls_oss_permission_changes_alert_enabled.py +48 -0
- prowler/providers/alibabacloud/services/sls/sls_ram_role_changes_alert_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/sls/sls_ram_role_changes_alert_enabled/sls_ram_role_changes_alert_enabled.metadata.json +39 -0
- prowler/providers/alibabacloud/services/sls/sls_ram_role_changes_alert_enabled/sls_ram_role_changes_alert_enabled.py +54 -0
- prowler/providers/alibabacloud/services/sls/sls_rds_instance_configuration_changes_alert_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/sls/sls_rds_instance_configuration_changes_alert_enabled/sls_rds_instance_configuration_changes_alert_enabled.metadata.json +39 -0
- prowler/providers/alibabacloud/services/sls/sls_rds_instance_configuration_changes_alert_enabled/sls_rds_instance_configuration_changes_alert_enabled.py +72 -0
- prowler/providers/alibabacloud/services/sls/sls_root_account_usage_alert_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/sls/sls_root_account_usage_alert_enabled/sls_root_account_usage_alert_enabled.metadata.json +39 -0
- prowler/providers/alibabacloud/services/sls/sls_root_account_usage_alert_enabled/sls_root_account_usage_alert_enabled.py +50 -0
- prowler/providers/alibabacloud/services/sls/sls_security_group_changes_alert_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/sls/sls_security_group_changes_alert_enabled/sls_security_group_changes_alert_enabled.metadata.json +39 -0
- prowler/providers/alibabacloud/services/sls/sls_security_group_changes_alert_enabled/sls_security_group_changes_alert_enabled.py +56 -0
- prowler/providers/alibabacloud/services/sls/sls_service.py +137 -0
- prowler/providers/alibabacloud/services/sls/sls_unauthorized_api_calls_alert_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/sls/sls_unauthorized_api_calls_alert_enabled/sls_unauthorized_api_calls_alert_enabled.metadata.json +39 -0
- prowler/providers/alibabacloud/services/sls/sls_unauthorized_api_calls_alert_enabled/sls_unauthorized_api_calls_alert_enabled.py +56 -0
- prowler/providers/alibabacloud/services/sls/sls_vpc_changes_alert_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/sls/sls_vpc_changes_alert_enabled/sls_vpc_changes_alert_enabled.metadata.json +39 -0
- prowler/providers/alibabacloud/services/sls/sls_vpc_changes_alert_enabled/sls_vpc_changes_alert_enabled.py +57 -0
- prowler/providers/alibabacloud/services/sls/sls_vpc_network_route_changes_alert_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/sls/sls_vpc_network_route_changes_alert_enabled/sls_vpc_network_route_changes_alert_enabled.metadata.json +39 -0
- prowler/providers/alibabacloud/services/sls/sls_vpc_network_route_changes_alert_enabled/sls_vpc_network_route_changes_alert_enabled.py +52 -0
- prowler/providers/alibabacloud/services/vpc/__init__.py +0 -0
- prowler/providers/alibabacloud/services/vpc/vpc_client.py +4 -0
- prowler/providers/alibabacloud/services/vpc/vpc_flow_logs_enabled/__init__.py +0 -0
- prowler/providers/alibabacloud/services/vpc/vpc_flow_logs_enabled/vpc_flow_logs_enabled.metadata.json +39 -0
- prowler/providers/alibabacloud/services/vpc/vpc_flow_logs_enabled/vpc_flow_logs_enabled.py +30 -0
- prowler/providers/alibabacloud/services/vpc/vpc_service.py +102 -0
- prowler/providers/aws/aws_regions_by_service.json +20 -0
- prowler/providers/aws/services/apigateway/apigateway_restapi_waf_acl_attached/apigateway_restapi_waf_acl_attached.metadata.json +1 -3
- prowler/providers/aws/services/cloudtrail/cloudtrail_insights_exist/cloudtrail_insights_exist.metadata.json +1 -1
- prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_acls_alarm_configured/cloudwatch_changes_to_network_acls_alarm_configured.metadata.json +1 -2
- prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_gateways_alarm_configured/cloudwatch_changes_to_network_gateways_alarm_configured.metadata.json +1 -2
- 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
- prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_vpcs_alarm_configured/cloudwatch_changes_to_vpcs_alarm_configured.metadata.json +1 -2
- 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
- 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
- prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_authentication_failures/cloudwatch_log_metric_filter_authentication_failures.metadata.json +1 -2
- prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_aws_organizations_changes/cloudwatch_log_metric_filter_aws_organizations_changes.metadata.json +1 -2
- 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
- prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_policy_changes/cloudwatch_log_metric_filter_policy_changes.metadata.json +1 -2
- prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_root_usage/cloudwatch_log_metric_filter_root_usage.metadata.json +1 -2
- prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_security_group_changes/cloudwatch_log_metric_filter_security_group_changes.metadata.json +1 -2
- 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
- prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_unauthorized_api_calls/cloudwatch_log_metric_filter_unauthorized_api_calls.metadata.json +0 -1
- prowler/providers/aws/services/guardduty/guardduty_centrally_managed/guardduty_centrally_managed.metadata.json +16 -10
- prowler/providers/aws/services/guardduty/guardduty_ec2_malware_protection_enabled/guardduty_ec2_malware_protection_enabled.metadata.json +23 -14
- prowler/providers/aws/services/guardduty/guardduty_eks_audit_log_enabled/guardduty_eks_audit_log_enabled.metadata.json +19 -13
- prowler/providers/aws/services/guardduty/guardduty_eks_runtime_monitoring_enabled/guardduty_eks_runtime_monitoring_enabled.metadata.json +18 -12
- prowler/providers/aws/services/guardduty/guardduty_is_enabled/guardduty_is_enabled.metadata.json +24 -13
- prowler/providers/aws/services/guardduty/guardduty_lambda_protection_enabled/guardduty_lambda_protection_enabled.metadata.json +20 -14
- prowler/providers/aws/services/guardduty/guardduty_no_high_severity_findings/guardduty_no_high_severity_findings.metadata.json +18 -9
- prowler/providers/aws/services/guardduty/guardduty_rds_protection_enabled/guardduty_rds_protection_enabled.metadata.json +18 -11
- prowler/providers/aws/services/guardduty/guardduty_s3_protection_enabled/guardduty_s3_protection_enabled.metadata.json +21 -12
- prowler/providers/aws/services/lightsail/lightsail_database_public/lightsail_database_public.metadata.json +21 -13
- prowler/providers/aws/services/lightsail/lightsail_instance_automated_snapshots/lightsail_instance_automated_snapshots.metadata.json +24 -13
- prowler/providers/aws/services/lightsail/lightsail_instance_public/lightsail_instance_public.metadata.json +21 -13
- prowler/providers/aws/services/lightsail/lightsail_static_ip_unused/lightsail_static_ip_unused.metadata.json +23 -14
- prowler/providers/aws/services/macie/macie_automated_sensitive_data_discovery_enabled/macie_automated_sensitive_data_discovery_enabled.metadata.json +20 -12
- prowler/providers/aws/services/macie/macie_is_enabled/macie_is_enabled.metadata.json +17 -12
- prowler/providers/aws/services/mq/mq_broker_active_deployment_mode/mq_broker_active_deployment_mode.metadata.json +22 -13
- prowler/providers/aws/services/mq/mq_broker_auto_minor_version_upgrades/mq_broker_auto_minor_version_upgrades.metadata.json +21 -12
- prowler/providers/aws/services/mq/mq_broker_cluster_deployment_mode/mq_broker_cluster_deployment_mode.metadata.json +23 -14
- prowler/providers/aws/services/mq/mq_broker_logging_enabled/mq_broker_logging_enabled.metadata.json +22 -13
- prowler/providers/aws/services/mq/mq_broker_not_publicly_accessible/mq_broker_not_publicly_accessible.metadata.json +20 -12
- prowler/providers/aws/services/networkfirewall/networkfirewall_deletion_protection/networkfirewall_deletion_protection.metadata.json +21 -13
- prowler/providers/aws/services/networkfirewall/networkfirewall_in_all_vpc/networkfirewall_in_all_vpc.metadata.json +23 -13
- prowler/providers/aws/services/networkfirewall/networkfirewall_logging_enabled/networkfirewall_logging_enabled.metadata.json +20 -13
- prowler/providers/aws/services/networkfirewall/networkfirewall_multi_az/networkfirewall_multi_az.metadata.json +22 -14
- prowler/providers/aws/services/networkfirewall/networkfirewall_policy_default_action_fragmented_packets/networkfirewall_policy_default_action_fragmented_packets.metadata.json +26 -14
- prowler/providers/aws/services/networkfirewall/networkfirewall_policy_default_action_full_packets/networkfirewall_policy_default_action_full_packets.metadata.json +22 -13
- prowler/providers/aws/services/networkfirewall/networkfirewall_policy_rule_group_associated/networkfirewall_policy_rule_group_associated.metadata.json +25 -14
- prowler/providers/common/provider.py +12 -0
- prowler/providers/gcp/services/accesscontextmanager/__init__.py +0 -0
- prowler/providers/gcp/services/accesscontextmanager/accesscontextmanager_client.py +6 -0
- prowler/providers/gcp/services/accesscontextmanager/accesscontextmanager_service.py +101 -0
- prowler/providers/gcp/services/cloudresourcemanager/cloudresourcemanager_service.py +10 -0
- prowler/providers/gcp/services/cloudstorage/cloudstorage_service.py +13 -0
- prowler/providers/gcp/services/cloudstorage/cloudstorage_uses_vpc_service_controls/__init__.py +0 -0
- prowler/providers/gcp/services/cloudstorage/cloudstorage_uses_vpc_service_controls/cloudstorage_uses_vpc_service_controls.metadata.json +36 -0
- prowler/providers/gcp/services/cloudstorage/cloudstorage_uses_vpc_service_controls/cloudstorage_uses_vpc_service_controls.py +67 -0
- prowler/providers/gcp/services/compute/compute_instance_automatic_restart_enabled/__init__.py +0 -0
- prowler/providers/gcp/services/compute/compute_instance_automatic_restart_enabled/compute_instance_automatic_restart_enabled.metadata.json +36 -0
- prowler/providers/gcp/services/compute/compute_instance_automatic_restart_enabled/compute_instance_automatic_restart_enabled.py +35 -0
- prowler/providers/gcp/services/compute/compute_instance_deletion_protection_enabled/__init__.py +0 -0
- prowler/providers/gcp/services/compute/compute_instance_deletion_protection_enabled/compute_instance_deletion_protection_enabled.metadata.json +36 -0
- prowler/providers/gcp/services/compute/compute_instance_deletion_protection_enabled/compute_instance_deletion_protection_enabled.py +29 -0
- prowler/providers/gcp/services/compute/compute_instance_preemptible_vm_disabled/__init__.py +0 -0
- prowler/providers/gcp/services/compute/compute_instance_preemptible_vm_disabled/compute_instance_preemptible_vm_disabled.metadata.json +37 -0
- prowler/providers/gcp/services/compute/compute_instance_preemptible_vm_disabled/compute_instance_preemptible_vm_disabled.py +32 -0
- prowler/providers/gcp/services/compute/compute_service.py +16 -0
- prowler/providers/github/services/repository/repository_immutable_releases_enabled/__init__.py +0 -0
- prowler/providers/github/services/repository/repository_immutable_releases_enabled/repository_immutable_releases_enabled.metadata.json +33 -0
- prowler/providers/github/services/repository/repository_immutable_releases_enabled/repository_immutable_releases_enabled.py +41 -0
- prowler/providers/github/services/repository/repository_service.py +52 -0
- {prowler_cloud-5.14.1.dist-info → prowler_cloud-5.15.0.dist-info}/METADATA +40 -22
- {prowler_cloud-5.14.1.dist-info → prowler_cloud-5.15.0.dist-info}/RECORD +326 -73
- {prowler_cloud-5.14.1.dist-info → prowler_cloud-5.15.0.dist-info}/LICENSE +0 -0
- {prowler_cloud-5.14.1.dist-info → prowler_cloud-5.15.0.dist-info}/WHEEL +0 -0
- {prowler_cloud-5.14.1.dist-info → prowler_cloud-5.15.0.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
from datetime import datetime
|
|
2
|
+
from typing import Optional
|
|
3
|
+
|
|
4
|
+
from alibabacloud_ecs20140526 import models as ecs_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 ECS(AlibabaCloudService):
|
|
13
|
+
"""
|
|
14
|
+
ECS (Elastic Compute Service) service class for Alibaba Cloud.
|
|
15
|
+
|
|
16
|
+
This class provides methods to interact with Alibaba Cloud ECS service
|
|
17
|
+
to retrieve instances, security groups, etc.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
def __init__(self, provider):
|
|
21
|
+
# Call AlibabaCloudService's __init__
|
|
22
|
+
super().__init__(__class__.__name__, provider, global_service=False)
|
|
23
|
+
|
|
24
|
+
# Fetch ECS resources
|
|
25
|
+
self.instances = []
|
|
26
|
+
self.__threading_call__(self._describe_instances)
|
|
27
|
+
self.security_groups = {}
|
|
28
|
+
self.__threading_call__(self._describe_security_groups)
|
|
29
|
+
self.disks = []
|
|
30
|
+
self.__threading_call__(self._describe_disks)
|
|
31
|
+
|
|
32
|
+
def _describe_instances(self, regional_client):
|
|
33
|
+
"""List all ECS instances in the region."""
|
|
34
|
+
region = getattr(regional_client, "region", "unknown")
|
|
35
|
+
logger.info(f"ECS - Describing Instances in {region}...")
|
|
36
|
+
|
|
37
|
+
try:
|
|
38
|
+
request = ecs_models.DescribeInstancesRequest()
|
|
39
|
+
request.region_id = region
|
|
40
|
+
# Get all instances (paginated)
|
|
41
|
+
page_number = 1
|
|
42
|
+
page_size = 50
|
|
43
|
+
|
|
44
|
+
while True:
|
|
45
|
+
request.page_number = page_number
|
|
46
|
+
request.page_size = page_size
|
|
47
|
+
response = regional_client.describe_instances(request)
|
|
48
|
+
|
|
49
|
+
if response and response.body and response.body.instances:
|
|
50
|
+
instances_data = response.body.instances.instance
|
|
51
|
+
if not instances_data:
|
|
52
|
+
break
|
|
53
|
+
|
|
54
|
+
for instance_data in instances_data:
|
|
55
|
+
instance_id = instance_data.instance_id
|
|
56
|
+
if not self.audit_resources or is_resource_filtered(
|
|
57
|
+
instance_id, self.audit_resources
|
|
58
|
+
):
|
|
59
|
+
# Check network type
|
|
60
|
+
# InstanceNetworkType can be "classic" or "vpc"
|
|
61
|
+
# If VpcAttributes exists, it's VPC; if not, it might be classic
|
|
62
|
+
network_type = "vpc" # Default to VPC
|
|
63
|
+
vpc_attributes = getattr(
|
|
64
|
+
instance_data, "vpc_attributes", None
|
|
65
|
+
)
|
|
66
|
+
instance_network_type = getattr(
|
|
67
|
+
instance_data, "instance_network_type", None
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
# Determine network type
|
|
71
|
+
if instance_network_type:
|
|
72
|
+
network_type = instance_network_type
|
|
73
|
+
elif not vpc_attributes:
|
|
74
|
+
# If no VPC attributes, it's likely classic network
|
|
75
|
+
network_type = "classic"
|
|
76
|
+
|
|
77
|
+
vpc_id = ""
|
|
78
|
+
if vpc_attributes:
|
|
79
|
+
vpc_id = getattr(vpc_attributes, "vpc_id", "")
|
|
80
|
+
|
|
81
|
+
self.instances.append(
|
|
82
|
+
Instance(
|
|
83
|
+
id=instance_id,
|
|
84
|
+
name=getattr(
|
|
85
|
+
instance_data, "instance_name", instance_id
|
|
86
|
+
),
|
|
87
|
+
region=region,
|
|
88
|
+
status=getattr(instance_data, "status", ""),
|
|
89
|
+
instance_type=getattr(
|
|
90
|
+
instance_data, "instance_type", ""
|
|
91
|
+
),
|
|
92
|
+
network_type=network_type,
|
|
93
|
+
vpc_id=vpc_id,
|
|
94
|
+
create_time=getattr(
|
|
95
|
+
instance_data, "creation_time", None
|
|
96
|
+
),
|
|
97
|
+
)
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
# Check if there are more pages
|
|
101
|
+
total_count = getattr(response.body, "total_count", 0)
|
|
102
|
+
if page_number * page_size >= total_count:
|
|
103
|
+
break
|
|
104
|
+
page_number += 1
|
|
105
|
+
else:
|
|
106
|
+
break
|
|
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 _describe_security_groups(self, regional_client):
|
|
114
|
+
"""List all security groups and their rules in the region."""
|
|
115
|
+
region = getattr(regional_client, "region", "unknown")
|
|
116
|
+
logger.info(f"ECS - Describing Security Groups in {region}...")
|
|
117
|
+
|
|
118
|
+
try:
|
|
119
|
+
request = ecs_models.DescribeSecurityGroupsRequest()
|
|
120
|
+
request.region_id = region
|
|
121
|
+
# Get all security groups (paginated)
|
|
122
|
+
page_number = 1
|
|
123
|
+
page_size = 50
|
|
124
|
+
|
|
125
|
+
while True:
|
|
126
|
+
request.page_number = page_number
|
|
127
|
+
request.page_size = page_size
|
|
128
|
+
response = regional_client.describe_security_groups(request)
|
|
129
|
+
|
|
130
|
+
if response and response.body and response.body.security_groups:
|
|
131
|
+
security_groups_data = response.body.security_groups.security_group
|
|
132
|
+
if not security_groups_data:
|
|
133
|
+
break
|
|
134
|
+
|
|
135
|
+
for sg_data in security_groups_data:
|
|
136
|
+
sg_id = sg_data.security_group_id
|
|
137
|
+
if not self.audit_resources or is_resource_filtered(
|
|
138
|
+
sg_id, self.audit_resources
|
|
139
|
+
):
|
|
140
|
+
# Get security group rules
|
|
141
|
+
ingress_rules = []
|
|
142
|
+
egress_rules = []
|
|
143
|
+
|
|
144
|
+
# Get ingress rules
|
|
145
|
+
try:
|
|
146
|
+
rules_request = (
|
|
147
|
+
ecs_models.DescribeSecurityGroupAttributeRequest()
|
|
148
|
+
)
|
|
149
|
+
rules_request.security_group_id = sg_id
|
|
150
|
+
rules_request.region_id = region
|
|
151
|
+
rules_request.direction = "ingress"
|
|
152
|
+
rules_response = (
|
|
153
|
+
regional_client.describe_security_group_attribute(
|
|
154
|
+
rules_request
|
|
155
|
+
)
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
if (
|
|
159
|
+
rules_response
|
|
160
|
+
and rules_response.body
|
|
161
|
+
and rules_response.body.permissions
|
|
162
|
+
):
|
|
163
|
+
permissions = (
|
|
164
|
+
rules_response.body.permissions.permission
|
|
165
|
+
)
|
|
166
|
+
if permissions:
|
|
167
|
+
for rule in permissions:
|
|
168
|
+
ingress_rules.append(
|
|
169
|
+
{
|
|
170
|
+
"port_range": getattr(
|
|
171
|
+
rule, "port_range", ""
|
|
172
|
+
),
|
|
173
|
+
"source_cidr_ip": getattr(
|
|
174
|
+
rule, "source_cidr_ip", ""
|
|
175
|
+
),
|
|
176
|
+
"ip_protocol": getattr(
|
|
177
|
+
rule, "ip_protocol", ""
|
|
178
|
+
),
|
|
179
|
+
"policy": getattr(
|
|
180
|
+
rule, "policy", "accept"
|
|
181
|
+
),
|
|
182
|
+
}
|
|
183
|
+
)
|
|
184
|
+
except Exception as error:
|
|
185
|
+
logger.warning(
|
|
186
|
+
f"Could not get ingress rules for security group {sg_id}: {error}"
|
|
187
|
+
)
|
|
188
|
+
|
|
189
|
+
# Get egress rules
|
|
190
|
+
try:
|
|
191
|
+
rules_request = (
|
|
192
|
+
ecs_models.DescribeSecurityGroupAttributeRequest()
|
|
193
|
+
)
|
|
194
|
+
rules_request.security_group_id = sg_id
|
|
195
|
+
rules_request.region_id = region
|
|
196
|
+
rules_request.direction = "egress"
|
|
197
|
+
rules_response = (
|
|
198
|
+
regional_client.describe_security_group_attribute(
|
|
199
|
+
rules_request
|
|
200
|
+
)
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
if (
|
|
204
|
+
rules_response
|
|
205
|
+
and rules_response.body
|
|
206
|
+
and rules_response.body.permissions
|
|
207
|
+
):
|
|
208
|
+
permissions = (
|
|
209
|
+
rules_response.body.permissions.permission
|
|
210
|
+
)
|
|
211
|
+
if permissions:
|
|
212
|
+
for rule in permissions:
|
|
213
|
+
egress_rules.append(
|
|
214
|
+
{
|
|
215
|
+
"port_range": getattr(
|
|
216
|
+
rule, "port_range", ""
|
|
217
|
+
),
|
|
218
|
+
"dest_cidr_ip": getattr(
|
|
219
|
+
rule, "dest_cidr_ip", ""
|
|
220
|
+
),
|
|
221
|
+
"ip_protocol": getattr(
|
|
222
|
+
rule, "ip_protocol", ""
|
|
223
|
+
),
|
|
224
|
+
"policy": getattr(
|
|
225
|
+
rule, "policy", "accept"
|
|
226
|
+
),
|
|
227
|
+
}
|
|
228
|
+
)
|
|
229
|
+
except Exception as error:
|
|
230
|
+
logger.warning(
|
|
231
|
+
f"Could not get egress rules for security group {sg_id}: {error}"
|
|
232
|
+
)
|
|
233
|
+
|
|
234
|
+
sg_arn = f"acs:ecs:{region}:{self.audited_account}:security-group/{sg_id}"
|
|
235
|
+
self.security_groups[sg_arn] = SecurityGroup(
|
|
236
|
+
id=sg_id,
|
|
237
|
+
name=getattr(sg_data, "security_group_name", sg_id),
|
|
238
|
+
region=region,
|
|
239
|
+
arn=sg_arn,
|
|
240
|
+
vpc_id=getattr(sg_data, "vpc_id", ""),
|
|
241
|
+
description=getattr(sg_data, "description", ""),
|
|
242
|
+
ingress_rules=ingress_rules,
|
|
243
|
+
egress_rules=egress_rules,
|
|
244
|
+
)
|
|
245
|
+
|
|
246
|
+
# Check if there are more pages
|
|
247
|
+
total_count = getattr(response.body, "total_count", 0)
|
|
248
|
+
if page_number * page_size >= total_count:
|
|
249
|
+
break
|
|
250
|
+
page_number += 1
|
|
251
|
+
else:
|
|
252
|
+
break
|
|
253
|
+
|
|
254
|
+
except Exception as error:
|
|
255
|
+
logger.error(
|
|
256
|
+
f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
|
|
257
|
+
)
|
|
258
|
+
|
|
259
|
+
def _describe_disks(self, regional_client):
|
|
260
|
+
"""List all disks in the region."""
|
|
261
|
+
region = getattr(regional_client, "region", "unknown")
|
|
262
|
+
logger.info(f"ECS - Describing Disks in {region}...")
|
|
263
|
+
|
|
264
|
+
try:
|
|
265
|
+
request = ecs_models.DescribeDisksRequest()
|
|
266
|
+
request.region_id = region
|
|
267
|
+
# Get all disks (paginated)
|
|
268
|
+
page_number = 1
|
|
269
|
+
page_size = 50
|
|
270
|
+
|
|
271
|
+
while True:
|
|
272
|
+
request.page_number = page_number
|
|
273
|
+
request.page_size = page_size
|
|
274
|
+
response = regional_client.describe_disks(request)
|
|
275
|
+
|
|
276
|
+
if response and response.body and response.body.disks:
|
|
277
|
+
disks_data = response.body.disks.disk
|
|
278
|
+
if not disks_data:
|
|
279
|
+
break
|
|
280
|
+
|
|
281
|
+
for disk_data in disks_data:
|
|
282
|
+
disk_id = disk_data.disk_id
|
|
283
|
+
if not self.audit_resources or is_resource_filtered(
|
|
284
|
+
disk_id, self.audit_resources
|
|
285
|
+
):
|
|
286
|
+
# Check if disk is attached
|
|
287
|
+
attached_instance_id = getattr(disk_data, "instance_id", "")
|
|
288
|
+
is_attached = bool(attached_instance_id)
|
|
289
|
+
|
|
290
|
+
# Check encryption status
|
|
291
|
+
# In Alibaba Cloud, encryption can be indicated by:
|
|
292
|
+
# 1. encrypted field (boolean)
|
|
293
|
+
# 2. encryption_algorithm field (non-empty string)
|
|
294
|
+
# 3. kms_key_id field (non-empty string)
|
|
295
|
+
encrypted = getattr(disk_data, "encrypted", False)
|
|
296
|
+
encryption_algorithm = getattr(
|
|
297
|
+
disk_data, "encryption_algorithm", ""
|
|
298
|
+
)
|
|
299
|
+
kms_key_id = getattr(disk_data, "kms_key_id", "")
|
|
300
|
+
|
|
301
|
+
# Disk is encrypted if any of these conditions are true
|
|
302
|
+
is_encrypted = (
|
|
303
|
+
encrypted
|
|
304
|
+
or bool(encryption_algorithm)
|
|
305
|
+
or bool(kms_key_id)
|
|
306
|
+
)
|
|
307
|
+
|
|
308
|
+
self.disks.append(
|
|
309
|
+
Disk(
|
|
310
|
+
id=disk_id,
|
|
311
|
+
name=getattr(disk_data, "disk_name", disk_id),
|
|
312
|
+
region=region,
|
|
313
|
+
status=getattr(disk_data, "status", ""),
|
|
314
|
+
disk_category=getattr(disk_data, "category", ""),
|
|
315
|
+
size=getattr(disk_data, "size", 0),
|
|
316
|
+
is_attached=is_attached,
|
|
317
|
+
attached_instance_id=attached_instance_id,
|
|
318
|
+
is_encrypted=is_encrypted,
|
|
319
|
+
encryption_algorithm=encryption_algorithm or "",
|
|
320
|
+
create_time=getattr(
|
|
321
|
+
disk_data, "creation_time", None
|
|
322
|
+
),
|
|
323
|
+
)
|
|
324
|
+
)
|
|
325
|
+
|
|
326
|
+
# Check if there are more pages
|
|
327
|
+
total_count = getattr(response.body, "total_count", 0)
|
|
328
|
+
if page_number * page_size >= total_count:
|
|
329
|
+
break
|
|
330
|
+
page_number += 1
|
|
331
|
+
else:
|
|
332
|
+
break
|
|
333
|
+
|
|
334
|
+
except Exception as error:
|
|
335
|
+
logger.error(
|
|
336
|
+
f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
|
|
337
|
+
)
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
# Models for ECS service
|
|
341
|
+
class Instance(BaseModel):
|
|
342
|
+
"""ECS Instance model."""
|
|
343
|
+
|
|
344
|
+
id: str
|
|
345
|
+
name: str
|
|
346
|
+
region: str
|
|
347
|
+
status: str
|
|
348
|
+
instance_type: str
|
|
349
|
+
network_type: str # "classic" or "vpc"
|
|
350
|
+
vpc_id: str = ""
|
|
351
|
+
create_time: Optional[datetime] = None
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
class SecurityGroup(BaseModel):
|
|
355
|
+
"""ECS Security Group model."""
|
|
356
|
+
|
|
357
|
+
id: str
|
|
358
|
+
name: str
|
|
359
|
+
region: str
|
|
360
|
+
arn: str
|
|
361
|
+
vpc_id: str = ""
|
|
362
|
+
description: str = ""
|
|
363
|
+
ingress_rules: list[dict] = []
|
|
364
|
+
egress_rules: list[dict] = []
|
|
365
|
+
|
|
366
|
+
|
|
367
|
+
class Disk(BaseModel):
|
|
368
|
+
"""ECS Disk model."""
|
|
369
|
+
|
|
370
|
+
id: str
|
|
371
|
+
name: str
|
|
372
|
+
region: str
|
|
373
|
+
status: str
|
|
374
|
+
disk_category: str
|
|
375
|
+
size: int
|
|
376
|
+
is_attached: bool
|
|
377
|
+
attached_instance_id: str = ""
|
|
378
|
+
is_encrypted: bool
|
|
379
|
+
encryption_algorithm: str = ""
|
|
380
|
+
create_time: Optional[datetime] = None
|
|
File without changes
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Provider": "alibabacloud",
|
|
3
|
+
"CheckID": "ecs_unattached_disk_encrypted",
|
|
4
|
+
"CheckTitle": "Unattached disks 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": "**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.",
|
|
14
|
+
"Risk": "**Unencrypted unattached disks** 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\nUnattached disks are especially vulnerable as they may be forgotten or not monitored, increasing the risk of **unauthorized access**.",
|
|
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-unattached-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": "1. Log on to the **ECS Console**\n2. In the left-side navigation pane, choose **Storage & Snapshots** > **Disk**\n3. In the upper-right corner of the Disks page, click **Create Disk**\n4. In the Disk section, check the **Disk Encryption** box and select a key from the drop-down list\n\n**Note:** After a data disk is created, you can only encrypt the data disk by manually copying data from the unencrypted disk to a new encrypted disk.",
|
|
29
|
+
"Url": "https://hub.prowler.com/check/ecs_unattached_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_unattached_disk_encrypted(Check):
|
|
6
|
+
"""Check if unattached disks are encrypted."""
|
|
7
|
+
|
|
8
|
+
def execute(self) -> list[CheckReportAlibabaCloud]:
|
|
9
|
+
findings = []
|
|
10
|
+
|
|
11
|
+
for disk in ecs_client.disks:
|
|
12
|
+
# Only check unattached disks
|
|
13
|
+
if not 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"Unattached disk {disk.name if disk.name else disk.id} "
|
|
27
|
+
f"is encrypted."
|
|
28
|
+
)
|
|
29
|
+
else:
|
|
30
|
+
report.status = "FAIL"
|
|
31
|
+
report.status_extended = (
|
|
32
|
+
f"Unattached disk {disk.name if disk.name else disk.id} "
|
|
33
|
+
f"is not encrypted."
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
findings.append(report)
|
|
37
|
+
|
|
38
|
+
return findings
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
def is_public_cidr(cidr: str) -> bool:
|
|
2
|
+
"""Return True when the CIDR represents public/unrestricted access."""
|
|
3
|
+
return cidr in ("0.0.0.0/0", "::/0")
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def port_in_range(port_range: str, target_port: int) -> bool:
|
|
7
|
+
"""
|
|
8
|
+
Check if target_port is within the provided port range.
|
|
9
|
+
|
|
10
|
+
Port range examples:
|
|
11
|
+
- "3389/3389" -> single port range
|
|
12
|
+
- "22" -> single port
|
|
13
|
+
"""
|
|
14
|
+
if not port_range:
|
|
15
|
+
return False
|
|
16
|
+
|
|
17
|
+
try:
|
|
18
|
+
if "/" in port_range:
|
|
19
|
+
from_port, to_port = map(int, port_range.split("/"))
|
|
20
|
+
return from_port <= target_port <= to_port
|
|
21
|
+
return int(port_range) == target_port
|
|
22
|
+
except (ValueError, AttributeError):
|
|
23
|
+
return False
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Provider": "alibabacloud",
|
|
3
|
+
"CheckID": "oss_bucket_logging_enabled",
|
|
4
|
+
"CheckTitle": "Logging is enabled for OSS buckets",
|
|
5
|
+
"CheckType": [
|
|
6
|
+
"Sensitive file tampering",
|
|
7
|
+
"Cloud threat detection"
|
|
8
|
+
],
|
|
9
|
+
"ServiceName": "oss",
|
|
10
|
+
"SubServiceName": "",
|
|
11
|
+
"ResourceIdTemplate": "acs:oss::account-id:bucket-name",
|
|
12
|
+
"Severity": "medium",
|
|
13
|
+
"ResourceType": "AlibabaCloudOSSBucket",
|
|
14
|
+
"Description": "**OSS Bucket Access Logging** generates a log that contains access records for each request made to your OSS bucket.\n\nAn access log record contains details about the request, such as the request type, the resources specified in the request, and the time and date the request was processed. It is recommended that bucket access logging be enabled on OSS buckets.",
|
|
15
|
+
"Risk": "By enabling **OSS bucket logging** on target OSS buckets, it is possible to capture all events which may affect objects within target buckets.\n\nConfiguring logs to be placed in a separate bucket allows access to log information useful in **security** and **incident response** workflows.",
|
|
16
|
+
"RelatedUrl": "",
|
|
17
|
+
"AdditionalURLs": [
|
|
18
|
+
"https://www.alibabacloud.com/help/doc-detail/31900.htm",
|
|
19
|
+
"https://www.trendmicro.com/cloudoneconformity/knowledge-base/alibaba-cloud/AlibabaCloud-OSS/enable-bucket-access-logging.html"
|
|
20
|
+
],
|
|
21
|
+
"Remediation": {
|
|
22
|
+
"Code": {
|
|
23
|
+
"CLI": "ossutil logging --method put oss://<bucket-name> --target-bucket <target-bucket> --target-prefix <prefix>",
|
|
24
|
+
"NativeIaC": "",
|
|
25
|
+
"Other": "",
|
|
26
|
+
"Terraform": "resource \"alicloud_oss_bucket_logging\" \"example\" {\n bucket = alicloud_oss_bucket.example.bucket\n target_bucket = alicloud_oss_bucket.log_bucket.bucket\n target_prefix = \"log/\"\n}"
|
|
27
|
+
},
|
|
28
|
+
"Recommendation": {
|
|
29
|
+
"Text": "1. Log on to the **OSS Console**\n2. In the bucket-list pane, click on a target OSS bucket\n3. Under **Log**, click **Configure**\n4. Click the **Enabled** checkbox\n5. Select `Target Bucket` from the list\n6. Enter a `Target Prefix`\n7. Click **Save**",
|
|
30
|
+
"Url": "https://hub.prowler.com/check/oss_bucket_logging_enabled"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"Categories": [
|
|
34
|
+
"logging"
|
|
35
|
+
],
|
|
36
|
+
"DependsOn": [],
|
|
37
|
+
"RelatedTo": [],
|
|
38
|
+
"Notes": ""
|
|
39
|
+
}
|
prowler/providers/alibabacloud/services/oss/oss_bucket_logging_enabled/oss_bucket_logging_enabled.py
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
from prowler.lib.check.models import Check, CheckReportAlibabaCloud
|
|
2
|
+
from prowler.providers.alibabacloud.services.oss.oss_client import oss_client
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class oss_bucket_logging_enabled(Check):
|
|
6
|
+
"""Check if logging is enabled for OSS buckets."""
|
|
7
|
+
|
|
8
|
+
def execute(self) -> list[CheckReportAlibabaCloud]:
|
|
9
|
+
findings = []
|
|
10
|
+
|
|
11
|
+
for bucket in oss_client.buckets.values():
|
|
12
|
+
report = CheckReportAlibabaCloud(metadata=self.metadata(), resource=bucket)
|
|
13
|
+
report.region = bucket.region
|
|
14
|
+
report.resource_id = bucket.name
|
|
15
|
+
report.resource_arn = bucket.arn
|
|
16
|
+
|
|
17
|
+
if bucket.logging_enabled:
|
|
18
|
+
report.status = "PASS"
|
|
19
|
+
if bucket.logging_target_bucket:
|
|
20
|
+
report.status_extended = (
|
|
21
|
+
f"OSS bucket {bucket.name} has logging enabled. "
|
|
22
|
+
f"Logs are stored in bucket '{bucket.logging_target_bucket}' "
|
|
23
|
+
f"with prefix {bucket.logging_target_prefix}."
|
|
24
|
+
)
|
|
25
|
+
else:
|
|
26
|
+
report.status_extended = (
|
|
27
|
+
f"OSS bucket {bucket.name} has logging enabled."
|
|
28
|
+
)
|
|
29
|
+
else:
|
|
30
|
+
report.status = "FAIL"
|
|
31
|
+
report.status_extended = (
|
|
32
|
+
f"OSS bucket {bucket.name} does not have logging enabled."
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
findings.append(report)
|
|
36
|
+
|
|
37
|
+
return findings
|
|
File without changes
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Provider": "alibabacloud",
|
|
3
|
+
"CheckID": "oss_bucket_not_publicly_accessible",
|
|
4
|
+
"CheckTitle": "OSS bucket is not anonymously or publicly accessible",
|
|
5
|
+
"CheckType": [
|
|
6
|
+
"Sensitive file tampering",
|
|
7
|
+
"Cloud threat detection"
|
|
8
|
+
],
|
|
9
|
+
"ServiceName": "oss",
|
|
10
|
+
"SubServiceName": "",
|
|
11
|
+
"ResourceIdTemplate": "acs:oss::account-id:bucket-name",
|
|
12
|
+
"Severity": "critical",
|
|
13
|
+
"ResourceType": "AlibabaCloudOSSBucket",
|
|
14
|
+
"Description": "A bucket is a container used to store objects in **Object Storage Service (OSS)**. All objects in OSS are stored in buckets.\n\nIt is recommended that the access policy on OSS buckets does not allow **anonymous** and/or **public access**.",
|
|
15
|
+
"Risk": "Allowing **anonymous** and/or **public access** grants permissions to anyone to access bucket content. Such access might not be desired if you are storing any sensitive data.\n\nPublic buckets can lead to **data breaches**, **unauthorized data access**, and **compliance violations**.",
|
|
16
|
+
"RelatedUrl": "",
|
|
17
|
+
"AdditionalURLs": [
|
|
18
|
+
"https://www.alibabacloud.com/help/doc-detail/31896.htm",
|
|
19
|
+
"https://www.trendmicro.com/cloudoneconformity/knowledge-base/alibaba-cloud/AlibabaCloud-OSS/publicly-accessible-oss-bucket.html"
|
|
20
|
+
],
|
|
21
|
+
"Remediation": {
|
|
22
|
+
"Code": {
|
|
23
|
+
"CLI": "aliyun oss PutBucketAcl --bucket <bucket-name> --acl private",
|
|
24
|
+
"NativeIaC": "",
|
|
25
|
+
"Other": "",
|
|
26
|
+
"Terraform": "resource \"alicloud_oss_bucket_public_access_block\" \"example\" {\n bucket = alicloud_oss_bucket.example.bucket\n block_public_access = true\n}"
|
|
27
|
+
},
|
|
28
|
+
"Recommendation": {
|
|
29
|
+
"Text": "**Set Bucket ACL to Private:**\n1. Log on to the **OSS Console**\n2. In the bucket-list pane, click on a target OSS bucket\n3. Click on **Basic Setting** in the top middle of the console\n4. Under ACL section, click on **Configure**\n5. Click **Private** and click **Save**\n\n**For Bucket Policy:**\n1. Click **Bucket**, and then click the name of the target bucket\n2. Click the **Files** tab and click **Authorize**\n3. In the Authorize dialog, choose `Anonymous Accounts (*)` for Accounts and choose `None` for Authorized Operation\n4. Click **OK**",
|
|
30
|
+
"Url": "https://hub.prowler.com/check/oss_bucket_not_publicly_accessible"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"Categories": [
|
|
34
|
+
"internet-exposed"
|
|
35
|
+
],
|
|
36
|
+
"DependsOn": [],
|
|
37
|
+
"RelatedTo": [],
|
|
38
|
+
"Notes": ""
|
|
39
|
+
}
|