github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/internal/adapters/cloud/aws/kinesis/adapt.go (about) 1 package kinesis 2 3 import ( 4 api "github.com/aws/aws-sdk-go-v2/service/kinesis" 5 "github.com/khulnasoft-lab/defsec/internal/adapters/cloud/aws" 6 "github.com/khulnasoft-lab/defsec/pkg/concurrency" 7 "github.com/khulnasoft-lab/defsec/pkg/providers/aws/kinesis" 8 "github.com/khulnasoft-lab/defsec/pkg/state" 9 defsecTypes "github.com/khulnasoft-lab/defsec/pkg/types" 10 ) 11 12 type adapter struct { 13 *aws.RootAdapter 14 api *api.Client 15 } 16 17 func init() { 18 aws.RegisterServiceAdapter(&adapter{}) 19 } 20 21 func (a *adapter) Provider() string { 22 return "aws" 23 } 24 25 func (a *adapter) Name() string { 26 return "kinesis" 27 } 28 29 func (a *adapter) Adapt(root *aws.RootAdapter, state *state.State) error { 30 31 a.RootAdapter = root 32 a.api = api.NewFromConfig(root.SessionConfig()) 33 var err error 34 35 state.AWS.Kinesis.Streams, err = a.getStreams() 36 if err != nil { 37 return err 38 } 39 40 return nil 41 } 42 43 func (a *adapter) getStreams() ([]kinesis.Stream, error) { 44 45 a.Tracker().SetServiceLabel("Discovering streams...") 46 47 var apiStreams []string 48 var input api.ListStreamsInput 49 for { 50 output, err := a.api.ListStreams(a.Context(), &input) 51 if err != nil { 52 return nil, err 53 } 54 apiStreams = append(apiStreams, output.StreamNames...) 55 a.Tracker().SetTotalResources(len(apiStreams)) 56 if output.HasMoreStreams == nil || !*output.HasMoreStreams { 57 break 58 } 59 input.ExclusiveStartStreamName = &output.StreamNames[len(output.StreamNames)-1] 60 } 61 62 a.Tracker().SetServiceLabel("Adapting streams...") 63 return concurrency.Adapt(apiStreams, a.RootAdapter, a.adaptStream), nil 64 } 65 66 func (a *adapter) adaptStream(streamName string) (*kinesis.Stream, error) { 67 68 output, err := a.api.DescribeStream(a.Context(), &api.DescribeStreamInput{ 69 StreamName: &streamName, 70 ExclusiveStartShardId: nil, 71 Limit: nil, 72 }) 73 if err != nil { 74 return nil, err 75 } 76 77 metadata := a.CreateMetadataFromARN(*output.StreamDescription.StreamARN) 78 79 var kmsKeyId string 80 if output.StreamDescription.KeyId != nil { 81 kmsKeyId = *output.StreamDescription.KeyId 82 } 83 84 return &kinesis.Stream{ 85 Metadata: metadata, 86 Encryption: kinesis.Encryption{ 87 Metadata: metadata, 88 Type: defsecTypes.String(string(output.StreamDescription.EncryptionType), metadata), 89 KMSKeyID: defsecTypes.String(kmsKeyId, metadata), 90 }, 91 }, nil 92 93 }