obelix74 opened a new pull request, #4707:
URL: https://github.com/apache/polaris/pull/4707

   For issue https://github.com/apache/polaris/issues/4706.
   
   GCP counterpart of AWS STS session tags. GCP downscoped credentials have no 
session-tag mechanism, and x-goog-custom-audit-* request headers only reach GCS 
audit logs if the client forwards them (arbitrary Iceberg clients do not), so 
GCS Data Access logs cannot today be tied to the requesting Polaris principal.
   
   This vends the attribution in the one channel that survives any client: the 
identity of the credential itself. When configured, credential vending chains 
catalog-signed JWT (sub=<realm>/<principal>) -> GCP STS token exchange (via 
IdentityPoolCredentials programmatic supplier) -> tenant service-account 
impersonation -> existing CAB downscoping, so every GCS Data Access audit entry 
carries the principal in serviceAccountDelegationInfo.principalSubject.
   
   New FeatureConfiguration flags:
   - GCS_PRINCIPAL_ATTRIBUTION_WIF_AUDIENCE
   - GCS_PRINCIPAL_ATTRIBUTION_TOKEN_ISSUER
   - GCS_PRINCIPAL_ATTRIBUTION_SIGNING_KEY_FILE
   - GCS_PRINCIPAL_ATTRIBUTION_SIGNING_KEY_ID (kid for JWKS rotation)
   
   There is no separate on/off flag: attribution activates once the audience, 
issuer, and signing key file are all set, and additionally requires a 
gcpServiceAccount on the storage config. When unconfigured, GCP vending is 
unchanged.
   
   GcpStorageCredentialCacheKey gains a principalName data field, populated 
only when attribution is configured, so per-principal attributed tokens are 
never shared across principals (and cross-principal cache reuse is preserved 
when attribution is off). CredentialVendingContext already carries 
principalName, so no new plumbing into the catalog core is required.
   
   New classes: GcpAttributionSubjectBuilder (builds <realm>/<principal> within 
GCP's 127-char google.subject limit) and GcpFederatedCredentialsExchanger 
(mints the RS256 JWT via com.auth0:java-jwt, already in the version catalog; 
performs the STS exchange via google-auth IdentityPoolCredentials, so no new 
HTTP machinery; caches the parsed signing key JVM-wide).
   
   Tests cover the subject budget/sanitization, JWT claims + kid, signing-key 
caching, the IdentityPoolCredentials configuration, and per-principal cache-key 
identity. polaris-core compiles, tests pass, spotless clean.
   
   ## Checklist
   - [x] ๐Ÿ›ก๏ธ Don't disclose security issues! (contact [email protected])
   - [x] ๐Ÿ”— Clearly explained why the changes are needed, or linked related 
issues: Fixes #
   - [x] ๐Ÿงช Added/updated tests with good coverage, or manually tested (and 
explained how)
   - [x] ๐Ÿ’ก Added comments for complex logic
   - [ ] ๐Ÿงพ Updated `CHANGELOG.md` (if needed)
   - [ ] ๐Ÿ“š Updated documentation in `site/content/in-dev/unreleased` (if needed)
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to