github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/internal/adapters/cloud/aws/ssm/adapt.go (about) 1 package ssm 2 3 import ( 4 api "github.com/aws/aws-sdk-go-v2/service/secretsmanager" 5 "github.com/aws/aws-sdk-go-v2/service/secretsmanager/types" 6 "github.com/khulnasoft-lab/defsec/internal/adapters/cloud/aws" 7 "github.com/khulnasoft-lab/defsec/pkg/concurrency" 8 "github.com/khulnasoft-lab/defsec/pkg/providers/aws/ssm" 9 "github.com/khulnasoft-lab/defsec/pkg/state" 10 defsecTypes "github.com/khulnasoft-lab/defsec/pkg/types" 11 ) 12 13 type adapter struct { 14 *aws.RootAdapter 15 api *api.Client 16 } 17 18 func init() { 19 aws.RegisterServiceAdapter(&adapter{}) 20 } 21 22 func (a *adapter) Provider() string { 23 return "aws" 24 } 25 26 func (a *adapter) Name() string { 27 return "ssm" 28 } 29 30 func (a *adapter) Adapt(root *aws.RootAdapter, state *state.State) error { 31 32 a.RootAdapter = root 33 a.api = api.NewFromConfig(root.SessionConfig()) 34 var err error 35 36 state.AWS.SSM.Secrets, err = a.getSecrets() 37 if err != nil { 38 return err 39 } 40 41 return nil 42 } 43 44 func (a *adapter) getSecrets() ([]ssm.Secret, error) { 45 46 a.Tracker().SetServiceLabel("Discovering secrets...") 47 48 var apiSecrets []types.SecretListEntry 49 var input api.ListSecretsInput 50 for { 51 output, err := a.api.ListSecrets(a.Context(), &input) 52 if err != nil { 53 return nil, err 54 } 55 apiSecrets = append(apiSecrets, output.SecretList...) 56 a.Tracker().SetTotalResources(len(apiSecrets)) 57 if output.NextToken == nil { 58 break 59 } 60 input.NextToken = output.NextToken 61 } 62 63 a.Tracker().SetServiceLabel("Adapting secrets...") 64 return concurrency.Adapt(apiSecrets, a.RootAdapter, a.adaptSecret), nil 65 } 66 67 func (a *adapter) adaptSecret(apiSecret types.SecretListEntry) (*ssm.Secret, error) { 68 69 metadata := a.CreateMetadataFromARN(*apiSecret.ARN) 70 71 var kmsKeyId string 72 if apiSecret.KmsKeyId != nil { 73 kmsKeyId = *apiSecret.KmsKeyId 74 } 75 76 return &ssm.Secret{ 77 Metadata: metadata, 78 KMSKeyID: defsecTypes.String(kmsKeyId, metadata), 79 }, nil 80 }