Back to Checks
CloudTrail trail has log file validation enabled
cloudtrail_log_file_validation_enabled
Service: cloudtrailSeverity: medium
OfficialBuilt-inVerified
Categories:loggingforensics-ready
Resource Type:AwsCloudTrailTrail
AWS CloudTrail trails are evaluated for log file integrity validation being enabled (LogFileValidationEnabled).
When enabled, CloudTrail generates signed digest files to verify that S3-delivered log files remain unchanged.
Risk
Without validation, adversaries can alter, forge, or delete audit entries without detection, compromising log integrity and non-repudiation.
This impairs investigations, enables alert evasion, and obscures unauthorized changes across regions or accounts.
Run this check with Prowler
Run in Prowler CloudRun
prowler aws --checks cloudtrail_log_file_validation_enabledRecommendation
Enable log file integrity validation on all trails (LogFileValidationEnabled=true).
Enforce least privilege on the logs bucket, retain and protect digest files (e.g., S3 Object Lock/MFA Delete), and monitor validation results to support defense in depth.
Remediation
CLI
aws cloudtrail update-trail --name <trail_name> --enable-log-file-validationTerraform
# Enable log file validation on a CloudTrail trail
resource "aws_cloudtrail" "<example_resource_name>" {
name = "<example_resource_name>"
s3_bucket_name = "<example_resource_name>"
enable_log_file_validation = true # Critical: ensures CloudTrail writes signed digests to detect tampering
}NativeIaC
# CloudFormation: Enable log file validation on a CloudTrail trail
Resources:
<example_resource_name>:
Type: AWS::CloudTrail::Trail
Properties:
S3BucketName: <example_resource_name>
EnableLogFileValidation: true # Critical: enables integrity validation for delivered log filesOther
1Open the AWS Console and go to CloudTrail
2Click Trails and select <trail_name>
3Click Edit
4In Additional/Advanced settings, check Enable log file validation
5Click Save changes
Check Code
from prowler.lib.check.models import Check, Check_Report_AWS
from prowler.providers.aws.services.cloudtrail.cloudtrail_client import (
cloudtrail_client,
)
class cloudtrail_log_file_validation_enabled(Check):
def execute(self):
findings = []
if cloudtrail_client.trails is not None:
for trail in cloudtrail_client.trails.values():
if trail.name:
report = Check_Report_AWS(metadata=self.metadata(), resource=trail)
report.region = trail.home_region
report.status = "FAIL"
if trail.is_multiregion:
report.status_extended = f"Multiregion trail {trail.name} has log file validation disabled."
else:
report.status_extended = f"Single region trail {trail.name} has log file validation disabled."
if trail.log_file_validation_enabled:
report.status = "PASS"
if trail.is_multiregion:
report.status_extended = f"Multiregion trail {trail.name} has log file validation enabled."
else:
report.status_extended = f"Single region trail {trail.name} has log file validation enabled."
findings.append(report)
return findingsReferences
- https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-log-file-validation-intro.html
- https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-log-file-validation-enabling.html
- https://www.trendmicro.com/trendaivisiononecloudriskmanagement/knowledge-base/aws/CloudTrail/cloudtrail-log-file-integrity-validation.html
- https://deepwiki.com/acantril/learn-cantrill-io-labs/7.1-cloudtrail-log-file-integrity