@@ -27,6 +27,8 @@ import (
2727
2828var (
2929 signerCache sync.Map
30+ newStsCreds = stscreds .NewCredentials
31+ newV4Signer = v4 .NewSigner
3032)
3133
3234type middleware struct {
@@ -235,10 +237,10 @@ func createSigner(cfg *Config, authSettings awsds.AuthSettings, verboseMode bool
235237 if err != nil {
236238 return nil , err
237239 }
238- c = stscreds . NewCredentials (s , cfg . AssumeRoleARN )
240+ return getAssumeRoleSigner (s , cfg , signerOpts )
239241 }
240242
241- return v4 . NewSigner (c , signerOpts ), nil
243+ return newV4Signer (c , signerOpts ), nil
242244 case awsds .AuthTypeDefault :
243245 s , err := session .NewSession (& aws.Config {
244246 Region : aws .String (cfg .Region ),
@@ -248,10 +250,10 @@ func createSigner(cfg *Config, authSettings awsds.AuthSettings, verboseMode bool
248250 }
249251
250252 if cfg .AssumeRoleARN != "" {
251- return v4 . NewSigner ( stscreds . NewCredentials ( s , cfg . AssumeRoleARN ) , signerOpts ), nil
253+ return getAssumeRoleSigner ( s , cfg , signerOpts )
252254 }
253255
254- return v4 . NewSigner (s .Config .Credentials , signerOpts ), nil
256+ return newV4Signer (s .Config .Credentials , signerOpts ), nil
255257 default :
256258 if cfg .AssumeRoleARN != "" {
257259 s , err := session .NewSession (& aws.Config {
@@ -260,7 +262,7 @@ func createSigner(cfg *Config, authSettings awsds.AuthSettings, verboseMode bool
260262 if err != nil {
261263 return nil , err
262264 }
263- return v4 . NewSigner ( stscreds . NewCredentials ( s , cfg . AssumeRoleARN ) , signerOpts ), nil
265+ return getAssumeRoleSigner ( s , cfg , signerOpts )
264266 }
265267 return nil , fmt .Errorf ("invalid SigV4 auth type %q" , authType )
266268 }
@@ -273,10 +275,19 @@ func createSigner(cfg *Config, authSettings awsds.AuthSettings, verboseMode bool
273275 if err != nil {
274276 return nil , err
275277 }
276- return v4 . NewSigner ( stscreds . NewCredentials ( s , cfg . AssumeRoleARN ) , signerOpts ), nil
278+ return getAssumeRoleSigner ( s , cfg , signerOpts )
277279 }
278280
279- return v4 .NewSigner (c , signerOpts ), nil
281+ return newV4Signer (c , signerOpts ), nil
282+ }
283+
284+ func getAssumeRoleSigner (s * session.Session , cfg * Config , signerOpts func (s * v4.Signer )) (* v4.Signer , error ) {
285+ if cfg .ExternalID != "" {
286+ return newV4Signer (newStsCreds (s , cfg .AssumeRoleARN , func (p * stscreds.AssumeRoleProvider ) {
287+ p .ExternalID = aws .String (cfg .ExternalID )
288+ }), signerOpts ), nil
289+ }
290+ return newV4Signer (newStsCreds (s , cfg .AssumeRoleARN ), signerOpts ), nil
280291}
281292
282293func copyHeaderWithoutOverwrite (dst , src http.Header ) {
0 commit comments