github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/internal/adapters/cloud/aws/iam/certs.go (about) 1 package iam 2 3 import ( 4 "fmt" 5 6 defsecTypes "github.com/khulnasoft-lab/defsec/pkg/types" 7 8 iamapi "github.com/aws/aws-sdk-go-v2/service/iam" 9 iamtypes "github.com/aws/aws-sdk-go-v2/service/iam/types" 10 "github.com/khulnasoft-lab/defsec/pkg/concurrency" 11 "github.com/khulnasoft-lab/defsec/pkg/providers/aws/iam" 12 "github.com/khulnasoft-lab/defsec/pkg/state" 13 ) 14 15 func (a *adapter) adaptServerCertificates(state *state.State) error { 16 a.Tracker().SetServiceLabel("Discovering server certificates...") 17 18 var certs []iamtypes.ServerCertificateMetadata 19 20 input := &iamapi.ListServerCertificatesInput{} 21 for { 22 certsOutput, err := a.api.ListServerCertificates(a.Context(), input) 23 if err != nil { 24 return err 25 } 26 certs = append(certs, certsOutput.ServerCertificateMetadataList...) 27 a.Tracker().SetTotalResources(len(certs)) 28 if !certsOutput.IsTruncated { 29 break 30 } 31 input.Marker = certsOutput.Marker 32 } 33 34 a.Tracker().SetServiceLabel("Adapting server certificates...") 35 36 state.AWS.IAM.ServerCertificates = concurrency.Adapt(certs, a.RootAdapter, a.adaptServerCertificate) 37 return nil 38 } 39 40 func (a *adapter) adaptServerCertificate(certInfo iamtypes.ServerCertificateMetadata) (*iam.ServerCertificate, error) { 41 cert, err := a.api.GetServerCertificate(a.Context(), &iamapi.GetServerCertificateInput{ 42 ServerCertificateName: certInfo.ServerCertificateName, 43 }) 44 if err != nil { 45 return nil, err 46 } 47 48 if cert.ServerCertificate.ServerCertificateMetadata == nil || cert.ServerCertificate.ServerCertificateMetadata.Arn == nil { 49 return nil, fmt.Errorf("server certificate metadata is nil") 50 } 51 52 metadata := a.CreateMetadataFromARN(*cert.ServerCertificate.ServerCertificateMetadata.Arn) 53 54 expiration := defsecTypes.TimeUnresolvable(metadata) 55 if cert.ServerCertificate.ServerCertificateMetadata.Expiration != nil { 56 expiration = defsecTypes.Time(*cert.ServerCertificate.ServerCertificateMetadata.Expiration, metadata) 57 } 58 59 return &iam.ServerCertificate{ 60 Metadata: metadata, 61 Expiration: expiration, 62 }, nil 63 }