Hi Arun,

After writing my previous email I realised that we might be able to support
your use case via REST API by implementing admin-base password reset [624].

The flow would be:
1) create a principal using current ID (random client ID/secret)
2) set your own client ID / secret via the password reset API (new)

Would this work from your POV?

As for me, it helps to isolate rare admin-level principal manipulation from
the mainstream principal API, which IMHO, is a good idea from a general
security perspective.

Also, since we allow user-provided client IDs (after this change), it would
make sense to allow resetting them without re-creating the principal, hence
the new "reset" API.

[624] https://github.com/apache/polaris/issues/624

Cheers,
Dmitri.

On Mon, Jul 14, 2025 at 11:29 AM Dmitri Bourlatchkov <di...@apache.org>
wrote:

> Thanks for volunteering to make a PR for this, Arun! Looking forward to it.
>
> As discussed, please consider securing the extra capability via (new)
> permission checks. I'd think it might be worth it to also have a feature
> flag to control the new functionality.
>
> Re: External IdP - most of the authentication code is already in `main`.
> There are a few remaining dangling pieces related to connecting external
> users to Polaris roles, though, IIRC.
>
> Cheers,
> Dmitri.
>
> On Mon, Jul 14, 2025 at 6:34 AM Arun Suri <arun.s...@fivetran.com.invalid>
> wrote:
>
>> Thanks for the detailed response Dimitri and Yufei!
>>
>> I agree with making the PR to support user-defined client ID and secret
>> via
>> the REST API, along with appropriate access checks and possibly
>> introducing
>> a new permission type/config. I will work on this
>>
>> REST fits better with our tooling as it has fewer dependencies and
>> complications compared to the JAR-based Admin CLI. We also believe
>> building
>> our migration logic in a neutral way (e.g., using the REST API) is more
>> robust—no matter how the tools evolve, the API remains the stable
>> contract.
>>
>> As for external IdP delegation, it's something we're open to exploring
>> down
>> the line, though we understand it's still relatively new in Polaris
>>
>> Thanks,
>>
>> On Sun, Jul 13, 2025 at 1:28 AM Yufei Gu <flyrain...@gmail.com> wrote:
>>
>> > The use case of passing secrets via REST is definitely valid, and this
>> use
>> > case is not the only one we should be considering. Other concrete
>> scenarios
>> > include:
>> >
>> >    1. Catalog federation, where Polaris needs to store credentials to
>> >    connect to remote catalogs (e.g., Hive, Glue, Unity Catalog).
>> >    2. S3-compatible storage without STS support, where Polaris must
>> persist
>> >    static access keys and secrets to enable read/write operations.
>> >
>> > Given these needs, I think it's the right time to formalize our
>> approach to
>> > secret management by integrating Polaris with established secret
>> managers
>> > such as HashiCorp Vault, AWS Secrets Manager, Azure Key Vault, and
>> Google
>> > Cloud Secret Manager.
>> >
>> > While using the admin tool to inject secrets is a workable short-term
>> > solution, it’s best treated as a stopgap.
>> >
>> > The good news is that the secret management interface was introduced in
>> the
>> > Polari core already,
>> >
>> >
>> https://github.com/apache/polaris/blob/main/polaris-core/src/main/java/org/apache/polaris/core/secrets/UserSecretsManager.java
>> > ,
>> > we may just need to provide wrapper implementations for different secret
>> > managers.
>> >
>> >
>> > Yufei
>> >
>> >
>> > On Thu, Jul 10, 2025 at 12:52 PM Dmitri Bourlatchkov <di...@apache.org>
>> > wrote:
>> >
>> > > Thanks for providing more context, Arun!
>> > >
>> > > I do not object to adding user-provided client ID and secret to the
>> REST
>> > > API. However, I personally maintain my opinion that this kind of
>> > operation
>> > > fits better with the Admin Tool, given the current state of the
>> project.
>> > I
>> > > wonder what other community members think on this topic, too.
>> > >
>> > > If we go with updating the current REST API, then limiting access to
>> > > explicit client ID and secret parameters via access checks will
>> certainly
>> > > make sense. We may need a new permission type for this, I guess.
>> > >
>> > > Do you have the capacity to make a PR for this?
>> > >
>> > > Regarding the Admin Tool, is the difficulty in the fact that it is a
>> CLI
>> > > tool that requires a JVM and your existing tooling is based on
>> HTTP/REST
>> > > and is not written in java? Just trying to understand the overall use
>> > case
>> > > better.
>> > >
>> > > Your point about the external vault makes me wonder whether you might
>> be
>> > > interested in running an IdP server (e.g. keycloak) in your infra and
>> > > making Polaris delegate user management to that system. There's some
>> > > existing support for that, but I'm not sure if anyone tried it
>> end-to-end
>> > > without any custom code on the server side (it is certainly possible
>> with
>> > > custom code).
>> > >
>> > > Thanks,
>> > > Dmitri.
>> > >
>> > > On Thu, Jul 10, 2025 at 3:30 PM Arun Suri <arun.s...@fivetran.com
>> > .invalid>
>> > > wrote:
>> > >
>> > > >  Hey Dmitri and Robert,
>> > > >
>> > > >
>> > > > *To clarify our use case further:*
>> > > >
>> > > >
>> > > > This isn't a one-time migration for us. We're migrating our
>> *customers*
>> > > > from
>> > > > Polaris 0.9 (EclipseLink) to Polaris 1.0 (JDBC) gradually. During
>> this
>> > > > process, we’ll be *running both catalog servers in parallel*, with
>> 1.0
>> > > > acting as a *secondary/fallback* catalog.
>> > > >
>> > > > Our strategy involves:
>> > > >
>> > > >    - Registering the same tables in both 0.9 and 1.0
>> > > >    - Using the *same *clientId* and *clientSecret in both catalogs
>> to
>> > > >    ensure clients can authenticate seamlessly
>> > > >    - Allowing us to *switch traffic between the two catalogs*, and
>> roll
>> > > >    back instantly if needed
>> > > >
>> > > > This setup requires credential continuity — not just for migration,
>> but
>> > > to
>> > > > enable *safe rollback and zero-downtime cutover*. Using different
>> > > > credentials across catalogs versions would break this flow and
>> require
>> > > deep
>> > > > client coordination to rotate secrets, which is not feasible at
>> scale.
>> > > >
>> > > >
>> > > > *Regarding your question, Dmitri: *I wonder how your tooling could
>> > obtain
>> > > > Principals' secrets from the old
>> > > >
>> > > > Polaris instance for use as the new Principal creation request
>> > parameter
>> > > >
>> > > > - We store the credentials in an external Vault as well. So we are
>> not
>> > > > reading them from the old Polaris instance, but do have access to
>> them.
>> > > >
>> > > >
>> > > > We did consider raw table copying, but the differences in schema and
>> > > > hashing logic between 0.9 and 1.0 make that risky — and harder to
>> > > > validate/test it completely due to unknown risks.
>> > > >
>> > > > So our goal with this proposal is to:
>> > > >
>> > > >    - Enable a *safe, service-admin only way* to inject known
>> > credentials
>> > > >    via the API during the transition phase with validations of
>> course
>> > > >    - Keep this functionality configurable.
>> > > >
>> > > > We’re not trying to expand Polaris into a full IdP — just to
>> provide a
>> > > > secure and practical bridge between versions. So the change seems
>> fine
>> > to
>> > > > us.
>> > > >
>> > > > Happy to iterate on the proposal  in a future sync
>> > > >
>> > > > On Wed, Jul 9, 2025 at 3:49 AM Dmitri Bourlatchkov <
>> di...@apache.org>
>> > > > wrote:
>> > > >
>> > > > > Hi Arun,
>> > > > >
>> > > > > Thank you for starting this discussion!
>> > > > >
>> > > > > I did some poking about Keycloak and it looks like Keycloak allows
>> > > > > user-provided Client IDs.
>> > > > >
>> > > > > I think it should be fine for Polaris to accept user-provided
>> Client
>> > > IDs
>> > > > in
>> > > > > the Principal management API. I suppose we may want to impose some
>> > > > > restrictions in terms of special characters, but in general a
>> > > > > previous Polaris Client ID should be valid as an input parameter
>> when
>> > > > > creating a new Principal.
>> > > > >
>> > > > > I think it should also be fine for Polaris to accept user-provided
>> > > Client
>> > > > > Secrets (passwords) when creating Principals.
>> > > > >
>> > > > > That said, from my POV using the Admin Tool is still preferable
>> for
>> > > > > migration use cases.
>> > > > >
>> > > > > My main argument in favour of the Admin Tool is that the whole
>> > > migration
>> > > > > process is a deployment type of activity when the Polaris service
>> is
>> > > > > configured for the first time. Ideally, Polaris data would follow
>> a
>> > > > backup
>> > > > > / restore process (not currently implemented) where the old
>> > instance's
>> > > > data
>> > > > > is exported into a file, which is then imported into the new
>> instance
>> > > > > before it is started for the first time.
>> > > > >
>> > > > > I wonder how your tooling could obtain Principals' secrets from
>> the
>> > old
>> > > > > Polaris instance for use as the new Principal creation request
>> > > parameter.
>> > > > >
>> > > > > Cheers,
>> > > > > Dmitri.
>> > > > >
>> > > > > On Tue, Jul 8, 2025 at 9:02 AM Arun Suri <arun.s...@fivetran.com
>> > > > .invalid>
>> > > > > wrote:
>> > > > >
>> > > > > > Hi all,
>> > > > > >
>> > > > > > Following up on the suggestion from the discussion here
>> > > > > > <
>> > > https://github.com/apache/polaris/issues/1929#issuecomment-3045487786
>> > > > >
>> > > > > > — thank you for the feedback so far.
>> > > > > >
>> > > > > > We’re currently migrating our self-hosted Polaris service from
>> > > version
>> > > > > 0.9
>> > > > > > (EclipseLink-based metastore) to version 1.0 (JDBC-based
>> > metastore).
>> > > As
>> > > > > > part of this transition, we need to preserve the existing
>> > `clientId`
>> > > > and
>> > > > > > `clientSecret` credentials for registered principals.
>> > > > > > These credentials are already embedded in customer workflows.
>> > > Rotating
>> > > > > them
>> > > > > > during migration would create disruptions and require cross-team
>> > > > > > coordination with clients — making both rollout and rollback
>> > > > > significantly
>> > > > > > more complex.
>> > > > > >
>> > > > > > We understand the security implications of allowing arbitrary
>> > > > credentials
>> > > > > > to be passed in an API request. That said, we believe this
>> > capability
>> > > > can
>> > > > > > be introduced safely and in a tightly controlled manner. For
>> > example:
>> > > > > >
>> > > > > > - Restricting this functionality to service admin only.
>> > > > > > - Ensuring all credential transmissions occur only over HTTPS
>> > > > > > - Clearly documenting that this is strictly for
>> > *migration/bootstrap
>> > > > use
>> > > > > > cases*, not for production use
>> > > > > > - Disabling this functionality by default in publicly hosted
>> > > > deployments
>> > > > > > - Ensuring credentials are never logged (e.g., in observability
>> > > systems
>> > > > > > like logs or traces)
>> > > > > >
>> > > > > > Our goal is not to weaken the system's security guarantees, but
>> to
>> > > > > provide
>> > > > > > a practical and secure migration path where credential
>> continuity
>> > is
>> > > > > > essential. Since there are a lot of DB schema changes involved,
>> > > Manual
>> > > > > > insertion into the metastore isn't ideal either, due to
>> potential
>> > > > > > inconsistencies in hashing or salting logic across versions —
>> > > > increasing
>> > > > > > operational risk.
>> > > > > >
>> > > > > > *### Proposal*
>> > > > > >
>> > > > > > We propose extending the existing `createPrincipal` API to
>> > optionally
>> > > > > > accept `clientId` and `clientSecret` fields, with the above
>> > > safeguards
>> > > > in
>> > > > > > place.
>> > > > > >
>> > > > > > We would appreciate your feedback on this proposal and are
>> happy to
>> > > > > > contribute a patch once there’s alignment. We’re also open to
>> > > > discussing
>> > > > > > this during the next Polaris Community Sync if helpful.
>> > > > > >
>> > > > > > Arun Suri
>> > > > > >
>> > > > > > Senior Software Engineer
>> > > > > >
>> > > > > > He/him/his
>> > > > > >
>> > > > > > Engineering | Fivetran
>> > > > > > arun.s...@fivetran.com
>> > > > > > fivetran.com <//fivetran.com>
>> > > > > > <http://www.fivetran.com>
>> > > > > > [image: facebook] <https://www.facebook.com/Fivetran/> [image:
>> > > > twitter]
>> > > > > > <
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://twitter.com/fivetran?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor
>> > > > > > >
>> > > > > > [image:
>> > > > > > linkedin] <https://www.linkedin.com/company/fivetran> [image:
>> > > > instagram]
>> > > > > > <https://www.instagram.com/fivetran_ig/>
>> > > > > >
>> > > > >
>> > > >
>> > > >
>> > > > --
>> > > > Arun Suri
>> > > >
>> > > > Senior Software Engineer
>> > > >
>> > > > He/him/his
>> > > >
>> > > > Engineering | Fivetran
>> > > > arun.s...@fivetran.com
>> > > > fivetran.com <//fivetran.com>
>> > > > <http://www.fivetran.com>
>> > > > [image: facebook] <https://www.facebook.com/Fivetran/> [image:
>> > twitter]
>> > > > <
>> > > >
>> > >
>> >
>> https://twitter.com/fivetran?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor
>> > > > >
>> > > > [image:
>> > > > linkedin] <https://www.linkedin.com/company/fivetran> [image:
>> > instagram]
>> > > > <https://www.instagram.com/fivetran_ig/>
>> > > >
>> > >
>> >
>>
>>
>> --
>> Arun Suri
>>
>> Senior Software Engineer
>>
>> He/him/his
>>
>> Engineering | Fivetran
>> arun.s...@fivetran.com
>> fivetran.com <//fivetran.com>
>> <http://www.fivetran.com>
>> [image: facebook] <https://www.facebook.com/Fivetran/> [image: twitter]
>> <
>> https://twitter.com/fivetran?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor
>> >
>> [image:
>> linkedin] <https://www.linkedin.com/company/fivetran> [image: instagram]
>> <https://www.instagram.com/fivetran_ig/>
>>
>

Reply via email to