@@ -42,7 +42,7 @@ func main() {
4242 assumeRole = getenv ("PLUGIN_ASSUME_ROLE" )
4343 externalId = getenv ("PLUGIN_EXTERNAL_ID" )
4444 scanOnPush = parseBoolOrDefault (false , getenv ("PLUGIN_SCAN_ON_PUSH" ))
45- idToken = os .Getenv ("PLUGIN_OIDC_TOKEN_ID" )
45+ idToken = os .Getenv ("PLUGIN_OIDC_TOKEN_ID" )
4646 )
4747
4848 // set the region
@@ -218,9 +218,24 @@ func getECRClient(sess *session.Session, role string, externalId string, idToken
218218 if role == "" {
219219 return ecr .New (sess )
220220 }
221- // Use STS AssumeRoleWithWebIdentity when idToken is provided
221+
222222 if idToken != "" {
223- creds := stscreds .NewWebIdentityCredentials (sess , role , "" , idToken )
223+ tempFile , err := os .CreateTemp ("/tmp" , "idToken-*.jwt" )
224+ if err != nil {
225+ log .Fatalf ("Failed to create temporary file: %v" , err )
226+ }
227+ defer tempFile .Close ()
228+
229+ if err := os .Chmod (tempFile .Name (), 0600 ); err != nil {
230+ log .Fatalf ("Failed to set file permissions: %v" , err )
231+ }
232+
233+ if _ , err := tempFile .WriteString (idToken ); err != nil {
234+ log .Fatalf ("Failed to write ID token to temporary file: %v" , err )
235+ }
236+
237+ // Create credentials using the path to the ID token file
238+ creds := stscreds .NewWebIdentityCredentials (sess , role , "" , tempFile .Name ())
224239 return ecr .New (sess , & aws.Config {Credentials : creds })
225240 } else if externalId != "" {
226241 return ecr .New (sess , & aws.Config {
0 commit comments