github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/rules/cloud/policies/aws/cloudtrail/no_public_log_access_test.go (about) 1 package cloudtrail 2 3 import ( 4 "testing" 5 6 defsecTypes "github.com/khulnasoft-lab/defsec/pkg/types" 7 8 "github.com/khulnasoft-lab/defsec/pkg/state" 9 10 "github.com/khulnasoft-lab/defsec/pkg/providers/aws/cloudtrail" 11 "github.com/khulnasoft-lab/defsec/pkg/providers/aws/s3" 12 "github.com/khulnasoft-lab/defsec/pkg/scan" 13 14 "github.com/stretchr/testify/assert" 15 ) 16 17 func TestCheckNoPublicLogAccess(t *testing.T) { 18 tests := []struct { 19 name string 20 inputCT cloudtrail.CloudTrail 21 inputS3 s3.S3 22 expected bool 23 }{ 24 { 25 name: "Trail has bucket with no public access", 26 inputCT: cloudtrail.CloudTrail{ 27 Trails: []cloudtrail.Trail{ 28 { 29 Metadata: defsecTypes.NewTestMetadata(), 30 BucketName: defsecTypes.String("my-bucket", defsecTypes.NewTestMetadata()), 31 }, 32 }, 33 }, 34 inputS3: s3.S3{ 35 Buckets: []s3.Bucket{ 36 { 37 Metadata: defsecTypes.NewTestMetadata(), 38 Name: defsecTypes.String("my-bucket", defsecTypes.NewTestMetadata()), 39 ACL: defsecTypes.String("private", defsecTypes.NewTestMetadata()), 40 }, 41 }, 42 }, 43 expected: false, 44 }, 45 { 46 name: "Trail has bucket with public access", 47 inputCT: cloudtrail.CloudTrail{ 48 Trails: []cloudtrail.Trail{ 49 { 50 Metadata: defsecTypes.NewTestMetadata(), 51 BucketName: defsecTypes.String("my-bucket", defsecTypes.NewTestMetadata()), 52 }, 53 }, 54 }, 55 inputS3: s3.S3{ 56 Buckets: []s3.Bucket{ 57 { 58 Metadata: defsecTypes.NewTestMetadata(), 59 Name: defsecTypes.String("my-bucket", defsecTypes.NewTestMetadata()), 60 ACL: defsecTypes.String("public-read", defsecTypes.NewTestMetadata()), 61 }, 62 }, 63 }, 64 expected: true, 65 }, 66 } 67 for _, test := range tests { 68 t.Run(test.name, func(t *testing.T) { 69 var testState state.State 70 testState.AWS.CloudTrail = test.inputCT 71 testState.AWS.S3 = test.inputS3 72 results := checkNoPublicLogAccess.Evaluate(&testState) 73 var found bool 74 for _, result := range results { 75 if result.Status() == scan.StatusFailed && result.Rule().LongID() == checkNoPublicLogAccess.Rule().LongID() { 76 found = true 77 } 78 } 79 if test.expected { 80 assert.True(t, found, "Rule should have been found") 81 } else { 82 assert.False(t, found, "Rule should not have been found") 83 } 84 }) 85 } 86 }