Skip to content

Conversation

@adutra
Copy link
Contributor

@adutra adutra commented Aug 19, 2025

This change removes the requirement for Polaris principals to have a numeric identifier, by removing the only sites where such an identifier was required:

  • In the Resolver. Instead of lookups by id, the Resolver now performs lookups by principal name.
  • In PolarisAdminService. Instead of comparing entity ids, the code now compares the principal name against the entity name and type.

Note: the lookup in the Resolver is still necessary, because the Resolver also needs to fetch the grant records.

@github-project-automation github-project-automation bot moved this to PRs In Progress in Basic Kanban Board Aug 19, 2025
@adutra adutra requested a review from collado-mike August 19, 2025 11:59
@adutra adutra force-pushed the auth-refactor-remove-principal-id branch from 7d3bf24 to 696afc3 Compare August 19, 2025 12:02
snazy
snazy previously approved these changes Aug 19, 2025
@github-project-automation github-project-automation bot moved this from PRs In Progress to Ready to merge in Basic Kanban Board Aug 19, 2025
dimas-b
dimas-b previously approved these changes Aug 19, 2025
Copy link
Contributor

@dimas-b dimas-b left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 👍

*/
private static boolean isSelfOperation(PolarisAuthorizableOperation op) {
return op.equals(PolarisAuthorizableOperation.ROTATE_CREDENTIALS)
|| op.equals(PolarisAuthorizableOperation.RESET_CREDENTIALS);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

side note: RESET_CREDENTIALS is no going to be a "self" operation after #2197

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My understanding of #2197 is that the root user will be able to reset credentials of another user, but it won't remove the possibility for any user to reset their own credentials. So in a way it it still a "self" operation. Am I missing something?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IIRC, in current main the RESET_CREDENTIALS operation is "dead code" (but will be restored to active service by #2197).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I do not think a self-reset of credentials will be allowed, though.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So, should I remove this check? IMO any changes here should be made by #2197 itself, but I don't mind proactively changing this bit in this PR.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see the change has been made in #2197: only ROTATE_CREDENTIALS remains a "self-operation".

Copy link
Contributor

@dimas-b dimas-b Aug 22, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree that this change should be made under #2197. I commented here only as a "heads up" hoping to clarify potential merge conflicts. Sorry, if I caused confusion 😅

@dimas-b dimas-b requested a review from dennishuo August 19, 2025 22:58
@adutra
Copy link
Contributor Author

adutra commented Aug 22, 2025

@dennishuo @collado-mike PTAL.

This change removes the requirement for Polaris principals to have a numeric identifier, by removing the only sites where such an identifier was required:

- In the `Resolver`. Instead, the `Resolver` now performs a lookup by principal name.
- In  `PolarisAdminService`. Instead, the code now compares the principal name against the entity name.

Note: the lookup in the `Resolver` is still necessary, because the `Resolver` also needs to fetch the grant records.
@adutra adutra dismissed stale reviews from dimas-b and snazy via 463aab7 September 16, 2025 15:46
@adutra adutra force-pushed the auth-refactor-remove-principal-id branch from 696afc3 to 463aab7 Compare September 16, 2025 15:46
@adutra adutra requested review from dimas-b and snazy September 16, 2025 15:47
@adutra adutra added this to the 1.2.0 milestone Sep 16, 2025
@adutra adutra merged commit f334d1a into apache:main Sep 19, 2025
14 checks passed
@github-project-automation github-project-automation bot moved this from Ready to merge to Done in Basic Kanban Board Sep 19, 2025
@adutra adutra deleted the auth-refactor-remove-principal-id branch September 19, 2025 16:11
snazy added a commit to snazy/polaris that referenced this pull request Nov 20, 2025
* Avoid calling deprecated `TableMetadataParser.read(FileIO, InputFile)` method. (apache#2609)

Call `read(InputFile)` instead, as instructed by Iceberg javadoc.

* Add doc notes about EclipseLink removal (apache#2605)

* chore(docs): add polaris-api-specs section (apache#2598)

* docs(README): Updating the READMEs to Reflect the Project Structure (apache#2599)

* docs(README): Updating the READMEs to Reflect the Project Structure

* fix(deps): update dependency io.opentelemetry:opentelemetry-bom to v1.54.1 (apache#2613)

* Add Code of Conduct entry to the ASF menu (apache#2537)

* Use the ASF Code Of Conduct

* Update site/hugo.yaml

Co-authored-by: Robert Stupp <[email protected]>

---------

Co-authored-by: Robert Stupp <[email protected]>

* fix(deps): update dependency org.postgresql:postgresql to v42.7.8 (apache#2619)

* chore(deps): update dependency mypy to >=1.18, <=1.18.2 (apache#2617)

* Update registry.access.redhat.com/ubi9/openjdk-21-runtime Docker tag to v1.23-6.1758133907 (apache#2612)

* Introduce alternate in-memory buffering event listener (apache#2574)

* fix(deps): update dependency org.assertj:assertj-core to v3.27.5 (apache#2618)

* chore(deps): update dependency virtualenv to >=20.34.0,<20.35.0 (apache#2614)

* Add Community Meeting 20250918 (apache#2622)

* Add 1.1.0-incubating release on the website (apache#2621)

* Add 1.1.0-incubating release content (apache#2625)

* chore(errorprone): Enabling EqualsGetClass, PatternMatchingInstanceof, and UnusedMethod in ErrorProne (apache#2600)

* fix(deps): update dependency com.adobe.testing:s3mock-testcontainers to v4.9.1 (apache#2626)

* Unify create/loadTable call paths (apache#2589)

In preparation for implementing sending non-credential config
to REST Catalog clients for apache#2207 this PR unifies calls paths
for create/load table operations.

This change does not have any differences in authorization.

This change is not expecte to have any material behaviour
differences to the affected code paths.

The main idea is to consolidate decision-making for that
to include into REST responses and use method parameters
like `EnumSet<AccessDelegationMode> delegationModes` for
driving those decisions.

* Remove numeric identifier from PolarisPrincipal (apache#2388)

This change removes the requirement for Polaris principals to have a numeric identifier, by removing the only sites where such an identifier was required:

- In the `Resolver`. Instead, the `Resolver` now performs a lookup by principal name.
- In  `PolarisAdminService`. Instead, the code now compares the principal name against the entity name.

Note: the lookup in the `Resolver` is still necessary, because the `Resolver` also needs to fetch the grant records.

* Include principal name in Polaris tokens (apache#2389)

* Include principal name in Polaris tokens

Summary of changes:

- Instead of including the principal id twice in the token, the principal name is now used as the subject claim. While the default authenticator doesn't need the principal name and works with just the principal id, not having the "real" principal name available could be a problem for other authenticator implementations.

- `DecodedToken` has been refactored and renamed to `InternalPolarisCredential`. It is also now a package-private component.

- `TokenBroker.verify()` now returns PolarisCredential.

* rename to InternalPolarisToken

* main: bump to 1.2.0-incubating-SNAPSHOT (apache#2624)

* bump version.txt to 1.2.0-incubating-SNAPSHOT

* virtualenv: wider version range (apache#2623)

see apache#2614 (comment)

* Remove ActiveRolesProvider (apache#2390)

Summary of changes:

- As proposed on the ML, `ActiveRolesProvider` is removed, and `DefaultActiveRolesProvider` is merged into `DefaultAuthenticator`. `ActiveRolesAugmentor` is also merged into `AuthenticatingAugmentor`.

- The implicit convention that no roles in credentials == all roles requested is removed as it is ambiguous. Credentials must explicitly include the `PRINCIPAL_ROLE:ALL` pseudo-role to request all roles available.

- PersistedPolarisPrincipal is removed. It existed merely as a means of passing the `PrincipalEntity` from the authenticator to the roles provider. This is not necessary anymore.

* NoSQL: adaptions

* Last merged commit d1d359a

---------

Co-authored-by: Dmitri Bourlatchkov <[email protected]>
Co-authored-by: Artur Rakhmatulin <[email protected]>
Co-authored-by: Adam Christian <[email protected]>
Co-authored-by: Mend Renovate <[email protected]>
Co-authored-by: JB Onofré <[email protected]>
Co-authored-by: Alexandre Dutra <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants