@@ -143,7 +143,7 @@ func cloudProviderAuth(svc *service.Service, ctx context.Context, logs *logger.L
143143 return rtUsername , rtToken
144144 case utils .CloudProviderGoogle :
145145 logs .Debug ("Detected Google cloud provider" )
146- rtUsername , rtToken = handleGoogleAuth (svc , ctx , logs , artifactoryUrl )
146+ rtUsername , rtToken = handleGoogleAuth (svc , ctx , logs , artifactoryUrl , request )
147147 return rtUsername , rtToken
148148 default :
149149 logs .Exit ("ERROR in JFrog Credentials provider, cloud_provider value should be either aws, azure, or google" , 1 )
@@ -256,6 +256,7 @@ func handleAzureAuth(svc *service.Service, ctx context.Context, logs *logger.Log
256256 logs .Info (fmt .Sprintf ("getting envs - azureAppClientId: %s, azureNodepoolClientId: %s, azureAppTenantId: %s, azureAppAudience: %s, jfrogOidcProviderName: %s" ,
257257 azureAppClientId , azureNodepoolClientId , azureAppTenantId , azureAppAudience , jfrogOidcProviderName ))
258258 }
259+ logs .Info ("Service Account Token obtained using Node Identity (VM Service Account)" )
259260 // Get Azure OIDC token
260261 token , err = handlers .GetAzureOIDCToken (svc , ctx , azureAppTenantId , azureAppClientId , azureNodepoolClientId , azureAppAudience )
261262 } else {
@@ -265,6 +266,7 @@ func handleAzureAuth(svc *service.Service, ctx context.Context, logs *logger.Log
265266 logs .Info (fmt .Sprintf ("getting envs - azureAppClientId: %s, azureAppAudience: %s, jfrogOidcProviderName: %s" ,
266267 azureAppClientId , azureAppAudience , jfrogOidcProviderName ))
267268 }
269+ logs .Info ("Service Account Token obtained using Pod Identity (Kubernetes Workload Identity)" )
268270 token = request .ServiceAccountToken
269271 }
270272 if err != nil {
@@ -280,31 +282,37 @@ func handleAzureAuth(svc *service.Service, ctx context.Context, logs *logger.Log
280282 return rtUsername , rtToken
281283}
282284
283- func handleGoogleAuth (svc * service.Service , ctx context.Context , logs * logger.Logger , artifactoryUrl string ) (string , string ) {
285+ func handleGoogleAuth (svc * service.Service , ctx context.Context , logs * logger.Logger , artifactoryUrl string , request utils. CredentialProviderRequest ) (string , string ) {
284286 // get required env variables
285287 googleServiceAccountEmail := utils .GetEnvs (logs , "google_service_account_email" , "" )
286288 jfrogOidcProviderAudience := utils .GetEnvs (logs , "jfrog_oidc_audience" , "" )
287289 jfrogOidcProviderName := utils .GetEnvs (logs , "jfrog_oidc_provider_name" , "" )
288-
290+ var token string
291+ var err error
289292 if googleServiceAccountEmail == "" || jfrogOidcProviderAudience == "" || jfrogOidcProviderName == "" {
290293 logs .Exit ("ERROR in JFrog Credentials provider, environment variables missing: google_service_account_email, jfrog_oidc_audience, jfrog_oidc_provider_name" , 1 )
291294 } else {
292295 logs .Info (fmt .Sprintf ("getting envs - googleServiceAccountEmail: %s, jfrogOidcProviderAudience: %s, jfrogOidcProviderName: %s" ,
293296 googleServiceAccountEmail , jfrogOidcProviderAudience , jfrogOidcProviderName ))
294297 }
295298
296- // Get Google OIDC token
297- token , err := handlers .GetGoogleOIDCToken (svc , ctx , googleServiceAccountEmail , jfrogOidcProviderAudience )
298- if err != nil {
299- logs .Exit ("ERROR in GetGoogleOIDCToken :" + err .Error (), 1 )
299+ if request .ServiceAccountAnnotations ["JFrogExchange" ] == "true" {
300+ logs .Info ("Service Account Token obtained using Pod Identity (Kubernetes Workload Identity)" )
301+ token = request .ServiceAccountToken
302+ } else {
303+ // Get Google OIDC token
304+ logs .Info ("Service Account Token obtained using Node Identity (VM Service Account)" )
305+ token , err = handlers .GetGoogleOIDCToken (svc , ctx , googleServiceAccountEmail , jfrogOidcProviderAudience )
306+ if err != nil {
307+ logs .Exit ("ERROR in GetGoogleOIDCToken :" + err .Error (), 1 )
308+ }
300309 }
301310
302311 // Exchange Google OIDC token with JFrog Artifactory token
303312 rtUsername , rtToken , err := handlers .ExchangeOidcArtifactoryToken (svc , ctx , token , artifactoryUrl , jfrogOidcProviderName , jfrogOidcProviderAudience )
304313 if err != nil {
305314 logs .Exit ("ERROR in JFrog Credentials provider, error in createArtifactoryToken :" + err .Error (), 1 )
306315 }
307-
308316 return rtUsername , rtToken
309317}
310318
@@ -326,6 +334,5 @@ func generateAndOutputResponse(logs *logger.Logger, request utils.CredentialProv
326334 if err != nil {
327335 logs .Exit ("Error marshaling JSON :" + err .Error (), 1 )
328336 }
329-
330337 os .Stdout .Write (jsonBytes )
331338}
0 commit comments