@@ -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,9 @@ const (
7174// Mode in which Trivy client operates.
7275type Mode string
7376
77+ var aws_creds [][]string
78+ var EcrTokenGen time.Time
79+
7480const (
7581 Standalone Mode = "Standalone"
7682 ClientServer Mode = "ClientServer"
@@ -146,6 +152,10 @@ func (c Config) UseECRCredentials() bool {
146152 }
147153}
148154
155+ func (c Config ) GetECRRefreshTTL () (string , error ) {
156+ return c .GetRequiredData (keyTrivyECRTokenRefreshTTL )
157+ }
158+
149159func (c Config ) GetServerInsecure () bool {
150160 _ , ok := c .Data [keyTrivyServerInsecure ]
151161 return ok
@@ -599,10 +609,19 @@ func (p *plugin) getPodSpecForStandaloneMode(ctx starboard.PluginContext, config
599609 })
600610 }
601611
612+ TTLResult , err := config .GetECRRefreshTTL ()
613+ if err != nil {
614+ TTLResult = "0"
615+ }
616+
602617 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
618+
619+ if utils .TokenTTLValidation (EcrTokenGen , TTLResult ) {
620+ EcrTokenGen = time .Now ()
621+ aws_creds , err = GetAuthorizationToken (CheckAwsEcrPrivateRegistry (c .Image ))
622+ if err != nil {
623+ return corev1.PodSpec {}, nil , err
624+ }
606625 }
607626
608627 var creds (ecr_credentials ) = ecr_credentials {aws_creds [0 ][1 ], aws_creds [0 ][2 ]}
@@ -882,11 +901,21 @@ func (p *plugin) getPodSpecForClientServerMode(ctx starboard.PluginContext, conf
882901 },
883902 }
884903
904+ TTLResult , err := config .GetECRRefreshTTL ()
905+ if err != nil {
906+ TTLResult = "0"
907+ }
908+
885909 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
910+
911+ if utils .TokenTTLValidation (EcrTokenGen , TTLResult ) {
912+ EcrTokenGen = time .Now ()
913+ aws_creds , err = GetAuthorizationToken (CheckAwsEcrPrivateRegistry (container .Image ))
914+ if err != nil {
915+ return corev1.PodSpec {}, nil , err
916+ }
889917 }
918+
890919 var creds (ecr_credentials ) = ecr_credentials {aws_creds [0 ][1 ], aws_creds [0 ][2 ]}
891920
892921 env = append (env , corev1.EnvVar {
@@ -1450,7 +1479,7 @@ func GetAuthorizationToken(AwsEcrRegion string) ([][]string, error) {
14501479 errormsg = "GetAuthorizationToken (AWS-API): " + aerr .Error ()
14511480 }
14521481 } else {
1453- fmt . Println ( err .Error () )
1482+ errormsg = err .Error ()
14541483 }
14551484 return nil , errors .New ((errormsg ))
14561485 }
0 commit comments