agent: |
oKVoul9lLG3G69AwZ4NGEnable Log File Validation for AWS CloudTrail Trail
Enable Log File Validation for AWS CloudTrail Trail
There was a problem that the LLM was not able to address. Please rephrase your prompt and try again.
This task automates the enforcement and verification of log file validation for AWS CloudTrail trails. It checks if log file validation is enabled for a specified trail and activates it if necessary. Post-activation, it confirms the validation status, ensuring compliance with security best practices.
inputs
outputs
import boto3
from botocore.exceptions import ClientError
creds = _get_creds(cred_label)['creds']
access_key = creds['username']
secret_key = creds['password']
def is_log_file_validation_enabled(trail_name, cloudtrail_client):
"""Check if log file validation is already enabled for the specified trail."""
try:
response = cloudtrail_client.describe_trails(trailNameList=[trail_name])
for trail in response['trailList']:
if trail['Name'] == trail_name:
return trail.get('LogFileValidationEnabled', False)
except ClientError as error:
print(f"Error checking log file validation status for trail '{trail_name}': {error}")
return False
def enable_log_file_validation(trail_name, region):
regions = [region['RegionName'] for region in boto3.client('ec2',aws_access_key_id=access_key,aws_secret_access_key=secret_key,region_name='us-east-1').describe_regions()['Regions']]
if region not in regions:
print(f"Invalid region: {region}")
return
try:
cloudtrail_client = boto3.client('cloudtrail',aws_access_key_id=access_key,aws_secret_access_key=secret_key, region_name=region)
if is_log_file_validation_enabled(trail_name, cloudtrail_client):
print(f"Log file validation is already enabled for trail '{trail_name}'.")
return
cloudtrail_client.update_trail(
Name=trail_name,
EnableLogFileValidation=True
)
print(f"Log file validation enabled for trail '{trail_name}' in region '{region}'.")
except ClientError as error:
print(f"Error enabling log file validation for trail '{trail_name}': {error}")
def verify_log_file_validation(trail_name, region):
regions = [region['RegionName'] for region in boto3.client('ec2',aws_access_key_id=access_key,aws_secret_access_key=secret_key,region_name='us-east-1').describe_regions()['Regions']]
if region not in regions:
print(f"Invalid region: {region}")
return
try:
cloudtrail_client = boto3.client('cloudtrail',aws_access_key_id=access_key,aws_secret_access_key=secret_key, region_name=region)
response = cloudtrail_client.describe_trails(trailNameList=[trail_name])
if not response['trailList']:
print(f"Trail '{trail_name}' not found in region '{region}'.")
return
for trail in response['trailList']:
if trail.get('Name') == trail_name:
print(f"Trail Name: {trail.get('Name')}")
print(f"S3 Bucket Name: {trail.get('S3BucketName')}")
print(f"Is Multi-Region Trail: {trail.get('IsMultiRegionTrail')}")
print(f"Home Region: {trail.get('HomeRegion')}")
print(f"Trail ARN: {trail.get('TrailARN')}")
print(f"Log File Validation Enabled: {trail.get('LogFileValidationEnabled')}")
return
print(f"Trail '{trail_name}' not found in region '{region}'.")
except ClientError as error:
print(f"Error verifying log file validation for trail '{trail_name}': {error}")
#trail_name = 'test-delete' # Replace with your trail name
#region = 'us-east-1' # Replace with the region of your trail
# Enable log file validation
enable_log_file_validation(trail_name, region)
# Verify log file validation
verify_log_file_validation(trail_name, region)
copied