Skip to content

[Feature] Iceberg REST catalog: use vended GCS credentials (gcs.oauth2.token) #68671

Open

Description

@SLoeuillet

Search before asking

  • I had searched in the issues and found no similar issues.

Description

With an Iceberg REST catalog backed by a native GCS warehouse (e.g. Lakekeeper or Polaris with type: gcs), the catalog vends short-lived, table-scoped credentials as gcs.oauth2.token / gcs.oauth2.token-expires-at, per the Iceberg GCPProperties convention. Java Iceberg, iceberg-rust and iceberg-go all consume them.

Doris (checked on 4.1.4.1 and master) can't use them:

  1. CredentialUtils.CLOUD_STORAGE_PREFIXES keeps gs. but not gcs., so the vended token is dropped.
  2. Even if kept, the BE reaches GCS only through the S3-compatible endpoint with an HMAC key (gs.access_key / gs.secret_key), so there is nothing that can send a bearer token.

The only working setup is iceberg.rest.vended-credentials-enabled=false plus a long-lived, bucket-wide HMAC key in the catalog properties, which defeats per-table credential vending.

Proposal:

  • keep gcs.-prefixed vended properties and map gcs.oauth2.token (and its expiry) to the storage properties;
  • have the BE send it as Authorization: Bearer to the GCS XML API. [feature](vault) Support keyless GCS vaults with GKE Workload Identity #66484 adds exactly this bearer path to the shared object-storage client for storage vaults (tokens from the GKE metadata server); the Iceberg path could reuse it with the vended token as the source.

Use case

Doris on GKE querying and writing Iceberg tables in a GCS bucket through Lakekeeper, without handing Doris a long-lived HMAC key.

Related issues

#66484 (keyless GCS storage vaults with GKE Workload Identity), #65432

Are you willing to submit PR?

  • Yes I am willing to submit a PR!

Once #66484 is merged: this builds on its bearer-token path, so the PR will follow it.

Code of Conduct

Activity

  1. SLoeuillet commented on Sep 30, 2026

    @SLoeuillet
    Author

    Update: #68540 (native GCP IAM auth, pod identity via ADC) supersedes #66484 as the base for this. Once it lands, Doris no longer needs an HMAC key for Iceberg on GCS, but still ignores the vended gcs.oauth2.token, so this issue remains for per-table scoping: keep gcs.-prefixed vended properties and feed the token into #68540's bearer path instead of the pod identity.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions