21636: Set ExpiryWindow to avoid credential expiry races.
authorTom Clegg <tom@curii.com>
Fri, 29 Mar 2024 20:58:23 +0000 (16:58 -0400)
committerTom Clegg <tom@curii.com>
Fri, 29 Mar 2024 20:58:23 +0000 (16:58 -0400)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@curii.com>

services/keepstore/s3_volume.go

index dc857c32646b2aced992243122b94750607cf4e8..affcc988ddc26111ae4909adf131931818273a23 100644 (file)
@@ -217,7 +217,17 @@ func (v *s3Volume) check(ec2metadataHostname string) error {
        creds := aws.NewChainProvider(
                []aws.CredentialsProvider{
                        aws.NewStaticCredentialsProvider(v.AccessKeyID, v.SecretAccessKey, v.AuthToken),
-                       ec2rolecreds.New(ec2metadata.New(cfg)),
+                       ec2rolecreds.New(ec2metadata.New(cfg), func(opts *ec2rolecreds.ProviderOptions) {
+                               // (from aws-sdk-go-v2 comments)
+                               // "allow the credentials to trigger
+                               // refreshing prior to the credentials
+                               // actually expiring. This is
+                               // beneficial so race conditions with
+                               // expiring credentials do not cause
+                               // request to fail unexpectedly due to
+                               // ExpiredTokenException exceptions."
+                               opts.ExpiryWindow = time.Minute
+                       }),
                })
 
        cfg.Credentials = creds