Skip to content

Server-Side Encryption

FlexFS supports S3 server-side encryption (SSE) for block data stored in object storage. When requested, the storage provider encrypts blocks at rest using its own key management.

Server-side encryption is requested via the --sse flag on the mount client:

Terminal window
mount.flexfs start my-volume /mnt/data --sse

Or via fstab mount options:

my-volume /mnt/data flexfs _netdev,nofail,sse 0 0

With the flag set, flexFS includes the x-amz-server-side-encryption: AES256 header on all PUT requests to the block store. The storage provider handles key management and encryption transparently. The flag takes effect only on block stores whose API code is s3 — Amazon S3 and S3-compatible endpoints; it is ignored by the native gcs, azure, and oci block APIs.

For Amazon S3 itself, --sse is usually unnecessary: S3 encrypts every new object with SSE-S3 (AES-256) by default, in all buckets, at no additional cost, and default encryption cannot be disabled. Blocks written without the flag are still encrypted at rest.

The flag exists primarily for third-party S3-compatible object storage systems that support SSE but do not apply it by default. It is off by default in flexFS because many S3-compatible systems do not support SSE at all, and explicitly requesting it on such a system causes writes to fail with an error — set it only when your block store both supports SSE and does not already apply it on its own.

StepWhat happens
WriteMount client uploads a block with the SSE header. The storage provider encrypts the block before writing to disk.
ReadThe storage provider decrypts the block transparently before returning it. No special header is needed on GET requests.

SSE is transparent to the application — no changes are needed beyond setting the flag.

SSE is configured independently on each component that writes to object storage — it is not passed through from the mount client. A mount client’s --sse applies only to blocks it uploads directly; blocks written through a proxy are governed by that proxy’s own --sse flag, so set it on every proxy in the group or those writes land without SSE.

Blocks cached on the proxy disk are stored exactly as the mount client sent them: compressed, and, on an end-to-end encrypted volume, still encrypted. The proxy never holds the encryption secret and cannot decrypt block data. The same is true of the mount client’s own on-disk cache, which sits below the encryption layer.

FeatureServer-Side Encryption (SSE)End-to-End Encryption (E2E)
EditionAll editionsEnterprise only
Who encryptsStorage providerMount client
Key managementStorage providerUser-provided secret
Data encrypted atObject storage layerBefore leaving mount client
Metadata encryptedNoYes
Protection from storage providerNo (provider has keys)Yes (provider never sees plaintext)
ProviderSSE supportNotes
Amazon S3YesSSE-S3 (AES256). New objects are encrypted with SSE-S3 by default even without the flag.
Google Cloud StorageN/AGCS encrypts at rest by default. --sse applies only to block stores with API code s3, and the Cloud Storage XML API does not honor x-amz-server-side-encryption.
S3-compatible stores (MinIO, Wasabi, Ceph RGW)VariesDepends on the implementation
Azure Blob StorageN/AAzure encrypts at rest by default
Oracle Cloud InfrastructureN/AOCI encrypts at rest by default