package scanner import ( "context" "strings" "github.com/aquasecurity/defsec/pkg/framework" "github.com/aquasecurity/trivy/pkg/flag" "github.com/aquasecurity/trivy/pkg/log" "github.com/aquasecurity/defsec/pkg/scan" "github.com/aquasecurity/defsec/pkg/scanners/cloud/aws" "github.com/aquasecurity/defsec/pkg/scanners/options" ) type AWSScanner struct { } func NewScanner() *AWSScanner { return &AWSScanner{} } func (s *AWSScanner) Scan(ctx context.Context, option flag.Options) (scan.Results, error) { var scannerOpts []options.ScannerOption if !option.NoProgress { tracker := newProgressTracker() defer tracker.Finish() scannerOpts = append(scannerOpts, aws.ScannerWithProgressTracker(tracker)) } if len(option.Services) > 0 { scannerOpts = append(scannerOpts, aws.ScannerWithAWSServices(option.Services...)) } if option.Debug { scannerOpts = append(scannerOpts, options.ScannerWithDebug(&defsecLogger{})) } if option.Region != "" { scannerOpts = append( scannerOpts, aws.ScannerWithAWSRegion(option.Region), ) } if option.Endpoint != "" { scannerOpts = append( scannerOpts, aws.ScannerWithAWSEndpoint(option.Endpoint), ) } scannerOpts = append(scannerOpts, options.ScannerWithFrameworks( framework.Default, framework.CIS_AWS_1_2, )) defsecResults, err := aws.New(scannerOpts...).Scan(ctx) if err != nil { return nil, err } return defsecResults, nil } type defsecLogger struct { } func (d *defsecLogger) Write(p []byte) (n int, err error) { log.Logger.Debug("[defsec] " + strings.TrimSpace(string(p))) return len(p), nil }