Why do lakehouse catalogs vend short-lived storage credentials to query engines?
answer
- a bucket grant is much coarser than a table grant
- the permission and the bytes must agree
- who is allowed to decide, and where
- short-lived and scoped to one table's location
- useless if the direct storage path stays open
basics
~20 sSo that access to a table's files follows the grants held in the catalog. The catalog authorizes the operation and returns temporary credentials scoped to that table's storage path, instead of every engine holding broad bucket credentials that bypass table-level permissions.
solid answer
~50 sWithout vending, an engine needs its own object-storage credentials, and those are scoped by **storage** policy — usually a whole bucket or prefix. Any table-level grant in the catalog is then advisory: a user who can reach the bucket can read files directly and skip the catalog entirely. Credential vending closes that gap. The engine authenticates to the catalog, the catalog checks the grant for that table and that principal, and returns short-lived credentials (or signs storage requests on the engine's behalf) scoped to just that table's location and just the needed permissions. The catalog becomes the enforcement point, and access is auditable per table rather than per bucket. The caveats matter: it only helps if the principal has **no** independent path to the bucket, credential lifetime must cover long-running scans without being generous, and file-level scoping cannot express row or column filters — those still need engine-side enforcement.
go deeper
Know only the shape: the catalog can hand an engine temporary access to a table's files, so engines need not carry standing storage keys.
Explain why bucket-scoped credentials make catalog grants unenforceable, and describe the load-table exchange that returns scoped, expiring credentials instead.
Show you would close the direct storage path at the same time, size credential lifetime against long scans, and check that every client in the estate honours delegation rather than falling back to its own keys.
Own the tradeoff: the catalog becomes the authorization and availability chokepoint for all data access, which is the price of table-level governance across many engines.
## The gap being closed In the classic setup, a query engine holds object-storage credentials — an instance role, a service principal, a key in a config file — that grant access to the buckets holding your tables. The catalog, meanwhile, records that team A may read `finance.ledger` and team B may not. Those two facts are unrelated. Team B simply points a storage client at the table's prefix and reads the Parquet files. The catalog grant was never an enforcement point; it was documentation. This is uncomfortable in exactly the environments where open table formats are attractive: many engines, many teams, one shared object store. ## How vending works 1. The engine authenticates **to the catalog** as a principal (a user, a job identity, a workload identity). 2. It asks to load a table for read or for write. 3. The catalog authorizes: does this principal hold that privilege on that table or namespace? 4. If yes, the response includes not only the metadata location but temporary credentials scoped to that table's storage location, with only the required permissions and a short expiry. An alternative shape is **remote signing**: the engine sends each storage request to the catalog to be signed, and never holds credentials at all. 5. The engine reads or writes the files with those credentials and discards them. The Iceberg REST catalog specification includes an access-delegation option along these lines, and governance-oriented catalogs such as Unity Catalog and Apache Polaris (incubating) are built around it. It is one of the concrete reasons a REST-style catalog is more than a faster metastore: because the server understands both the identity and the operation, it can be the place authorization happens. ## What it buys you - **Table-level authorization that actually holds**, because reaching the bytes requires going through the catalog. - **Least privilege in time and scope**: credentials expire in minutes and address one table's prefix rather than a bucket. - **Audit per table and per principal**, since every access begins with a catalog call. - **No long-lived secrets in engine configuration**, which removes a whole class of leak. - **Cross-engine consistency**: one grant model applies whether the reader is Spark, Trino, a Python client or a notebook. ## Where it stops **It is not a substitute for storage policy.** If the principal can already assume a role with bucket access, vending changes nothing — they read the files directly. Vending only bites when the direct path is closed, so the storage policy must be tightened at the same time. Candidates who present vending as a complete answer without saying this are missing the point. **Granularity is path-shaped.** Vended credentials scope to locations. Row filters, column masks and views are enforced by whatever component reads the data — the engine or a catalog-mediated read path — not by the credential. A credential that lets you read a table's files lets you read all of its rows. **Lifetime versus long queries.** A scan that outlives its credential fails partway. Clients must refresh, and the catalog must survive being on the hot path of every table load. That makes the catalog a real availability dependency: if it is down, nothing reads, which is a stronger coupling than a discovery-only metastore. **Client support is uneven.** Every engine and every library in your estate has to understand the delegation mechanism; the ones that do not fall back to their own credentials, quietly reopening the gap. ## Why this is a differentiator, not a screener Most candidates working with these formats have never configured vending, and a strong engineer can be entirely competent without it. But it is where the "which catalog?" decision stops being about interoperability and becomes about governance — and it is the reason organizations with real compliance requirements choose a governance catalog over a plain metastore.
- A user is denied SELECT on a table but has read access to the bucket. Does vending help?No. Vending makes the catalog the enforcement point only for principals who cannot reach storage another way. If a role with bucket access is assumable, the user simply reads the Parquet files directly. Tightening the storage policy so the catalog's vended credentials are the only path is half of the design.
- What breaks when a query outlives the vended credential?The scan fails partway with an access error, typically after significant work. Clients are expected to refresh through the catalog before expiry, so the catalog sits on the hot path for long jobs. Set lifetimes against your longest realistic scan and confirm every engine in the estate refreshes rather than failing.
- Can vended credentials enforce column masking or row filters?No. They scope to a storage location, so anyone who can read the files can read every row and column in them. Row and column controls are enforced by the reading component — an engine honouring catalog policy, or a mediated read path that returns filtered data — not by the credential itself.
- What new availability risk does this introduce?The catalog becomes required for data access, not just for name resolution. If it is unavailable, running queries lose the ability to refresh credentials and new queries cannot start. That argues for treating the catalog as a tier-one service with the same availability target as the engines that depend on it.
saying these in an interview costs you the question
- Says vending secures a table even when the bucket is readable directly
- Thinks vended credentials can enforce row or column filters
- Treats them as long-lived keys stored in engine configuration
- Assumes every engine and client supports delegation automatically
- Ignores that the catalog becomes a hard dependency for reads