[ 
https://issues.apache.org/jira/browse/NIFI-15734?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Shubham Sharma updated NIFI-15734:
----------------------------------
    Description: 
h3. Problem

After NIFI-14277 was merged, ConsumeGCPubSub, PublishGCPubSub, and BigQuery 
processors fail with {{ACCESS_TOKEN_SCOPE_INSUFFICIENT}} error when using GCP 
Workload Identity Federation with Service Account Impersonation.
{code:java}
com.google.api.gax.rpc.UnauthenticatedException: 
io.grpc.StatusRuntimeException: UNAUTHENTICATED: Failed computing credential 
metadata
Caused by: com.google.api.client.http.HttpResponseException: 403 Forbidden
POST 
https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/[SA_EMAIL]:generateAccessToken
{
  "error": {
    "code": 403,
    "message": "Request had insufficient authentication scopes.",
    "reason": "ACCESS_TOKEN_SCOPE_INSUFFICIENT",
    "domain": "googleapis.com",
    "metadata": {
      "service": "iamcredentials.googleapis.com",
      "method": "google.iam.credentials.v1.IAMCredentials.GenerateAccessToken"
    }
  }
}{code}
h3. Root Cause

NIFI-14277 introduced explicit OAuth scopes for GCP processors to support 
private endpoints. The implementation uses narrow scopes:
 * {{GOOGLE_CLOUD_PUBSUB_SCOPE}} 
({{{}[https://www.googleapis.com/auth/pubsub]{}}}) for PubSub processors
 * {{GOOGLE_CLOUD_BIGQUERY_SCOPE}} 
({{{}[https://www.googleapis.com/auth/bigquery]{}}}) for BigQuery processors

When using Workload Identity Federation with Service Account Impersonation, the 
authentication flow is:
 # OIDC token → STS token exchange → Service Account Impersonation → Final 
access token

The impersonation step calls the IAM Credentials API 
({{{}iamcredentials.googleapis.com/generateAccessToken{}}}), which requires 
{{cloud-platform}} scope. The narrow {{pubsub}} or {{bigquery}} scopes are 
insufficient to call this API, causing the authentication failure.
h3. Reproduction Steps
 # Configure GCP Workload Identity Federation with Service Account Impersonation
 # Create an external account credential configuration file pointing to an OIDC 
token file
 # Configure GCPCredentialsControllerService with the external account 
credential file
 # Configure ConsumeGCPubSub or PublishGCPubSub processor to use the credential 
service
 # Start the processor
 # Observe the {{ACCESS_TOKEN_SCOPE_INSUFFICIENT}} error when credentials 
refresh/impersonation occurs

  was:
h3. Problem

After NIFI-14277 was merged, ConsumeGCPubSub, PublishGCPubSub, and BigQuery 
processors fail with {{ACCESS_TOKEN_SCOPE_INSUFFICIENT}} error when using GCP 
Workload Identity Federation with Service Account Impersonation.
{code:java}
com.google.api.gax.rpc.UnauthenticatedException: 
io.grpc.StatusRuntimeException: UNAUTHENTICATED: Failed computing credential 
metadata
Caused by: com.google.api.client.http.HttpResponseException: 403 Forbidden
POST 
https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/[SA_EMAIL]:generateAccessToken
{
  "error": {
    "code": 403,
    "message": "Request had insufficient authentication scopes.",
    "reason": "ACCESS_TOKEN_SCOPE_INSUFFICIENT",
    "domain": "googleapis.com",
    "metadata": {
      "service": "iamcredentials.googleapis.com",
      "method": "google.iam.credentials.v1.IAMCredentials.GenerateAccessToken"
    }
  }
}{code}
 
h3. Root Cause

NIFI-14277 introduced explicit OAuth scopes for GCP processors to support 
private endpoints. The implementation uses narrow scopes:
 * {{GOOGLE_CLOUD_PUBSUB_SCOPE}} 
({{{}https://www.googleapis.com/auth/pubsub{}}}) for PubSub processors
 * {{GOOGLE_CLOUD_BIGQUERY_SCOPE}} 
({{{}https://www.googleapis.com/auth/bigquery{}}}) for BigQuery processors

When using Workload Identity Federation with Service Account Impersonation, the 
authentication flow is:
 # OIDC token → STS token exchange → Service Account Impersonation → Final 
access token

The impersonation step calls the IAM Credentials API 
({{{}iamcredentials.googleapis.com/generateAccessToken{}}}), which requires 
{{cloud-platform}} scope. The narrow {{pubsub}} or {{bigquery}} scopes are 
insufficient to call this API, causing the authentication failure.
h3. Reproduction Steps
 # Configure GCP Workload Identity Federation with Service Account Impersonation
 # Create an external account credential configuration file pointing to an OIDC 
token file
 # Configure GCPCredentialsControllerService with the external account 
credential file
 # Configure ConsumeGCPubSub or PublishGCPubSub processor to use the credential 
service
 # Start the processor
 # Observe the {{ACCESS_TOKEN_SCOPE_INSUFFICIENT}} error when credentials 
refresh/impersonation occurs


> GCP PubSub/BigQuery processors fail with ACCESS_TOKEN_SCOPE_INSUFFICIENT when 
> using Workload Identity Federation with Service Account Impersonation
> ---------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: NIFI-15734
>                 URL: https://issues.apache.org/jira/browse/NIFI-15734
>             Project: Apache NiFi
>          Issue Type: Bug
>          Components: Extensions
>    Affects Versions: 2.3.0, 2.8.0
>            Reporter: Shubham Sharma
>            Priority: Major
>
> h3. Problem
> After NIFI-14277 was merged, ConsumeGCPubSub, PublishGCPubSub, and BigQuery 
> processors fail with {{ACCESS_TOKEN_SCOPE_INSUFFICIENT}} error when using GCP 
> Workload Identity Federation with Service Account Impersonation.
> {code:java}
> com.google.api.gax.rpc.UnauthenticatedException: 
> io.grpc.StatusRuntimeException: UNAUTHENTICATED: Failed computing credential 
> metadata
> Caused by: com.google.api.client.http.HttpResponseException: 403 Forbidden
> POST 
> https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/[SA_EMAIL]:generateAccessToken
> {
>   "error": {
>     "code": 403,
>     "message": "Request had insufficient authentication scopes.",
>     "reason": "ACCESS_TOKEN_SCOPE_INSUFFICIENT",
>     "domain": "googleapis.com",
>     "metadata": {
>       "service": "iamcredentials.googleapis.com",
>       "method": "google.iam.credentials.v1.IAMCredentials.GenerateAccessToken"
>     }
>   }
> }{code}
> h3. Root Cause
> NIFI-14277 introduced explicit OAuth scopes for GCP processors to support 
> private endpoints. The implementation uses narrow scopes:
>  * {{GOOGLE_CLOUD_PUBSUB_SCOPE}} 
> ({{{}[https://www.googleapis.com/auth/pubsub]{}}}) for PubSub processors
>  * {{GOOGLE_CLOUD_BIGQUERY_SCOPE}} 
> ({{{}[https://www.googleapis.com/auth/bigquery]{}}}) for BigQuery processors
> When using Workload Identity Federation with Service Account Impersonation, 
> the authentication flow is:
>  # OIDC token → STS token exchange → Service Account Impersonation → Final 
> access token
> The impersonation step calls the IAM Credentials API 
> ({{{}iamcredentials.googleapis.com/generateAccessToken{}}}), which requires 
> {{cloud-platform}} scope. The narrow {{pubsub}} or {{bigquery}} scopes are 
> insufficient to call this API, causing the authentication failure.
> h3. Reproduction Steps
>  # Configure GCP Workload Identity Federation with Service Account 
> Impersonation
>  # Create an external account credential configuration file pointing to an 
> OIDC token file
>  # Configure GCPCredentialsControllerService with the external account 
> credential file
>  # Configure ConsumeGCPubSub or PublishGCPubSub processor to use the 
> credential service
>  # Start the processor
>  # Observe the {{ACCESS_TOKEN_SCOPE_INSUFFICIENT}} error when credentials 
> refresh/impersonation occurs



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

Reply via email to