prowler-cloud 5.15.0__py3-none-any.whl → 5.16.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 (71) hide show
  1. prowler/CHANGELOG.md +35 -0
  2. prowler/config/config.py +1 -1
  3. prowler/providers/aws/aws_regions_by_service.json +1 -20
  4. prowler/providers/aws/services/apigateway/apigateway_service.py +4 -1
  5. prowler/providers/aws/services/bedrock/bedrock_api_key_no_administrative_privileges/bedrock_api_key_no_administrative_privileges.metadata.json +1 -1
  6. prowler/providers/aws/services/bedrock/bedrock_api_key_no_long_term_credentials/bedrock_api_key_no_long_term_credentials.metadata.json +1 -1
  7. prowler/providers/aws/services/ec2/ec2_instance_account_imdsv2_enabled/ec2_instance_account_imdsv2_enabled.metadata.json +2 -1
  8. prowler/providers/aws/services/ec2/ec2_instance_imdsv2_enabled/ec2_instance_imdsv2_enabled.metadata.json +3 -1
  9. prowler/providers/aws/services/ec2/ec2_instance_uses_single_eni/ec2_instance_uses_single_eni.metadata.json +1 -1
  10. prowler/providers/aws/services/glue/glue_data_catalogs_connection_passwords_encryption_enabled/glue_data_catalogs_connection_passwords_encryption_enabled.metadata.json +17 -11
  11. prowler/providers/aws/services/glue/glue_data_catalogs_metadata_encryption_enabled/glue_data_catalogs_metadata_encryption_enabled.metadata.json +17 -10
  12. prowler/providers/aws/services/glue/glue_data_catalogs_not_publicly_accessible/glue_data_catalogs_not_publicly_accessible.metadata.json +18 -11
  13. prowler/providers/aws/services/glue/glue_database_connections_ssl_enabled/glue_database_connections_ssl_enabled.metadata.json +18 -12
  14. prowler/providers/aws/services/glue/glue_development_endpoints_cloudwatch_logs_encryption_enabled/glue_development_endpoints_cloudwatch_logs_encryption_enabled.metadata.json +17 -11
  15. prowler/providers/aws/services/glue/glue_development_endpoints_job_bookmark_encryption_enabled/glue_development_endpoints_job_bookmark_encryption_enabled.metadata.json +17 -12
  16. prowler/providers/aws/services/glue/glue_development_endpoints_s3_encryption_enabled/glue_development_endpoints_s3_encryption_enabled.metadata.json +17 -11
  17. prowler/providers/aws/services/glue/glue_etl_jobs_amazon_s3_encryption_enabled/glue_etl_jobs_amazon_s3_encryption_enabled.metadata.json +21 -14
  18. prowler/providers/aws/services/glue/glue_etl_jobs_cloudwatch_logs_encryption_enabled/glue_etl_jobs_cloudwatch_logs_encryption_enabled.metadata.json +19 -12
  19. prowler/providers/aws/services/glue/glue_etl_jobs_job_bookmark_encryption_enabled/glue_etl_jobs_job_bookmark_encryption_enabled.metadata.json +17 -12
  20. prowler/providers/aws/services/glue/glue_etl_jobs_logging_enabled/glue_etl_jobs_logging_enabled.metadata.json +18 -12
  21. prowler/providers/aws/services/glue/glue_ml_transform_encrypted_at_rest/glue_ml_transform_encrypted_at_rest.metadata.json +20 -12
  22. prowler/providers/aws/services/iam/iam_inline_policy_allows_privilege_escalation/iam_inline_policy_allows_privilege_escalation.metadata.json +3 -1
  23. prowler/providers/aws/services/iam/iam_policy_allows_privilege_escalation/iam_policy_allows_privilege_escalation.metadata.json +3 -1
  24. prowler/providers/aws/services/iam/iam_policy_cloudshell_admin_not_attached/iam_policy_cloudshell_admin_not_attached.metadata.json +1 -1
  25. prowler/providers/aws/services/iam/iam_role_administratoraccess_policy/iam_role_administratoraccess_policy.metadata.json +1 -1
  26. prowler/providers/aws/services/iam/iam_role_cross_account_readonlyaccess_policy/iam_role_cross_account_readonlyaccess_policy.metadata.json +1 -1
  27. prowler/providers/aws/services/iam/iam_role_cross_service_confused_deputy_prevention/iam_role_cross_service_confused_deputy_prevention.metadata.json +1 -1
  28. prowler/providers/aws/services/inspector2/inspector2_active_findings_exist/inspector2_active_findings_exist.metadata.json +23 -13
  29. prowler/providers/aws/services/inspector2/inspector2_is_enabled/inspector2_is_enabled.metadata.json +18 -12
  30. prowler/providers/aws/services/kafka/kafka_cluster_encryption_at_rest_uses_cmk/kafka_cluster_encryption_at_rest_uses_cmk.metadata.json +24 -13
  31. prowler/providers/aws/services/kafka/kafka_cluster_enhanced_monitoring_enabled/kafka_cluster_enhanced_monitoring_enabled.metadata.json +24 -14
  32. prowler/providers/aws/services/kafka/kafka_cluster_in_transit_encryption_enabled/kafka_cluster_in_transit_encryption_enabled.metadata.json +23 -15
  33. prowler/providers/aws/services/kafka/kafka_cluster_is_public/kafka_cluster_is_public.metadata.json +23 -14
  34. prowler/providers/aws/services/kafka/kafka_cluster_mutual_tls_authentication_enabled/kafka_cluster_mutual_tls_authentication_enabled.metadata.json +26 -15
  35. prowler/providers/aws/services/kafka/kafka_cluster_unrestricted_access_disabled/kafka_cluster_unrestricted_access_disabled.metadata.json +27 -15
  36. prowler/providers/aws/services/kafka/kafka_cluster_uses_latest_version/kafka_cluster_uses_latest_version.metadata.json +23 -14
  37. prowler/providers/aws/services/kafka/kafka_connector_in_transit_encryption_enabled/kafka_connector_in_transit_encryption_enabled.metadata.json +18 -13
  38. prowler/providers/aws/services/kms/kms_cmk_are_used/kms_cmk_are_used.metadata.json +16 -12
  39. prowler/providers/aws/services/kms/kms_cmk_not_deleted_unintentionally/kms_cmk_not_deleted_unintentionally.metadata.json +16 -10
  40. prowler/providers/aws/services/kms/kms_cmk_not_multi_region/kms_cmk_not_multi_region.metadata.json +21 -14
  41. prowler/providers/aws/services/kms/kms_cmk_rotation_enabled/kms_cmk_rotation_enabled.metadata.json +19 -13
  42. prowler/providers/aws/services/kms/kms_key_not_publicly_accessible/kms_key_not_publicly_accessible.metadata.json +22 -14
  43. prowler/providers/aws/services/memorydb/memorydb_cluster_auto_minor_version_upgrades/memorydb_cluster_auto_minor_version_upgrades.metadata.json +23 -14
  44. prowler/providers/aws/services/redshift/redshift_cluster_enhanced_vpc_routing/redshift_cluster_enhanced_vpc_routing.metadata.json +1 -1
  45. prowler/providers/aws/services/s3/s3_bucket_shadow_resource_vulnerability/s3_bucket_shadow_resource_vulnerability.metadata.json +1 -1
  46. prowler/providers/aws/services/servicecatalog/servicecatalog_portfolio_shared_within_organization_only/servicecatalog_portfolio_shared_within_organization_only.metadata.json +17 -13
  47. prowler/providers/aws/services/sns/sns_subscription_not_using_http_endpoints/sns_subscription_not_using_http_endpoints.metadata.json +18 -11
  48. prowler/providers/aws/services/sns/sns_topics_kms_encryption_at_rest_enabled/sns_topics_kms_encryption_at_rest_enabled.metadata.json +23 -12
  49. prowler/providers/aws/services/sns/sns_topics_not_publicly_accessible/sns_topics_not_publicly_accessible.metadata.json +21 -12
  50. prowler/providers/aws/services/trustedadvisor/trustedadvisor_errors_and_warnings/trustedadvisor_errors_and_warnings.metadata.json +15 -9
  51. prowler/providers/aws/services/trustedadvisor/trustedadvisor_premium_support_plan_subscribed/trustedadvisor_premium_support_plan_subscribed.metadata.json +18 -10
  52. prowler/providers/aws/services/vpc/vpc_endpoint_connections_trust_boundaries/vpc_endpoint_connections_trust_boundaries.metadata.json +1 -1
  53. prowler/providers/aws/services/vpc/vpc_endpoint_services_allowed_principals_trust_boundaries/vpc_endpoint_services_allowed_principals_trust_boundaries.metadata.json +1 -1
  54. prowler/providers/aws/services/waf/waf_global_rule_with_conditions/waf_global_rule_with_conditions.metadata.json +21 -12
  55. prowler/providers/aws/services/waf/waf_global_rulegroup_not_empty/waf_global_rulegroup_not_empty.metadata.json +18 -12
  56. prowler/providers/aws/services/waf/waf_global_webacl_logging_enabled/waf_global_webacl_logging_enabled.metadata.json +19 -11
  57. prowler/providers/aws/services/waf/waf_global_webacl_with_rules/waf_global_webacl_with_rules.metadata.json +18 -11
  58. prowler/providers/aws/services/waf/waf_regional_rule_with_conditions/waf_regional_rule_with_conditions.metadata.json +17 -11
  59. prowler/providers/aws/services/waf/waf_regional_rulegroup_not_empty/waf_regional_rulegroup_not_empty.metadata.json +17 -11
  60. prowler/providers/aws/services/waf/waf_regional_webacl_with_rules/waf_regional_webacl_with_rules.metadata.json +18 -11
  61. prowler/providers/aws/services/wafv2/wafv2_webacl_logging_enabled/wafv2_webacl_logging_enabled.metadata.json +19 -12
  62. prowler/providers/aws/services/wafv2/wafv2_webacl_rule_logging_enabled/wafv2_webacl_rule_logging_enabled.metadata.json +19 -12
  63. prowler/providers/aws/services/wafv2/wafv2_webacl_with_rules/wafv2_webacl_with_rules.metadata.json +22 -13
  64. prowler/providers/gcp/services/cloudstorage/cloudstorage_service.py +1 -1
  65. prowler/providers/iac/lib/arguments/arguments.py +2 -2
  66. prowler/providers/mongodbatlas/services/clusters/clusters_service.py +23 -3
  67. {prowler_cloud-5.15.0.dist-info → prowler_cloud-5.16.0.dist-info}/METADATA +4 -2
  68. {prowler_cloud-5.15.0.dist-info → prowler_cloud-5.16.0.dist-info}/RECORD +71 -71
  69. {prowler_cloud-5.15.0.dist-info → prowler_cloud-5.16.0.dist-info}/LICENSE +0 -0
  70. {prowler_cloud-5.15.0.dist-info → prowler_cloud-5.16.0.dist-info}/WHEEL +0 -0
  71. {prowler_cloud-5.15.0.dist-info → prowler_cloud-5.16.0.dist-info}/entry_points.txt +0 -0
@@ -1,28 +1,35 @@
1
1
  {
2
2
  "Provider": "aws",
3
3
  "CheckID": "glue_etl_jobs_cloudwatch_logs_encryption_enabled",
4
- "CheckTitle": "Check if Glue ETL Jobs have CloudWatch Logs encryption enabled.",
4
+ "CheckTitle": "Glue ETL job has CloudWatch Logs encryption enabled",
5
5
  "CheckType": [
6
- "Software and Configuration Checks/Industry and Regulatory Standards/CIS AWS Foundations Benchmark"
6
+ "Software and Configuration Checks/AWS Security Best Practices",
7
+ "Software and Configuration Checks/Industry and Regulatory Standards/AWS Foundational Security Best Practices",
8
+ "Software and Configuration Checks/Industry and Regulatory Standards/CIS AWS Foundations Benchmark",
9
+ "Software and Configuration Checks/Industry and Regulatory Standards/NIST 800-53 Controls (USA)"
7
10
  ],
8
11
  "ServiceName": "glue",
9
12
  "SubServiceName": "",
10
- "ResourceIdTemplate": "arn:partition:glue:region:account-id:certificate/resource-id",
13
+ "ResourceIdTemplate": "",
11
14
  "Severity": "medium",
12
15
  "ResourceType": "AwsGlueJob",
13
- "Description": "Check if Glue ETL Jobs have CloudWatch Logs encryption enabled.",
14
- "Risk": "If not enabled sensitive information at rest is not protected.",
15
- "RelatedUrl": "https://docs.aws.amazon.com/glue/latest/dg/console-security-configurations.html",
16
+ "Description": "**AWS Glue ETL jobs** are evaluated for a **security configuration** with **CloudWatch Logs encryption** (`SSE-KMS`) enabled. Jobs without a security configuration, or with CloudWatch Logs encryption set to `DISABLED`, are highlighted.",
17
+ "Risk": "Unencrypted Glue logs weaken **confidentiality**.\n\nLog entries can expose credentials, PII, connection strings, and schema details. Anyone with log storage access can harvest secrets for **lateral movement** and data exfiltration, widening the blast radius of compromises.",
18
+ "RelatedUrl": "",
19
+ "AdditionalURLs": [
20
+ "https://docs.aws.amazon.com/glue/latest/dg/console-security-configurations.html",
21
+ "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/Glue/cloud-watch-logs-encryption-enabled.html"
22
+ ],
16
23
  "Remediation": {
17
24
  "Code": {
18
- "CLI": "aws glue create-security-configuration --name cw-encrypted-sec-config --encryption-configuration {'CloudWatchEncryption': [{'CloudWatchEncryptionMode': 'SSE-KMS','KmsKeyArn': <kms_arn>}]}",
19
- "NativeIaC": "https://docs.prowler.com/checks/aws/general-policies/bc_aws_general_41#cloudformation",
20
- "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/Glue/cloud-watch-logs-encryption-enabled.html",
21
- "Terraform": "https://docs.prowler.com/checks/aws/general-policies/bc_aws_general_41#terraform"
25
+ "CLI": "",
26
+ "NativeIaC": "```yaml\n# CloudFormation: enable CloudWatch Logs encryption and attach to the job\nResources:\n ExampleSecurityConfiguration:\n Type: AWS::Glue::SecurityConfiguration\n Properties:\n Name: <example_resource_name>\n EncryptionConfiguration:\n CloudWatchEncryption: # Critical: enable CloudWatch Logs encryption for Glue\n CloudWatchEncryptionMode: SSE-KMS # Critical: must not be DISABLED\n KmsKeyArn: <example_kms_key_arn> # Critical: KMS key used for encryption\n\n ExampleJob:\n Type: AWS::Glue::Job\n Properties:\n Role: <example_role_arn>\n Command:\n Name: glueetl\n ScriptLocation: s3://<example_script_path>\n SecurityConfiguration: !Ref ExampleSecurityConfiguration # Critical: attach security configuration to the job\n```",
27
+ "Other": "1. In the AWS Glue console, go to Security configurations > Add security configuration\n2. Enter a name, enable CloudWatch Logs encryption, select SSE-KMS, and choose/provide the KMS key ARN; Save\n3. Go to Jobs, select the target job, click Edit\n4. Set Security configuration to the one created in step 2\n5. Save changes",
28
+ "Terraform": "```hcl\n# Enable CloudWatch Logs encryption and attach to the Glue job\nresource \"aws_glue_security_configuration\" \"example_resource_name\" {\n name = \"<example_resource_name>\"\n\n encryption_configuration {\n cloudwatch_encryption {\n cloudwatch_encryption_mode = \"SSE-KMS\" # Critical: enable CW Logs encryption\n kms_key_arn = \"<example_kms_key_arn>\" # Critical: KMS key for encryption\n }\n }\n}\n\nresource \"aws_glue_job\" \"example_resource_name\" {\n name = \"<example_resource_name>\"\n role_arn = \"<example_role_arn>\"\n\n command {\n name = \"glueetl\"\n script_location = \"s3://<example_script_path>\"\n }\n\n security_configuration = aws_glue_security_configuration.example_resource_name.name # Critical: attach security config to job\n}\n```"
22
29
  },
23
30
  "Recommendation": {
24
- "Text": "Enable Encryption in the Security configurations.",
25
- "Url": "https://docs.aws.amazon.com/glue/latest/dg/console-security-configurations.html"
31
+ "Text": "Enable **at-rest encryption** for Glue logs via a **security configuration** using customer-managed KMS keys. Apply **least privilege** to KMS and CloudWatch Logs, rotate keys, and require all jobs to attach an approved configuration. Embed this baseline in IaC for consistent, **defense-in-depth** coverage.",
32
+ "Url": "https://hub.prowler.com/check/glue_etl_jobs_cloudwatch_logs_encryption_enabled"
26
33
  }
27
34
  },
28
35
  "Categories": [
@@ -1,28 +1,33 @@
1
1
  {
2
2
  "Provider": "aws",
3
3
  "CheckID": "glue_etl_jobs_job_bookmark_encryption_enabled",
4
- "CheckTitle": "Check if Glue ETL Jobs have Job bookmark encryption enabled.",
4
+ "CheckTitle": "Glue ETL job has Job bookmark encryption enabled",
5
5
  "CheckType": [
6
+ "Software and Configuration Checks/Industry and Regulatory Standards/AWS Foundational Security Best Practices",
6
7
  "Software and Configuration Checks/Industry and Regulatory Standards/CIS AWS Foundations Benchmark"
7
8
  ],
8
9
  "ServiceName": "glue",
9
10
  "SubServiceName": "",
10
- "ResourceIdTemplate": "arn:partition:glue:region:account-id:certificate/resource-id",
11
+ "ResourceIdTemplate": "",
11
12
  "Severity": "medium",
12
- "ResourceType": "AwsGlueJob",
13
- "Description": "Check if Glue ETL Jobs have Job bookmark encryption enabled.",
14
- "Risk": "If not enabled sensitive information at rest is not protected.",
15
- "RelatedUrl": "https://docs.aws.amazon.com/glue/latest/dg/console-security-configurations.html",
13
+ "ResourceType": "Other",
14
+ "Description": "**AWS Glue ETL jobs** should link a **security configuration** with **job bookmark encryption** enabled. Bookmark encryption must not be `DISABLED` (e.g., use `CSE-KMS`). Jobs lacking a security configuration are treated as not protecting bookmark metadata.",
15
+ "Risk": "Unencrypted **job bookmarks** in S3 expose execution state and data pointers, reducing **confidentiality**. Altered bookmarks can trigger reruns, skips, or reprocessing, harming **integrity**. Missing security configs may also leave logs and temporary objects unencrypted.",
16
+ "RelatedUrl": "",
17
+ "AdditionalURLs": [
18
+ "https://docs.aws.amazon.com/glue/latest/dg/console-security-configurations.html",
19
+ "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/Glue/job-bookmark-encryption-enabled.html"
20
+ ],
16
21
  "Remediation": {
17
22
  "Code": {
18
- "CLI": "aws glue create-security-configuration --name jb-encrypted-sec-config --encryption-configuration {'JobBookmarksEncryption': [{'JobBookmarksEncryptionMode': 'SSE-KMS','KmsKeyArn': <kms_arn>}]}",
19
- "NativeIaC": "https://docs.prowler.com/checks/aws/general-policies/bc_aws_general_41#cloudformation",
20
- "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/Glue/job-bookmark-encryption-enabled.html",
21
- "Terraform": "https://docs.prowler.com/checks/aws/general-policies/bc_aws_general_41#terraform"
23
+ "CLI": "",
24
+ "NativeIaC": "```yaml\n# CloudFormation: Enable Glue Job bookmark encryption via Security Configuration\nResources:\n <example_resource_name>:\n Type: AWS::Glue::SecurityConfiguration\n Properties:\n Name: <example_resource_name>\n EncryptionConfiguration:\n JobBookmarksEncryption:\n JobBookmarksEncryptionMode: CSE-KMS # CRITICAL: Enables job bookmark encryption\n KmsKeyArn: <example_kms_key_arn> # CRITICAL: KMS key used to encrypt job bookmarks\n```",
25
+ "Other": "1. In the AWS Console, go to AWS Glue > Security configurations > Add security configuration\n2. Enter a name and under Advanced settings enable Job bookmark encryption\n3. Select a KMS key (or paste the key ARN) and click Create\n4. Go to AWS Glue > Jobs, select the job, click Edit\n5. Under Advanced properties, set Security configuration to the one created above\n6. Click Save",
26
+ "Terraform": "```hcl\n# Terraform: Enable Glue Job bookmark encryption via Security Configuration\nresource \"aws_glue_security_configuration\" \"<example_resource_name>\" {\n name = \"<example_resource_name>\"\n\n encryption_configuration {\n job_bookmarks_encryption {\n job_bookmarks_encryption_mode = \"CSE-KMS\" # CRITICAL: Enables job bookmark encryption\n kms_key_arn = \"<example_kms_key_arn>\" # CRITICAL: KMS key for bookmarks\n }\n }\n}\n```"
22
27
  },
23
28
  "Recommendation": {
24
- "Text": "Enable Encryption in the Security configurations.",
25
- "Url": "https://docs.aws.amazon.com/glue/latest/dg/console-security-configurations.html"
29
+ "Text": "Attach a **Glue security configuration** to every job and enable **job bookmark encryption** (e.g., `CSE-KMS`). Use **customer-managed KMS keys**, enforce **least privilege** on key usage, and rotate keys. For **defense in depth**, also encrypt **S3 temp data** and **CloudWatch logs** in the same configuration.",
30
+ "Url": "https://hub.prowler.com/check/glue_etl_jobs_job_bookmark_encryption_enabled"
26
31
  }
27
32
  },
28
33
  "Categories": [
@@ -1,28 +1,34 @@
1
1
  {
2
2
  "Provider": "aws",
3
3
  "CheckID": "glue_etl_jobs_logging_enabled",
4
- "CheckTitle": "[DEPRECATED] Check if Glue ETL Jobs have logging enabled.",
4
+ "CheckTitle": "Glue ETL job has continuous CloudWatch logging enabled",
5
5
  "CheckType": [
6
+ "Software and Configuration Checks/AWS Security Best Practices/Runtime Behavior Analysis",
6
7
  "Software and Configuration Checks/Industry and Regulatory Standards/AWS Foundational Security Best Practices"
7
8
  ],
8
9
  "ServiceName": "glue",
9
10
  "SubServiceName": "",
10
- "ResourceIdTemplate": "arn:partition:glue:region:account-id:job/job-name",
11
+ "ResourceIdTemplate": "",
11
12
  "Severity": "medium",
12
- "ResourceType": "AwsGlueJob",
13
- "Description": "[DEPRECATED] Ensure that Glue ETL Jobs have CloudWatch logs enabled.",
14
- "Risk": "Without logging enabled, AWS Glue jobs lack visibility into job activities and failures, making it difficult to detect unauthorized access, troubleshoot issues, and ensure compliance. This may result in untracked security incidents or operational issues that affect data processing.",
15
- "RelatedUrl": "https://docs.aws.amazon.com/glue/latest/dg/monitor-continuous-logging.html",
13
+ "ResourceType": "Other",
14
+ "Description": "**AWS Glue jobs** are assessed for **continuous CloudWatch logging**, confirming that runtime events and outputs are sent to **CloudWatch Logs** via the `--enable-continuous-cloudwatch-log` configuration.",
15
+ "Risk": "Missing job logs hide execution details and access patterns, enabling undetected credential abuse, data exfiltration in scripts, or tampering with transforms. This reduces confidentiality and integrity, hinders incident response, and can mask failures that impact availability.",
16
+ "RelatedUrl": "",
17
+ "AdditionalURLs": [
18
+ "https://docs.aws.amazon.com/glue/latest/dg/monitor-continuous-logging.html",
19
+ "https://docs.aws.amazon.com/glue/latest/dg/monitor-continuous-logging-enable.html",
20
+ "https://docs.aws.amazon.com/securityhub/latest/userguide/glue-controls.html#glue-2"
21
+ ],
16
22
  "Remediation": {
17
23
  "Code": {
18
- "CLI": "aws glue update-job --job-name <job-name> --job-update \"Command={DefaultArguments={--enable-continuous-cloudwatch-log=true}}\"",
19
- "NativeIaC": "",
20
- "Other": "https://docs.aws.amazon.com/securityhub/latest/userguide/glue-controls.html#glue-2",
21
- "Terraform": ""
24
+ "CLI": "aws glue update-job --job-name <example_resource_name> --job-update '{\"DefaultArguments\":{\"--enable-continuous-cloudwatch-log\":\"true\"}}'",
25
+ "NativeIaC": "```yaml\nResources:\n GlueJob:\n Type: AWS::Glue::Job\n Properties:\n Role: \"<example_resource_id>\"\n Command:\n Name: glueetl\n ScriptLocation: \"s3://<example_resource_name>/script.py\"\n DefaultArguments:\n \"--enable-continuous-cloudwatch-log\": \"true\" # Critical: enables continuous CloudWatch logging to pass the check\n```",
26
+ "Other": "1. Open the AWS Glue console and go to Jobs\n2. Select the job and click Edit\n3. Expand Advanced properties\n4. Under Continuous logging, check Enable logs in CloudWatch\n5. Save",
27
+ "Terraform": "```hcl\nresource \"aws_glue_job\" \"<example_resource_name>\" {\n name = \"<example_resource_name>\"\n role_arn = \"<example_resource_id>\"\n\n command {\n script_location = \"s3://<example_resource_name>/script.py\"\n }\n\n default_arguments = {\n \"--enable-continuous-cloudwatch-log\" = \"true\" # Critical: enables continuous CloudWatch logging to pass the check\n }\n}\n```"
22
28
  },
23
29
  "Recommendation": {
24
- "Text": "Enable logging for AWS Glue jobs to capture and monitor job events. Logging allows for better visibility into job performance, error detection, and security oversight.",
25
- "Url": "https://docs.aws.amazon.com/glue/latest/dg/monitor-continuous-logging-enable.html"
30
+ "Text": "Enable **continuous logging** to **CloudWatch Logs** for all Glue jobs. Centralize logs with retention and KMS encryption, restrict read access, and alert on anomalies and failures. Apply **least privilege** to job roles and use **defense in depth** by correlating logs across services.",
31
+ "Url": "https://hub.prowler.com/check/glue_etl_jobs_logging_enabled"
26
32
  }
27
33
  },
28
34
  "Categories": [
@@ -1,26 +1,34 @@
1
1
  {
2
2
  "Provider": "aws",
3
3
  "CheckID": "glue_ml_transform_encrypted_at_rest",
4
- "CheckTitle": "Check if Glue ML Transform Encryption at Rest is Enabled",
5
- "CheckType": [],
4
+ "CheckTitle": "Glue ML Transform is encrypted at rest",
5
+ "CheckType": [
6
+ "Software and Configuration Checks/AWS Security Best Practices",
7
+ "Software and Configuration Checks/Industry and Regulatory Standards/AWS Foundational Security Best Practices",
8
+ "Software and Configuration Checks/Industry and Regulatory Standards/NIST 800-53 Controls (USA)"
9
+ ],
6
10
  "ServiceName": "glue",
7
11
  "SubServiceName": "",
8
- "ResourceIdTemplate": "arn:aws:glue:region:account-id:mlTransform/transform-id",
12
+ "ResourceIdTemplate": "",
9
13
  "Severity": "medium",
10
14
  "ResourceType": "Other",
11
- "Description": "This control checks whether an AWS Glue machine learning transform is encrypted at rest. The control fails if the machine learning transform isn't encrypted at rest.",
12
- "Risk": "Data at rest refers to data that's stored in persistent, non-volatile storage for any duration. Encrypting data at rest helps you protect its confidentiality, which reduces the risk that an unauthorized user can access it.",
13
- "RelatedUrl": "https://docs.aws.amazon.com/glue/latest/dg/encryption-at-rest.html",
15
+ "Description": "**AWS Glue ML transforms** are evaluated for **encryption at rest** of transform user data using **KMS keys**. The finding highlights transforms where encryption is not configured.",
16
+ "Risk": "Without encryption, **confidentiality** is weakened: transform artifacts, mappings, and sample datasets may be readable via storage access, backups, or cross-account exposure. This can lead to data disclosure and aid **lateral movement** by revealing schemas and data relationships.",
17
+ "RelatedUrl": "",
18
+ "AdditionalURLs": [
19
+ "https://docs.aws.amazon.com/glue/latest/dg/encryption-at-rest.html",
20
+ "https://docs.aws.amazon.com/securityhub/latest/userguide/glue-controls.html#glue-3"
21
+ ],
14
22
  "Remediation": {
15
23
  "Code": {
16
- "CLI": "aws glue update-ml-transform --transform-id <transform-id> --encryption-at-rest {\"Enabled\":true,\"KmsKey\":\"<kms-key-arn>\"}",
17
- "NativeIaC": "",
18
- "Other": "https://docs.aws.amazon.com/securityhub/latest/userguide/glue-controls.html#glue-3",
19
- "Terraform": ""
24
+ "CLI": "aws glue update-ml-transform --transform-id <transform-id> --transform-encryption '{\"MlUserDataEncryption\":{\"MlUserDataEncryptionMode\":\"SSE-KMS\",\"KmsKeyId\":\"<kms-key-arn>\"}}'",
25
+ "NativeIaC": "```yaml\nResources:\n <example_resource_name>:\n Type: AWS::Glue::MLTransform\n Properties:\n Role: <example_resource_id>\n InputRecordTables:\n - DatabaseName: <example_resource_name>\n TableName: <example_resource_name>\n TransformParameters:\n TransformType: FIND_MATCHES\n FindMatchesParameters:\n PrimaryKeyColumnName: <example_resource_name>\n TransformEncryption:\n MlUserDataEncryption:\n MlUserDataEncryptionMode: SSE-KMS # Critical: enables ML user data encryption at rest\n KmsKeyId: <kms-key-arn> # Critical: KMS key used for encryption\n```",
26
+ "Other": "1. In the AWS Management Console, open AWS Glue\n2. Go to Machine learning > Transforms and select the target transform\n3. Click Edit\n4. Under Encryption, enable ML user data encryption\n5. Choose an AWS KMS key\n6. Save changes",
27
+ "Terraform": "```hcl\nresource \"aws_glue_ml_transform\" \"<example_resource_name>\" {\n name = \"<example_resource_name>\"\n role_arn = \"<example_resource_id>\"\n\n input_record_tables {\n database_name = \"<example_resource_name>\"\n table_name = \"<example_resource_name>\"\n }\n\n parameters {\n transform_type = \"FIND_MATCHES\"\n find_matches_parameters {\n primary_key_column_name = \"<example_resource_name>\"\n }\n }\n\n transform_encryption {\n ml_user_data_encryption {\n ml_user_data_encryption_mode = \"SSE-KMS\" # Critical: enables encryption at rest\n kms_key_id = \"<kms-key-arn>\" # Critical: KMS key used for encryption\n }\n }\n}\n```"
20
28
  },
21
29
  "Recommendation": {
22
- "Text": "Enable encryption at rest for Glue ML Transforms using AWS KMS keys.",
23
- "Url": "https://docs.aws.amazon.com/glue/latest/dg/encryption-at-rest.html"
30
+ "Text": "Enable **KMS-backed encryption at rest** for all ML transforms and prefer **customer-managed keys**.\n- Apply **least privilege** key policies and rotate keys\n- Enforce **defense in depth** with network and IAM controls\n- Monitor key usage and transform access with audit logs",
31
+ "Url": "https://hub.prowler.com/check/glue_ml_transform_encrypted_at_rest"
24
32
  }
25
33
  },
26
34
  "Categories": [
@@ -26,7 +26,9 @@
26
26
  "Url": "https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege"
27
27
  }
28
28
  },
29
- "Categories": [],
29
+ "Categories": [
30
+ "privilege-escalation"
31
+ ],
30
32
  "DependsOn": [],
31
33
  "RelatedTo": [],
32
34
  "Notes": ""
@@ -27,7 +27,9 @@
27
27
  "Url": "https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege"
28
28
  }
29
29
  },
30
- "Categories": [],
30
+ "Categories": [
31
+ "privilege-escalation"
32
+ ],
31
33
  "DependsOn": [],
32
34
  "RelatedTo": [],
33
35
  "Notes": "CAF Security Epic: IAM"
@@ -26,7 +26,7 @@
26
26
  }
27
27
  },
28
28
  "Categories": [
29
- "trustboundaries"
29
+ "trust-boundaries"
30
30
  ],
31
31
  "DependsOn": [],
32
32
  "RelatedTo": [],
@@ -24,7 +24,7 @@
24
24
  }
25
25
  },
26
26
  "Categories": [
27
- "trustboundaries"
27
+ "trust-boundaries"
28
28
  ],
29
29
  "DependsOn": [],
30
30
  "RelatedTo": [],
@@ -24,7 +24,7 @@
24
24
  }
25
25
  },
26
26
  "Categories": [
27
- "trustboundaries"
27
+ "trust-boundaries"
28
28
  ],
29
29
  "DependsOn": [],
30
30
  "RelatedTo": [],
@@ -24,7 +24,7 @@
24
24
  }
25
25
  },
26
26
  "Categories": [
27
- "trustboundaries"
27
+ "trust-boundaries"
28
28
  ],
29
29
  "DependsOn": [],
30
30
  "RelatedTo": [],
@@ -1,29 +1,39 @@
1
1
  {
2
2
  "Provider": "aws",
3
3
  "CheckID": "inspector2_active_findings_exist",
4
- "CheckTitle": "Check if Inspector2 active findings exist",
4
+ "CheckTitle": "Inspector2 is enabled with no active findings",
5
5
  "CheckAliases": [
6
6
  "inspector2_findings_exist"
7
7
  ],
8
- "CheckType": [],
8
+ "CheckType": [
9
+ "Software and Configuration Checks/Vulnerabilities/CVE",
10
+ "Software and Configuration Checks/Patch Management",
11
+ "Software and Configuration Checks/AWS Security Best Practices",
12
+ "Industry and Regulatory Standards/AWS Foundational Security Best Practices"
13
+ ],
9
14
  "ServiceName": "inspector2",
10
15
  "SubServiceName": "",
11
- "ResourceIdTemplate": "arn:aws:inspector2:region:account-id/detector-id",
12
- "Severity": "medium",
16
+ "ResourceIdTemplate": "",
17
+ "Severity": "high",
13
18
  "ResourceType": "Other",
14
- "Description": "This check determines if there are any active findings in your AWS account that have been detected by AWS Inspector2. Inspector2 is an automated security assessment service that helps improve the security and compliance of applications deployed on AWS.",
15
- "Risk": "Without using AWS Inspector, you may not be aware of all the security vulnerabilities in your AWS resources, which could lead to unauthorized access, data breaches, or other security incidents.",
16
- "RelatedUrl": "https://docs.aws.amazon.com/inspector/latest/user/findings-understanding.html",
19
+ "Description": "**Amazon Inspector2** active findings are assessed across eligible resources when the service is `ENABLED`.\n\nIndicates whether any findings remain in the **Active** state versus none.",
20
+ "Risk": "**Unremediated Inspector2 findings** mean known vulnerabilities or exposures persist on workloads.\n\nThis enables:\n- Unauthorized access and data exfiltration (C)\n- Code tampering and privilege escalation (I)\n- Service disruption via exploitation or malware (A)",
21
+ "RelatedUrl": "",
22
+ "AdditionalURLs": [
23
+ "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/Inspector/amazon-inspector-findings.html",
24
+ "https://docs.aws.amazon.com/inspector/latest/user/findings-understanding.html",
25
+ "https://docs.aws.amazon.com/inspector/latest/user/what-is-inspector.html"
26
+ ],
17
27
  "Remediation": {
18
28
  "Code": {
19
- "CLI": "",
20
- "NativeIaC": "",
21
- "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/Inspector/amazon-inspector-findings.html",
22
- "Terraform": ""
29
+ "CLI": "aws inspector2 create-filter --name <example_resource_name> --action SUPPRESS --filter-criteria '{\"findingStatus\":[{\"comparison\":\"EQUALS\",\"value\":\"ACTIVE\"}]}'",
30
+ "NativeIaC": "```yaml\n# CloudFormation: Suppress all ACTIVE Inspector findings\nResources:\n <example_resource_name>:\n Type: AWS::InspectorV2::Filter\n Properties:\n Name: <example_resource_name>\n Action: SUPPRESS # critical: converts matching findings to Suppressed, not Active\n FilterCriteria:\n FindingStatus:\n - Comparison: EQUALS\n Value: ACTIVE # critical: targets all active findings\n```",
31
+ "Other": "1. In the AWS Console, go to Amazon Inspector\n2. Open Suppression rules (or Filters) and click Create suppression rule\n3. Set condition: Finding status = Active\n4. Set action to Suppress and click Create\n5. Verify the Active findings count is 0 on the dashboard",
32
+ "Terraform": "```hcl\n# Terraform: Suppress all ACTIVE Inspector findings\nresource \"aws_inspector2_filter\" \"<example_resource_name>\" {\n name = \"<example_resource_name>\"\n action = \"SUPPRESS\" # critical: converts matching findings to Suppressed, not Active\n\n filter_criteria {\n finding_status {\n comparison = \"EQUALS\"\n value = \"ACTIVE\" # critical: targets all active findings\n }\n }\n}\n```"
23
33
  },
24
34
  "Recommendation": {
25
- "Text": "Review the active findings from Inspector2",
26
- "Url": "https://docs.aws.amazon.com/inspector/latest/user/what-is-inspector.html"
35
+ "Text": "Prioritize and remediate **Active findings** quickly: patch hosts and runtimes, update/rebuild images, fix vulnerable code, and close unintended exposure.\n\nApply **least privilege**, use **defense in depth**, and avoid broad suppressions. Integrate findings into CI/CD and vulnerability management for continuous prevention.",
36
+ "Url": "https://hub.prowler.com/check/inspector2_active_findings_exist"
27
37
  }
28
38
  },
29
39
  "Categories": [],
@@ -1,31 +1,37 @@
1
1
  {
2
2
  "Provider": "aws",
3
3
  "CheckID": "inspector2_is_enabled",
4
- "CheckTitle": "Check if Inspector2 is enabled for Amazon EC2 instances, ECR container images and Lambda functions.",
4
+ "CheckTitle": "Inspector2 is enabled for Amazon EC2 instances, ECR container images, Lambda functions, and Lambda code",
5
5
  "CheckAliases": [
6
6
  "inspector2_findings_exist"
7
7
  ],
8
8
  "CheckType": [
9
- "Software and Configuration Checks/AWS Security Best Practices"
9
+ "Software and Configuration Checks/AWS Security Best Practices",
10
+ "Software and Configuration Checks/Industry and Regulatory Standards/AWS Foundational Security Best Practices"
10
11
  ],
11
12
  "ServiceName": "inspector2",
12
13
  "SubServiceName": "",
13
- "ResourceIdTemplate": "arn:aws:inspector2:region:account-id/detector-id",
14
+ "ResourceIdTemplate": "",
14
15
  "Severity": "medium",
15
- "ResourceType": "AwsAccount",
16
- "Description": "Ensure that the new version of Amazon Inspector is enabled in order to help you improve the security and compliance of your AWS cloud environment. Amazon Inspector 2 is a vulnerability management solution that continually scans scans your Amazon EC2 instances, ECR container images, and Lambda functions to identify software vulnerabilities and instances of unintended network exposure.",
17
- "Risk": "Without using AWS Inspector, you may not be aware of all the security vulnerabilities in your AWS resources, which could lead to unauthorized access, data breaches, or other security incidents.",
18
- "RelatedUrl": "https://docs.aws.amazon.com/inspector/latest/user/findings-understanding.html",
16
+ "ResourceType": "Other",
17
+ "Description": "**Amazon Inspector 2** activation and coverage across regions, verifying that scanning is active for **EC2**, **ECR**, **Lambda functions**, and **Lambda code** where applicable.\n\nIt flags missing account activation or gaps in any scan type.",
18
+ "Risk": "Absent or partial coverage leaves **unpatched vulnerabilities**, risky **code dependencies**, and **unintended network exposure** undetected.\n\nAttackers can exploit known CVEs for **remote code execution**, **lateral movement**, and **data exfiltration**, degrading **confidentiality**, **integrity**, and **availability**.",
19
+ "RelatedUrl": "",
20
+ "AdditionalURLs": [
21
+ "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/Inspector2/enable-amazon-inspector2.html",
22
+ "https://docs.aws.amazon.com/inspector/latest/user/findings-understanding.html",
23
+ "https://docs.aws.amazon.com/inspector/latest/user/getting_started_tutorial.html"
24
+ ],
19
25
  "Remediation": {
20
26
  "Code": {
21
- "CLI": "aws inspector2 enable --resource-types 'EC2' 'ECR' 'LAMBDA' 'LAMBDA_CODE'",
27
+ "CLI": "aws inspector2 enable --resource-types EC2 ECR LAMBDA LAMBDA_CODE",
22
28
  "NativeIaC": "",
23
- "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/Inspector2/enable-amazon-inspector2.html",
24
- "Terraform": ""
29
+ "Other": "1. Sign in to the AWS Console and open Amazon Inspector (v2)\n2. If not yet activated: click Get started > Activate Amazon Inspector\n3. If already activated: go to Settings > Scans and ensure EC2, ECR, Lambda functions, and Lambda code are all enabled, then Save",
30
+ "Terraform": "```hcl\nresource \"aws_inspector2_enabler\" \"<example_resource_name>\" {\n resource_types = [\"EC2\", \"ECR\", \"LAMBDA\", \"LAMBDA_CODE\"] # Enables Inspector2 scans for all required resource types\n}\n```"
25
31
  },
26
32
  "Recommendation": {
27
- "Text": "Enable Amazon Inspector 2 for your AWS account.",
28
- "Url": "https://docs.aws.amazon.com/inspector/latest/user/getting_started_tutorial.html"
33
+ "Text": "Enable **Amazon Inspector 2** across all regions and activate scans for **EC2**, **ECR**, **Lambda**, and **Lambda code**.\n\nApply **defense in depth**: auto-enable coverage for new workloads, integrate findings with patching and CI/CD gates, enforce remediation SLAs, and grant only **least privilege** to process and act on findings.",
34
+ "Url": "https://hub.prowler.com/check/inspector2_is_enabled"
29
35
  }
30
36
  },
31
37
  "Categories": [],
@@ -1,31 +1,42 @@
1
1
  {
2
2
  "Provider": "aws",
3
3
  "CheckID": "kafka_cluster_encryption_at_rest_uses_cmk",
4
- "CheckTitle": "Ensure Kafka Cluster Encryption at Rest Uses Customer Managed Keys (CMK)",
4
+ "CheckTitle": "Kafka cluster has encryption at rest enabled with a customer managed key (CMK) or is serverless",
5
5
  "CheckType": [
6
- "Infrastructure Security"
6
+ "Software and Configuration Checks/AWS Security Best Practices/Data Encryption",
7
+ "Industry and Regulatory Standards/AWS Foundational Security Best Practices",
8
+ "Industry and Regulatory Standards/NIST 800-53 Controls (USA)",
9
+ "Industry and Regulatory Standards/PCI-DSS",
10
+ "Effects/Data Exposure"
7
11
  ],
8
12
  "ServiceName": "kafka",
9
- "SubServiceName": "Kafka Cluster",
10
- "ResourceIdTemplate": "arn:partition:kafka:region:account-id:cluster",
13
+ "SubServiceName": "",
14
+ "ResourceIdTemplate": "",
11
15
  "Severity": "medium",
12
16
  "ResourceType": "AwsMskCluster",
13
- "Description": "Kafka Cluster data stored at rest should be encrypted using Customer Managed Keys (CMK) for enhanced security and control over the encryption process.",
14
- "Risk": "Using default AWS-managed encryption keys might not meet certain compliance or regulatory requirements. With CMKs, you have more control over the encryption process and can rotate keys, define access policies, and enable key auditing.",
15
- "RelatedUrl": "https://docs.aws.amazon.com/msk/latest/developerguide/msk-encryption.html",
17
+ "Description": "Amazon MSK clusters are inspected for **encryption at rest** using a **customer-managed KMS key** for data volumes. Serverless clusters are inherently encrypted. Provisioned clusters are recognized only when the configured `DataVolumeKMSKeyId` corresponds to a customer-managed key.",
18
+ "Risk": "Relying on service-managed keys weakens **confidentiality** and **accountability**: you can't enforce granular key policies, separation of duties, or independent rotation. This limits incident response (e.g., disabling the key for crypto-shredding) and reduces auditability, increasing impact of credential misuse or broker compromise.",
19
+ "RelatedUrl": "",
20
+ "AdditionalURLs": [
21
+ "https://docs.aws.amazon.com/msk/latest/developerguide/msk-encryption.html",
22
+ "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/MSK/msk-encryption-at-rest-with-cmk.html",
23
+ "https://docs.aws.amazon.com/msk/latest/developerguide/msk-working-with-encryption.html"
24
+ ],
16
25
  "Remediation": {
17
26
  "Code": {
18
27
  "CLI": "",
19
- "NativeIaC": "",
20
- "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/MSK/msk-encryption-at-rest-with-cmk.html",
21
- "Terraform": "https://docs.prowler.com/checks/aws/general-policies/bc_aws_general_32/#terraform"
28
+ "NativeIaC": "```yaml\n# CloudFormation: MSK cluster using a customer managed KMS key for encryption at rest\nResources:\n <example_resource_name>:\n Type: AWS::MSK::Cluster\n Properties:\n ClusterName: <example_resource_name>\n KafkaVersion: <KAFKA_VERSION>\n NumberOfBrokerNodes: 2\n BrokerNodeGroupInfo:\n InstanceType: kafka.m5.large\n ClientSubnets:\n - <example_subnet_id_a>\n - <example_subnet_id_b>\n SecurityGroups:\n - <example_security_group_id>\n EncryptionInfo:\n EncryptionAtRest:\n DataVolumeKMSKeyId: <example_kms_key_arn> # Critical: use a customer managed KMS key ARN to enable CMK encryption at rest\n```",
29
+ "Other": "1. In the AWS Console, go to Amazon MSK > Clusters\n2. Click Create cluster\n3. Choose Provisioned (or choose Serverless to pass by default)\n4. In Encryption settings, for At-rest encryption, select Customer managed key and choose your CMK (not alias/aws/kafka)\n5. Create the cluster, migrate clients to it, then delete the old cluster that used the AWS managed key",
30
+ "Terraform": "```hcl\n# MSK cluster using a customer managed KMS key for encryption at rest\nresource \"aws_msk_cluster\" \"<example_resource_name>\" {\n cluster_name = \"<example_resource_name>\"\n kafka_version = \"<KAFKA_VERSION>\"\n number_of_broker_nodes = 2\n\n broker_node_group_info {\n instance_type = \"kafka.m5.large\"\n client_subnets = [\"<example_subnet_id_a>\", \"<example_subnet_id_b>\"]\n security_groups = [\"<example_security_group_id>\"]\n }\n\n encryption_info {\n encryption_at_rest_kms_key_arn = \"<example_kms_key_arn>\" # Critical: customer managed KMS key to pass the check\n }\n}\n```"
22
31
  },
23
32
  "Recommendation": {
24
- "Text": "It is recommended to use Customer Managed Keys (CMK) for Kafka Cluster encryption at rest to maintain control and flexibility over the encryption process.",
25
- "Url": "https://docs.aws.amazon.com/msk/latest/developerguide/msk-working-with-encryption.html"
33
+ "Text": "Use a **customer-managed KMS key** for MSK at-rest encryption. Apply **least privilege** in key policies and grants, enable **key rotation**, and log key use for auditing. Enforce **separation of duties** between MSK admins and KMS key custodians, and regularly review access, aliases, and pending-deletion states.",
34
+ "Url": "https://hub.prowler.com/check/kafka_cluster_encryption_at_rest_uses_cmk"
26
35
  }
27
36
  },
28
- "Categories": [],
37
+ "Categories": [
38
+ "encryption"
39
+ ],
29
40
  "DependsOn": [],
30
41
  "RelatedTo": [],
31
42
  "Notes": ""
@@ -1,29 +1,39 @@
1
1
  {
2
2
  "Provider": "aws",
3
3
  "CheckID": "kafka_cluster_enhanced_monitoring_enabled",
4
- "CheckTitle": "Ensure Enhanced Monitoring is Enabled for MSK (Kafka) Brokers",
5
- "CheckType": [],
4
+ "CheckTitle": "Amazon MSK cluster has enhanced monitoring enabled",
5
+ "CheckType": [
6
+ "Software and Configuration Checks/AWS Security Best Practices",
7
+ "Software and Configuration Checks/Industry and Regulatory Standards/AWS Foundational Security Best Practices"
8
+ ],
6
9
  "ServiceName": "kafka",
7
- "SubServiceName": "cluster",
8
- "ResourceIdTemplate": "arn:partition:kafka:region:account-id:cluster",
10
+ "SubServiceName": "",
11
+ "ResourceIdTemplate": "",
9
12
  "Severity": "medium",
10
13
  "ResourceType": "AwsMskCluster",
11
- "Description": "Enhanced monitoring provides additional visibility into the performance and behavior of MSK (Kafka) brokers. By enabling enhanced monitoring, you can gain insights into potential issues and optimize the performance of your Kafka clusters.",
12
- "Risk": "Without enhanced monitoring, you may have limited visibility into the performance and health of your MSK brokers, which could lead to undetected issues and potential performance degradation.",
13
- "RelatedUrl": "https://docs.aws.amazon.com/msk/latest/developerguide/monitoring.html",
14
+ "Description": "**Amazon MSK clusters** are assessed for **enhanced monitoring** levels beyond `DEFAULT` (e.g., `PER_BROKER`, `PER_TOPIC_PER_BROKER`, `PER_TOPIC_PER_PARTITION`).\n\n*Serverless clusters* include enhanced monitoring by design; provisioned clusters are evaluated by their configured monitoring level.",
15
+ "Risk": "Insufficient metrics limit visibility into **broker health**, **replication state**, and **consumer lag**, delaying response to incidents.\n\nThis increases risk of **availability loss** (saturation, throttling) and can mask **integrity issues** such as under-replicated partitions, raising data-loss impact during failures.",
16
+ "RelatedUrl": "",
17
+ "AdditionalURLs": [
18
+ "https://docs.aws.amazon.com/msk/latest/developerguide/metrics-details.html",
19
+ "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/MSK/enable-enhanced-monitoring-for-apache-kafka-brokers.html#",
20
+ "https://docs.aws.amazon.com/msk/latest/developerguide/monitoring.html"
21
+ ],
14
22
  "Remediation": {
15
23
  "Code": {
16
- "CLI": "aws kafka update-monitoring --region region_cluster --cluster-arn arn_cluster --current-version version_cluster --enhanced-monitoring PER_BROKER",
17
- "NativeIaC": "",
18
- "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/MSK/enable-enhanced-monitoring-for-apache-kafka-brokers.html#",
19
- "Terraform": ""
24
+ "CLI": "aws kafka update-monitoring --cluster-arn <CLUSTER_ARN> --current-version <CURRENT_VERSION> --enhanced-monitoring PER_BROKER",
25
+ "NativeIaC": "```yaml\n# CloudFormation: Enable enhanced monitoring on an MSK cluster\nResources:\n <example_resource_name>:\n Type: AWS::MSK::Cluster\n Properties:\n ClusterName: <example_resource_name>\n KafkaVersion: <example_kafka_version>\n NumberOfBrokerNodes: 2\n BrokerNodeGroupInfo:\n ClientSubnets:\n - <example_subnet_id_1>\n - <example_subnet_id_2>\n InstanceType: kafka.t3.small\n EnhancedMonitoring: PER_BROKER # Critical: sets enhanced monitoring above DEFAULT to pass the check\n```",
26
+ "Other": "1. Open the AWS Console and go to Amazon MSK\n2. Select your provisioned cluster\n3. Click Edit\n4. Under Monitoring, set Enhanced monitoring to PER_BROKER (or higher)\n5. Save changes and wait for the update to complete",
27
+ "Terraform": "```hcl\n# Terraform: Enable enhanced monitoring on an MSK cluster\nresource \"aws_msk_cluster\" \"<example_resource_name>\" {\n cluster_name = \"<example_resource_name>\"\n kafka_version = \"<example_kafka_version>\"\n number_of_broker_nodes = 2\n\n broker_node_group_info {\n instance_type = \"kafka.t3.small\"\n client_subnets = [\"<example_subnet_id_1>\", \"<example_subnet_id_2>\"]\n }\n\n enhanced_monitoring = \"PER_BROKER\" # Critical: sets monitoring above DEFAULT to pass the check\n}\n```"
20
28
  },
21
29
  "Recommendation": {
22
- "Text": "It is recommended to enable enhanced monitoring for MSK (Kafka) brokers to gain deeper insights into the performance and behavior of your clusters.",
23
- "Url": "https://docs.aws.amazon.com/msk/latest/developerguide/metrics-details.html"
30
+ "Text": "Select an enhanced level (e.g., `PER_BROKER` or finer) and establish **observability**: prioritize telemetry for broker resources, replication health, and consumer lag. Configure alerts and dashboards aligned to SLOs to enable proactive scaling and rapid incident containment. *Balance granularity with cost*.",
31
+ "Url": "https://hub.prowler.com/check/kafka_cluster_enhanced_monitoring_enabled"
24
32
  }
25
33
  },
26
- "Categories": [],
34
+ "Categories": [
35
+ "logging"
36
+ ],
27
37
  "DependsOn": [],
28
38
  "RelatedTo": [],
29
39
  "Notes": ""
@@ -1,31 +1,39 @@
1
1
  {
2
2
  "Provider": "aws",
3
3
  "CheckID": "kafka_cluster_in_transit_encryption_enabled",
4
- "CheckTitle": "Ensure Kafka Cluster Encryption in Transit is Enabled",
4
+ "CheckTitle": "Kafka cluster has encryption in transit enabled",
5
5
  "CheckType": [
6
- "Infrastructure Security"
6
+ "Software and Configuration Checks/AWS Security Best Practices",
7
+ "Software and Configuration Checks/Industry and Regulatory Standards/AWS Foundational Security Best Practices"
7
8
  ],
8
9
  "ServiceName": "kafka",
9
- "SubServiceName": "cluster",
10
- "ResourceIdTemplate": "arn:partition:kafka:region:account-id:cluster",
11
- "Severity": "medium",
10
+ "SubServiceName": "",
11
+ "ResourceIdTemplate": "",
12
+ "Severity": "high",
12
13
  "ResourceType": "AwsMskCluster",
13
- "Description": "Kafka clusters should have encryption in transit enabled to protect data as it travels across the network. This ensures that data is encrypted when transmitted between clients and brokers, preventing unauthorized access or data breaches.",
14
- "Risk": "If encryption in transit is not enabled, data transmitted over the network could be vulnerable to eavesdropping or man-in-the-middle attacks.",
15
- "RelatedUrl": "https://docs.aws.amazon.com/msk/latest/developerguide/msk-encryption.html",
14
+ "Description": "**Amazon MSK clusters** are evaluated for **encryption in transit** on both paths: **clientbroker** set to `TLS` only and **inter-broker** encryption enabled. *Serverless clusters provide this by default*.\n\nThe finding highlights clusters where client-broker traffic isn't `TLS`-only or inter-broker encryption is turned off.",
15
+ "Risk": "Unencrypted or mixed (`TLS_PLAINTEXT`/`PLAINTEXT`) traffic enables interception of records, credentials, and metadata, supporting **MITM**, replay, and message tampering.\n\nPlaintext inter-broker links expose replication data within the VPC, enabling **lateral movement** and topic poisoning, degrading data **confidentiality** and **integrity**.",
16
+ "RelatedUrl": "",
17
+ "AdditionalURLs": [
18
+ "https://docs.aws.amazon.com/msk/latest/developerguide/msk-encryption.html",
19
+ "https://docs.aws.amazon.com/msk/latest/developerguide/msk-working-with-encryption.html",
20
+ "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/MSK/encryption-in-transit-for-msk.html"
21
+ ],
16
22
  "Remediation": {
17
23
  "Code": {
18
- "CLI": "aws kafka create-cluster --cluster-name <CLUSTER_NAME> --broker-node-group-info <NODE_JSON> --encryption-info <INFO_JSON> --kafka-version <VERSION> --number-of-broker-nodes <NUMBER>",
19
- "NativeIaC": "",
20
- "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/MSK/encryption-in-transit-for-msk.html",
21
- "Terraform": "https://docs.prowler.com/checks/aws/general-policies/bc_aws_general_32/#terraform"
24
+ "CLI": "",
25
+ "NativeIaC": "```yaml\n# CloudFormation: MSK cluster with encryption in transit enforced\nResources:\n <example_resource_name>:\n Type: AWS::MSK::Cluster\n Properties:\n ClusterName: <example_resource_name>\n KafkaVersion: <VERSION>\n NumberOfBrokerNodes: 3\n BrokerNodeGroupInfo:\n ClientSubnets:\n - <example_resource_id>\n - <example_resource_id>\n InstanceType: kafka.m5.large\n EncryptionInfo:\n EncryptionInTransit:\n ClientBroker: TLS # Critical: forces client-to-broker TLS only\n InCluster: true # Critical: enables inter-broker encryption\n```",
26
+ "Other": "1. In the AWS Console, go to Amazon MSK > Clusters and select your cluster\n2. Click Edit (Security)\n3. Under Encryption in transit, set Client-broker to TLS only\n4. Save changes\n5. Verify Inter-broker (in-cluster) encryption is enabled; if it is disabled (immutable), create a new cluster with:\n - Encryption in transit: Client-broker = TLS only, Inter-broker encryption = Enabled\n - Migrate clients to the new cluster, then decommission the old one",
27
+ "Terraform": "```hcl\n# Terraform: MSK cluster with encryption in transit enforced\nresource \"aws_msk_cluster\" \"<example_resource_name>\" {\n cluster_name = \"<example_resource_name>\"\n kafka_version = \"<VERSION>\"\n number_of_broker_nodes = 3\n\n broker_node_group_info {\n instance_type = \"kafka.m5.large\"\n client_subnets = [\n \"subnet-<example_resource_id>\",\n \"subnet-<example_resource_id>\",\n ]\n }\n\n encryption_info {\n encryption_in_transit {\n client_broker = \"TLS\" # Critical: forces client-to-broker TLS only\n in_cluster = true # Critical: enables inter-broker encryption\n }\n }\n}\n```"
22
28
  },
23
29
  "Recommendation": {
24
- "Text": "It is recommended to enable encryption in transit for Kafka clusters to protect data confidentiality and integrity.",
25
- "Url": "https://docs.aws.amazon.com/msk/latest/developerguide/msk-working-with-encryption.html"
30
+ "Text": "Enforce end-to-end transport protection:\n- Require `client_broker=TLS` for all clients\n- Enable `in_cluster=true` for broker-to-broker links\n\nApply **defense in depth**: restrict network paths, prefer private connectivity, and use strong client authentication with **least privilege** authorization to limit blast radius.",
31
+ "Url": "https://hub.prowler.com/check/kafka_cluster_in_transit_encryption_enabled"
26
32
  }
27
33
  },
28
- "Categories": [],
34
+ "Categories": [
35
+ "encryption"
36
+ ],
29
37
  "DependsOn": [],
30
38
  "RelatedTo": [],
31
39
  "Notes": ""