mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-22 12:26:37 +00:00
docs(sse): state MinIO interop by measured shape, and pin the production key path
The migration warning said RustFS cannot read MinIO-encrypted objects at all. That is no longer true for the shapes this branch fixes, and a blanket 'no' costs a migrating operator a full decrypt-and-recopy they may not need. It is replaced by a table that states support per object shape, with the test that establishes each row. The table's honesty depends on one caveat worth stating in code rather than prose: every interop reader test injected its master key through __RUSTFS_SSE_SIMPLE_CMK, which is #[cfg(test)]-only and never reaches LocalSseDekProvider::new_from_env. Those tests going green therefore said nothing about a deployment. A new case reads a fixture through RUSTFS_SSE_S3_MASTER_KEY alone — the sole production entry point — so the claim now rests on the path operators actually run. Single-part and SSE-C objects are listed as unverified rather than unsupported, because the fixture harness cannot yet load them (small objects live inline in xl.meta, sharded across disks) and they have never been read in a test either way. Conflating 'untested' with 'broken' in the other direction would be the same failure the old warning made. The reverse direction gets an explicit ruling: MinIO cannot read RustFS-written objects, and the MinIO-branded headers RustFS writes are RustFS-internal rather than a compatibility promise — no coexistence plan should assume two-way reads. StaticConfig's doc comment is corrected on the same basis: it described MinIO's ciphertext as the legacy JSON encoding, and claimed MinIO-written objects cannot be read at all, which now belongs to the object read path rather than to this backend. Refs rustfs/backlog#1638.
This commit is contained in:
@@ -324,11 +324,18 @@ impl Default for LocalConfig {
|
||||
/// wraps data encryption keys — there is no HMAC-SHA256 derivation step — and
|
||||
/// each wrapped DEK is serialized as a RustFS `DataKeyEnvelope` JSON blob.
|
||||
///
|
||||
/// This mirrors the *concept* of MinIO's builtin/static single-key KMS, but is
|
||||
/// not wire-compatible with it: MinIO wraps DEKs in a different (`{"aead": ...}`)
|
||||
/// blob that this backend neither produces nor accepts, so KMS ciphertext
|
||||
/// written by MinIO cannot be opened here. Reading MinIO-written SSE objects is
|
||||
/// tracked separately in rustfs/backlog#1638.
|
||||
/// This mirrors the *concept* of MinIO's builtin/static single-key KMS but is
|
||||
/// not wire-compatible with it. MinIO seals a DEK as `sealed || iv[16] ||
|
||||
/// nonce[12]` under a per-ciphertext key derived from the master secret, with
|
||||
/// a legacy JSON encoding of the same layout; this backend neither produces
|
||||
/// nor accepts either, so pointing it at MinIO's master key does **not** make
|
||||
/// MinIO-written objects readable through it.
|
||||
///
|
||||
/// Reading MinIO-written SSE objects is a property of the object read path, not
|
||||
/// of this backend: that path decodes MinIO's format directly, keyed by
|
||||
/// `RUSTFS_SSE_S3_MASTER_KEY`. See the migration section of
|
||||
/// `docs/operations/kms-backend-security.md` for which object shapes are
|
||||
/// covered, and rustfs/backlog#1638 for the remainder.
|
||||
#[derive(Clone, Default, Serialize, Deserialize)]
|
||||
pub struct StaticConfig {
|
||||
/// Key identifier (name) for the single configured key
|
||||
|
||||
Reference in New Issue
Block a user