Skip to content

fix(iam)!: split self-service password permissions and update SDK stack - #175

Merged
Vonng merged 3 commits into
mainfrom
codex/upstream-sdk-password-20260910
Sep 10, 2026
Merged

Vonng merged 3 commits into
mainfrom
codex/upstream-sdk-password-20260910

Conversation

@Vonng

@Vonng Vonng commented Sep 10, 2026

Copy link
Copy Markdown
Member

Separate self-service password changes from user administration in the existing AddUser endpoint: requests targeting the authenticated internal user check admin:ChangeMyPassword with explicit-Deny semantics; creation or password resets for other users still require admin:CreateUser.

Breaking authorization compatibility: the same saved policy can now authorize a previously denied password change. A Deny admin:CreateUser no longer locks the caller's password; add admin:ChangeMyPassword to that same statement before upgrading to preserve the old combined restriction. Conversely, an existing ChangeMyPassword deny is now enforced. The updated built-in readonly also drops its CreateUser deny, so it no longer overrides a separate user-administration grant. Saved overrides retain their original statements. Policies are not migrated automatically.

This is a deliberate permission-design change, independent of the minio-go SDK update. The migration guide documents the before/after matrix, wildcard and built-in policies, capability reporting, mixed-version rollout and rollback limits. Keep both denies during the rollout or rollback window if the old combined restriction must hold; an old Server does not enforce a password-only deny for this endpoint. The release containing this change must explicitly disclose it as breaking.

Coordinate the package, client and embedded Console dependencies:

Root, STS and service-account restrictions stay enforced.

Validation:

  • Full Server GOWORK=off go test ./... -timeout=15m and coordinated workspace testing for the implementation; the final dependency-selection follow-up changes module pins and documentation without changing dependency runtime source
  • GOWORK=off go test ./cmd -run 'TestIAMInternalIDPServerSuite|TestAPIUpstreamSDKStreamingContentType' -timeout=10m against the final source pins
  • New streaming test verifies Content-Type is signed, accepted by SILO, preserved on the object, and rejected after header tampering
  • IAM cases cover readonly/consolereadonly, legacy CreateUser deny, password-only grants, explicit/wildcard denies, other-user creation/resets, and old-password rejection
  • Live embedded Console password changes, renewed sessions, failed old logins, successful new logins, denied users, and mcli S3 round trips
  • The documentation follow-up is checked against the pre-split and current implementations and passes git diff --check; it changes no runtime code or dependency pins

The existing package/Console release gates remain pending; this is a coordinated source update, not a release or deployment. Upstream minio-go minio#2274 remains open and is absent from the pin; keep it as a non-blocking follow-up after upstream merge.

…dencies

Use ChangeMyPassword for the authenticated user and keep CreateUser for other users. Coordinate silo-pkg b3760f56ec23, mcli fa22b40b4eb7, Console 1b95b6cec652 and upstream minio-go 78bfa91607c2. Add legacy-policy and SDK streaming regressions plus upgrade guidance.

Signed-off-by: Feng Ruohang <rh@vonng.com>
Signed-off-by: Feng Ruohang <rh@vonng.com>
@Vonng Vonng changed the title fix(iam): split self-service password permissions and update SDK stack fix(iam)!: split self-service password permissions and update SDK stack Sep 10, 2026
Signed-off-by: Feng Ruohang <rh@vonng.com>
@Vonng
Vonng marked this pull request as ready for review September 10, 2026 09:39
@Vonng
Vonng merged commit 93e7ef4 into main Sep 10, 2026
8 checks passed
@Vonng
Vonng deleted the codex/upstream-sdk-password-20260910 branch September 11, 2026 08:15
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.

1 participant