Skip to content

fix: normalize RustFS policies before drift hash comparison#146

Open
mskitroot wants to merge 1 commit into
rustfs:mainfrom
mskitroot:fix/145-policy-drift-false-positive
Open

fix: normalize RustFS policies before drift hash comparison#146
mskitroot wants to merge 1 commit into
rustfs:mainfrom
mskitroot:fix/145-policy-drift-false-positive

Conversation

@mskitroot

Copy link
Copy Markdown

Type of Change

  • New Feature
  • Bug Fix
  • Documentation
  • Performance Improvement
  • Test/CI
  • Refactor
  • Other:

Related Issues

Fixes #145

Summary of Changes

Policy drift detection compared SHA-256 hashes of raw JSON from the Tenant
ConfigMap against live RustFS canned policies. RustFS adds envelope fields
(ID, empty Sid, empty Condition) and may reorder Action arrays when
storing or listing policies, so semantically identical documents produced
different hashes and the Tenant was blocked with PolicyConflict even after
successful provisioning.

This change normalizes policy documents before hashing (strip empty RustFS
fields, sort actions/resources/statements) and treats live policies that match
spec as Ready when status tracking hashes are stale after operator upgrades.

Checklist

  • I have read and followed the CONTRIBUTING.md guidelines
  • Passed make pre-commit (fmt-check + clippy + test + console-lint + console-fmt-check)
  • Added/updated necessary tests
  • Documentation updated (if needed)
  • CHANGELOG.md updated under [Unreleased] (if user-visible change)
  • CI/CD passed (if applicable)

Impact

  • Breaking change (CRD/API compatibility)
  • Requires doc/config/deployment update
  • Other impact:

Verification

make pre-commit
cargo test reconcile::provisioning::tests

Validated on a live cluster: Tenant provisioning moved to Ready after deploy;
policies recreated when deleted from RustFS and reconcile was triggered.

Additional Notes

N/A


Thank you for your contribution! Please ensure your PR follows the community standards (CODE_OF_CONDUCT.md) and sign the CLA if this is your first contribution.

RustFS returns canned policies with extra envelope fields (ID, empty Sid,
empty Condition) and may reorder Action arrays. Hashing raw JSON caused
false PolicyConflict even when live policy matched the Tenant spec.

Normalize policy documents before hashing and accept live policies that
match spec when status tracking hashes are stale after upgrades.

Fixes rustfs#145

Co-authored-by: Cursor <cursoragent@cursor.com>
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.

Policies applied but Tenant is shown as blocked with Live RustFS policy changed since the operator last applied it

1 participant