You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Feature] Iceberg REST catalog: use vended GCS credentials (gcs.oauth2.token) #68671
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:
CredentialUtils.CLOUD_STORAGE_PREFIXES keeps gs. but not gcs., so the vended token is dropped.
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.
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.
Activity
SLoeuillet commentedon Sep 30, 2026
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: keepgcs.-prefixed vended properties and feed the token into #68540's bearer path instead of the pod identity.