@@ -42,6 +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" )
4546 )
4647
4748 // set the region
@@ -61,7 +62,7 @@ func main() {
6162 log .Fatal (fmt .Sprintf ("error creating aws session: %v" , err ))
6263 }
6364
64- svc := getECRClient (sess , assumeRole , externalId )
65+ svc := getECRClient (sess , assumeRole , externalId , idToken )
6566 username , password , defaultRegistry , err := getAuthInfo (svc )
6667
6768 if registry == "" {
@@ -213,11 +214,15 @@ func getenv(key ...string) (s string) {
213214 return
214215}
215216
216- func getECRClient (sess * session.Session , role string , externalId string ) * ecr.ECR {
217+ func getECRClient (sess * session.Session , role string , externalId string , idToken string ) * ecr.ECR {
217218 if role == "" {
218219 return ecr .New (sess )
219220 }
220- if externalId != "" {
221+ // Use STS AssumeRoleWithWebIdentity when idToken is provided
222+ if idToken != "" {
223+ creds := stscreds .NewWebIdentityCredentials (sess , role , "" , idToken )
224+ return ecr .New (sess , & aws.Config {Credentials : creds })
225+ } else if externalId != "" {
221226 return ecr .New (sess , & aws.Config {
222227 Credentials : stscreds .NewCredentials (sess , role , func (p * stscreds.AssumeRoleProvider ) {
223228 p .ExternalID = & externalId
0 commit comments