I see. I am imagining a scenario like the following:

I'm a Polaris admin who wants to add a new external catalog that points to
an existing Glue catalog. Since I know the tables in that catalog occupy
all sorts of wacky locations, I specify *ALLOW_UNSTRUCTURED_TABLE_LOCATION*
as true when I create the catalog. In order to protect against one table's
credentials being used to read another table, I further specify
*ALLOW_CREDENTIAL_VENDING* as false.

Later, I want to create an internal catalog. For whatever reason, I
anticipate that catalog will have tables in wacky locations, too. I set
the same two flags mentioned above the same way. I get the same behavior.

Does the above workflow make sense to you? I like the simplicity of this
approach.

On Tue, Oct 22, 2024 at 5:08 PM Michael Collado <collado.m...@gmail.com>
wrote:

> Admins don’t have the knob because they don’t control the structure of the
> remote catalog. This could be something like Glue or Tabular that generate
> UUIDs for their table locations. Or it can be entirely user controller
> where tables are randomly scattered across the bucket. E.g., maybe the user
> wanted to use object store layout and write to random locations.
>
> Admins may want to expose these catalogs to provide a single access point
> for their users and to provide some consistency in their RBAC, but may not
> want to rely on vended credentials since they cannot guarantee the
> application of those credentials. Admins should retain the ability to
> support vended credentials for cases where there is no overlap and should
> also be able to expose catalogs where we cannot prevent overlap. Those
> catalogs should be controlled differently.
>
> Mike
>
> On Tue, Oct 22, 2024 at 4:53 PM Eric Maynard <eric.w.mayn...@gmail.com>
> wrote:
>
> > > They do not have such a knob for EXTERNAL catalogs
> >
> > This by itself seems like a problem to me.
> >
> > It seems like
> > <
> >
> https://github.com/apache/polaris/blob/02468e0bed230641893c2bd45cde790dfd2ca76c/polaris-service/src/main/java/org/apache/polaris/service/admin/PolarisAdminService.java#L540
> > >
> > we
> > do check ALLOW_OVERLAPPING_CATALOG_URLS for both internal and external
> > catalogs. The check for ALLOW_UNSTRUCTURED_TABLE_LOCATION is skipped here
> > <
> >
> https://github.com/apache/polaris/blob/02468e0bed230641893c2bd45cde790dfd2ca76c/polaris-core/src/main/java/org/apache/polaris/core/storage/PolarisStorageConfigurationInfo.java#L173
> > >
> > for
> > external catalogs. Why is that?
> >
> > If we respected ALLOW_UNSTRUCTURED_TABLE_LOCATION for external catalogs,
> it
> > seems like admins would have that knob you mentioned. Since #264
> > <https://github.com/apache/polaris/pull/264> we allow overrides of this
> on
> > the catalog level, so admins that wanted to allow unsecure overlapping
> > table locations in external catalogs they could do so.
> >
> > On Tue, Oct 22, 2024 at 4:38 PM Michael Collado <collado.m...@gmail.com>
> > wrote:
> >
> > > I responded to your comment on the PR already. I think a flag to
> disable
> > > credential vending for INTERNAL catalogs does make sense, but I think
> it
> > > should be a separate flag.
> > >
> > > Service admins already have the knobs to make an INTERNAL catalog
> secure
> > by
> > > default by enforcing non-overlapping table locations. They have to go
> out
> > > of their way to allow table overlap.
> > >
> > > They do not have such a knob for EXTERNAL catalogs. A single flag for
> > > disabling all credential vending means that an admin cannot securely
> > > configure INTERNAL catalogs and support credential vending without also
> > > allowing for potentially insecure EXTERNAL catalogs. The controls for
> > each
> > > type of catalog are different, so they should be configured
> differently.
> > >
> > > Again, I think such a flag is a good idea, but should be a separate
> flag
> > > and belongs in another PR.
> > >
> > > Mike
> > >
> > > On Tue, Oct 22, 2024 at 4:25 PM Eric Maynard <eric.w.mayn...@gmail.com
> >
> > > wrote:
> > >
> > > > I commented the same on the PR, but it’s not obvious to me why we
> would
> > > > make this exclusive to external catalogs. You can create internal
> > > catalogs
> > > > with overlapping locations too.
> > > >
> > > > A single flag to disable credential vending altogether solves this
> > > problem
> > > > across the board and also allows for finer-grained control if these
> > > > overrides are ever respected for namespaces or tables.
> > > >
> > > > Other flags like the ones to allow location overlap or to disable
> > > > subscoping are not specific to a catalog type.
> > > >
> > > > On Tue, Oct 22, 2024 at 3:15 PM Michael Collado <
> > collado.m...@gmail.com>
> > > > wrote:
> > > >
> > > > > Hey folks
> > > > >
> > > > > I opened a PR at https://github.com/apache/polaris/pull/395 to
> > support
> > > > > disabling credential vending for external catalogs.
> > > > >
> > > > > Currently, some remote catalogs don't control the table location
> for
> > > > > Iceberg tables, allowing people to create tables in overlapping
> > > > directories
> > > > > in storage. A person that has storage credentials to one table
> > > > necessarily
> > > > > has access to all of the tables that overlap. This is already an
> > issue
> > > > for
> > > > > Iceberg users.
> > > > >
> > > > > However, with Polaris, some users expect that table-level RBAC and
> > > > > credential vending will somehow magically resolve their security
> > issues
> > > > so
> > > > > that they can tightly control access despite overlapping table
> > > locations.
> > > > > This is obviously a misconception.
> > > > >
> > > > > But in the spirit of making things secure by default, I am adding a
> > > > > configuration flag to disable credential vending for external
> > catalogs.
> > > > As
> > > > > with the current configuration to disable overlapping table
> > locations,
> > > > > there is a catalog-level override so that catalog admins can enable
> > > > > credential vending on a case-by-case basis if they feel the risk is
> > > > > tolerable.
> > > > >
> > > > > Changing the configuration to disable credential vending by default
> > is
> > > a
> > > > > breaking change, so I'd like to see what everyone thinks about
> making
> > > > that
> > > > > change. Currently, the PR does _not_ change the default value, so
> we
> > > can
> > > > > merge it as is, without any impact on existing users. But unless
> > users
> > > > > really dig into the code or the documentation, they may not
> > understand
> > > > the
> > > > > implications well enough to make the more secure configuration
> > setting.
> > > > >
> > > > > WDYT?
> > > > >
> > > > > Mike
> > > > >
> > > >
> > >
> >
>

Reply via email to