@@ -9,12 +9,14 @@ import (
99 "io"
1010 "regexp"
1111 "strings"
12+ "time"
1213
1314 "github.com/aquasecurity/starboard/pkg/apis/aquasecurity/v1alpha1"
1415 "github.com/aquasecurity/starboard/pkg/docker"
1516 "github.com/aquasecurity/starboard/pkg/ext"
1617 "github.com/aquasecurity/starboard/pkg/kube"
1718 "github.com/aquasecurity/starboard/pkg/starboard"
19+ "github.com/aquasecurity/starboard/pkg/utils"
1820 "github.com/aquasecurity/starboard/pkg/vulnerabilityreport"
1921 "github.com/aws/aws-sdk-go/aws"
2022 "github.com/aws/aws-sdk-go/aws/awserr"
@@ -55,6 +57,7 @@ const (
5557 keyTrivySkipFiles = "trivy.skipFiles"
5658 keyTrivySkipDirs = "trivy.skipDirs"
5759 keyTrivyUseECRRoleCreds = "trivy.useEcrRoleCreds"
60+ keyTrivyECRTokenRefreshTTL = "trivy.ecrTokenRefreshTTL"
5861
5962 keyTrivyServerURL = "trivy.serverURL"
6063 keyTrivyServerTokenHeader = "trivy.serverTokenHeader"
@@ -71,6 +74,10 @@ const (
7174// Mode in which Trivy client operates.
7275type Mode string
7376
77+ var aws_creds [][]string
78+ var EcrTokenTTL time.Duration = 0
79+ var EcrTokenGen time.Time
80+
7481const (
7582 Standalone Mode = "Standalone"
7683 ClientServer Mode = "ClientServer"
@@ -146,6 +153,10 @@ func (c Config) UseECRCredentials() bool {
146153 }
147154}
148155
156+ func (c Config ) GetECRRefreshTTL () (string , error ) {
157+ return c .GetRequiredData (keyTrivyECRTokenRefreshTTL )
158+ }
159+
149160func (c Config ) GetServerInsecure () bool {
150161 _ , ok := c .Data [keyTrivyServerInsecure ]
151162 return ok
@@ -599,10 +610,16 @@ func (p *plugin) getPodSpecForStandaloneMode(ctx starboard.PluginContext, config
599610 })
600611 }
601612
613+ TTLresult , err := config .GetECRRefreshTTL ()
614+
602615 if config .UseECRCredentials () && CheckAwsEcrPrivateRegistry (c .Image ) != "" {
603- var aws_creds , err = GetAuthorizationToken (CheckAwsEcrPrivateRegistry (c .Image ))
604- if err != nil {
605- return corev1.PodSpec {}, nil , err
616+
617+ if utils .TokenTTLValidation (EcrTokenGen , TTLresult ) {
618+ EcrTokenGen = time .Now ()
619+ aws_creds , err = GetAuthorizationToken (CheckAwsEcrPrivateRegistry (c .Image ))
620+ if err != nil {
621+ return corev1.PodSpec {}, nil , err
622+ }
606623 }
607624
608625 var creds (ecr_credentials ) = ecr_credentials {aws_creds [0 ][1 ], aws_creds [0 ][2 ]}
@@ -882,11 +899,18 @@ func (p *plugin) getPodSpecForClientServerMode(ctx starboard.PluginContext, conf
882899 },
883900 }
884901
902+ TTLresult , err := config .GetECRRefreshTTL ()
903+
885904 if config .UseECRCredentials () && CheckAwsEcrPrivateRegistry (container .Image ) != "" {
886- var aws_creds , err = GetAuthorizationToken (CheckAwsEcrPrivateRegistry (container .Image ))
887- if err != nil {
888- return corev1.PodSpec {}, nil , err
905+
906+ if utils .TokenTTLValidation (EcrTokenGen , TTLresult ) {
907+ EcrTokenGen = time .Now ()
908+ aws_creds , err = GetAuthorizationToken (CheckAwsEcrPrivateRegistry (container .Image ))
909+ if err != nil {
910+ return corev1.PodSpec {}, nil , err
911+ }
889912 }
913+
890914 var creds (ecr_credentials ) = ecr_credentials {aws_creds [0 ][1 ], aws_creds [0 ][2 ]}
891915
892916 env = append (env , corev1.EnvVar {
@@ -1450,7 +1474,7 @@ func GetAuthorizationToken(AwsEcrRegion string) ([][]string, error) {
14501474 errormsg = "GetAuthorizationToken (AWS-API): " + aerr .Error ()
14511475 }
14521476 } else {
1453- fmt . Println ( err .Error () )
1477+ errormsg = err .Error ()
14541478 }
14551479 return nil , errors .New ((errormsg ))
14561480 }
0 commit comments