Andrea Cosentino created CAMEL-24521:
----------------------------------------

             Summary: camel-google: Workload Identity Federation is documented 
for all components but is not wired to any of them
                 Key: CAMEL-24521
                 URL: https://issues.apache.org/jira/browse/CAMEL-24521
             Project: Camel
          Issue Type: Bug
          Components: camel-google
            Reporter: Andrea Cosentino
            Assignee: Andrea Cosentino


The google-pubsub documentation advertises Workload Identity Federation for 
every Google component and shows Java code that does not compile, because no 
component exposes the options.

h3. What the docs claim

{{components/camel-google/camel-google-pubsub/src/main/docs/google-pubsub-component.adoc}}
 has a "Workload Identity Federation (WIF)" section stating:

{quote}All Google components support Workload Identity Federation{quote}

and ending with:

{quote}NOTE: Workload Identity Federation support is available in all Google 
components (PubSub, Storage, BigQuery, Firestore, Sheets, Calendar, Drive, 
Mail, Functions, Secret Manager, Vision, Vertex AI, Speech-to-Text, 
Text-to-Speech) through the common GoogleCommonConfiguration interface.{quote}

with these samples:

{code:java}
GooglePubsubEndpoint endpoint = 
context.getEndpoint("google-pubsub:my-project:my-subscription", 
GooglePubsubEndpoint.class);
endpoint.setUseWorkloadIdentityFederation(true);
endpoint.setWorkloadIdentityConfig("/path/to/wif-config.json");
endpoint.setImpersonatedServiceAccount("[email protected]");
{code}

h3. What is actually implemented

{{GoogleCommonConfiguration}} declares the three accessors as *default methods 
returning false/null*:

{code:java}
default boolean isUseWorkloadIdentityFederation() { return false; }
default String getWorkloadIdentityConfig() { return null; }
default String getImpersonatedServiceAccount() { return null; }
{code}

No component overrides them and none declares a matching {{@UriParam}} field - 
a grep over {{components/camel-google}} outside {{camel-google-common}} finds 
no reference other than that one .adoc, and no {{components/*.json}} catalog 
file lists the options. There are no setters either, so the documented snippets 
do not compile ({{GooglePubsubEndpoint}} implements 
{{GoogleCommonConfiguration}} directly and adds nothing).

Consequently, in {{GoogleCredentialsHelper.getCredentials}} the branch guarded 
by {{config.isUseWorkloadIdentityFederation()}} is never entered, which makes 
unreachable:
* explicit WIF via {{workloadIdentityConfig}} - the AWS / Azure / GitHub 
Actions case the docs single out;
* {{impersonatedServiceAccount}} - the impersonation wrapper is only applied 
inside that branch.

h3. What *does* work

The "On GKE with Workload Identity: no configuration is needed" claim is 
correct, but for a different reason than the docs give: the plain ADC fallback 
at the end of {{getCredentials}} calls 
{{GoogleCredentials.getApplicationDefault()}}, and ADC detects GKE Workload 
Identity by itself. That path does not involve the WIF code at all.

h3. Suggested resolution

Either wire the three options up as real {{@UriParam}} options on the component 
configurations (which is what CAMEL-17368 and CAMEL-17369 ask for, for 
functions and storage), or correct the documentation to describe only the 
ADC/GKE behaviour that is actually reachable. Right now a user following the 
docs writes code that does not compile.

Found during a source audit of the {{components/camel-google}} module family; 
verified against main @ 9c30b32b69dc.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to