github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/internal/adapters/terraform/aws/cloudtrail/adapt.go (about) 1 package cloudtrail 2 3 import ( 4 "github.com/khulnasoft-lab/defsec/pkg/providers/aws/cloudtrail" 5 "github.com/khulnasoft-lab/defsec/pkg/terraform" 6 ) 7 8 func Adapt(modules terraform.Modules) cloudtrail.CloudTrail { 9 return cloudtrail.CloudTrail{ 10 Trails: adaptTrails(modules), 11 } 12 } 13 14 func adaptTrails(modules terraform.Modules) []cloudtrail.Trail { 15 var trails []cloudtrail.Trail 16 17 for _, module := range modules { 18 for _, resource := range module.GetResourcesByType("aws_cloudtrail") { 19 trails = append(trails, adaptTrail(resource)) 20 } 21 } 22 return trails 23 } 24 25 func adaptTrail(resource *terraform.Block) cloudtrail.Trail { 26 nameAttr := resource.GetAttribute("name") 27 nameVal := nameAttr.AsStringValueOrDefault("", resource) 28 29 enableLogFileValidationAttr := resource.GetAttribute("enable_log_file_validation") 30 enableLogFileValidationVal := enableLogFileValidationAttr.AsBoolValueOrDefault(false, resource) 31 32 isMultiRegionAttr := resource.GetAttribute("is_multi_region_trail") 33 isMultiRegionVal := isMultiRegionAttr.AsBoolValueOrDefault(false, resource) 34 35 KMSKeyIDAttr := resource.GetAttribute("kms_key_id") 36 KMSKeyIDVal := KMSKeyIDAttr.AsStringValueOrDefault("", resource) 37 38 var selectors []cloudtrail.EventSelector 39 for _, selBlock := range resource.GetBlocks("event_selector") { 40 var resources []cloudtrail.DataResource 41 for _, resBlock := range selBlock.GetBlocks("data_resource") { 42 resources = append(resources, cloudtrail.DataResource{ 43 Metadata: resBlock.GetMetadata(), 44 Type: resBlock.GetAttribute("type").AsStringValueOrDefault("", resBlock), 45 Values: resBlock.GetAttribute("values").AsStringValues(), 46 }) 47 } 48 selector := cloudtrail.EventSelector{ 49 Metadata: selBlock.GetMetadata(), 50 DataResources: resources, 51 ReadWriteType: selBlock.GetAttribute("read_write_type").AsStringValueOrDefault("All", selBlock), 52 } 53 selectors = append(selectors, selector) 54 } 55 56 return cloudtrail.Trail{ 57 Metadata: resource.GetMetadata(), 58 Name: nameVal, 59 EnableLogFileValidation: enableLogFileValidationVal, 60 IsMultiRegion: isMultiRegionVal, 61 KMSKeyID: KMSKeyIDVal, 62 CloudWatchLogsLogGroupArn: resource.GetAttribute("cloud_watch_logs_group_arn").AsStringValueOrDefault("", resource), 63 IsLogging: resource.GetAttribute("enable_logging").AsBoolValueOrDefault(true, resource), 64 BucketName: resource.GetAttribute("s3_bucket_name").AsStringValueOrDefault("", resource), 65 EventSelectors: selectors, 66 } 67 }