Amazon S3 Files: AWS Just Turned Object Storage Into a File System
Writing
DEVOPS & INFRASTRUCTURE
April 9, 202611 min read

Amazon S3 Files: AWS Just Turned Object Storage Into a File System

S3 Files lets you mount S3 buckets via NFS with sub-millisecond latency. Here is how it works, what it costs, and why AWS also killed SSE-C by default.

amazon-s3-filesaws-s3cloud-storagedevopsaws

I've been running EFS-to-S3 sync jobs for two years. Cron schedules, lifecycle policies, rsync scripts that break every time someone changes a directory structure. All because S3 couldn't speak file system.

That changed this week.

On April 7, 2026, AWS announced Amazon S3 Files, a feature that lets you mount any S3 bucket as a shared NFS file system. No gateway. No third-party tool. No data copies. Your applications read and write files, and S3 stores them. That's it.

And quietly, on April 6, AWS also started disabling SSE-C encryption by default on all new S3 buckets. If you're managing encryption keys manually, that one needs your attention too.

Let me walk through both changes.

What is Amazon S3 Files and how does it work?

Amazon S3 Files gives S3 buckets a fully-featured file system interface using NFS v4.2. You can mount a bucket on EC2, Lambda, EKS, ECS, Fargate, or AWS Batch and interact with your data using standard file operations: open(), read(), write(), ls, cp, mv. No SDK. No API calls. Just a mount point.

S3 Files Architecture Overview - Source: AWS Blog Architecture overview of Amazon S3 Files. Source: AWS News Blog

S3 is now the first and only cloud object store that provides native file system access while keeping all data in object storage. Your objects don't move to a separate file system. They stay in S3 with all the durability, lifecycle policies, and access controls you already have.

S3 Files is generally available in 34 AWS Regions as of launch day.

The stage and commit model

This is the part that surprised me. Instead of translating every file write into an immediate S3 PUT, S3 Files batches changes and commits them to S3 roughly every 60 seconds. AWS borrowed this concept from version control.

Here's what that means in practice:

  1. You write a file through the NFS mount
  2. The write lands in a caching layer (built on EFS infrastructure)
  3. S3 Files aggregates writes within a 60-second window
  4. Multiple writes to the same file become a single S3 PUT
  5. The committed object appears in S3 with full consistency

This batching has two practical benefits. First, it cuts your S3 request costs because ten rapid writes to the same file become one PUT, not ten. Second, if you're using S3 versioning, you don't end up with ten versions of a file that changed in under a minute.

But it also means there's a ~60-second lag before file changes are visible on the S3 side. If your workflow needs immediate S3 API visibility of written data, you need to account for that delay.

When there's a conflict (say, someone writes to a file through NFS while another process updates the same object via the S3 API), S3 remains authoritative. The file-side version gets moved to a lost+found directory with metrics for visibility. No silent data loss.

The caching layer under the hood

When you create an S3 Files file system, AWS provisions a caching layer backed by EFS infrastructure. This cache holds three things:

  • Recently read files: Hot reads come from cache with sub-millisecond latency
  • Recently written files: Staged writes waiting for the next commit cycle
  • Metadata: Directory listings, file attributes, timestamps

Small file reads are served entirely from the cache. Large file reads (over 1MB) stream directly from S3 and don't incur S3 Files charges. The aggregate read throughput can reach multiple terabytes per second.

This design is what makes S3 Files cost-effective. You pay file system rates ($0.30/GB-month) only on the data that's actively cached. A petabyte bucket where only 500GB is actively read? You're paying S3 rates for the petabyte and file system rates for the 500GB.

How do you set up S3 Files on an EC2 instance?

The setup is straightforward. Here's the full flow:

# Step 1: Create an S3 Files file system linked to your bucket
aws s3api create-file-system \
  --bucket my-data-bucket \
  --file-system-name my-fs
 
# Step 2: Get the mount target DNS name
aws s3api describe-file-system \
  --bucket my-data-bucket \
  --file-system-name my-fs \
  --query 'FileSystem.MountTargets[0].DnsName' \
  --output text
 
# Step 3: Mount on your EC2 instance
sudo mount -t nfs4 \
  -o nfsvers=4.2,rsize=1048576,wsize=1048576 \
  fs-mount-target.efs.us-east-1.amazonaws.com:/ \
  /mnt/s3data
 
# Step 4: Use it like any filesystem
ls /mnt/s3data
cp local-file.csv /mnt/s3data/uploads/
cat /mnt/s3data/reports/quarterly.json

Once mounted, every application on that instance can access S3 data through normal file I/O. Python scripts, Java apps, shell scripts, legacy C++ binaries. Nothing needs to know it's talking to S3.

For persistent mounts across reboots, add it to /etc/fstab:

# /etc/fstab entry for S3 Files
fs-mount-target.efs.us-east-1.amazonaws.com:/ /mnt/s3data nfs4 nfsvers=4.2,rsize=1048576,wsize=1048576,_netdev 0 0

Where does S3 Files beat EFS (and where does it not)?

This is the question I've been testing all week. S3 Files isn't a drop-in EFS replacement for every workload, but for specific patterns it's clearly better.

S3 Files wins

ScenarioWhy S3 Files
Large datasets, small active working setPay S3 rates on cold data, file system rates only on hot data
Legacy app migration to S3Zero code changes needed, just mount and go
AI/ML training data pipelinesRead training data as files, store as S3 objects
Agentic AI workloadsShared workspace across multiple compute instances
Multi-service data sharingMultiple EKS pods or Lambda functions reading the same dataset

EFS still wins

ScenarioWhy EFS
All data is hot, constant read/writeEFS avoids the commit delay and S3 request overhead
Sub-second write visibility neededS3 Files has a ~60-second commit lag
Windows workloads (SMB)S3 Files only supports NFS, no SMB
Hard link requirementsS3 Files doesn't support hard links
Bucket exceeds 50 million objectsAWS warns about performance at this scale

Pricing comparison

The pricing math depends entirely on your access pattern:

  • S3 Files cached storage: $0.30/GB-month (only for actively cached data)
  • S3 Files reads (small files): $0.03/GB from cache
  • S3 Files reads (large files, 1MB+): $0 from S3 Files (standard S3 GET charges apply)
  • S3 Files writes: $0.06/GB

Compare that to EFS Performance-optimized at $0.30/GB for standard storage and $0.03/GB for reads. The difference shows up at scale: if you have 10TB in a bucket but only touch 200GB regularly, S3 Files costs a fraction of what an equivalent EFS setup would cost.

What are the gotchas you should know before adopting S3 Files?

I ran into a few things during my initial testing that are worth flagging.

The 60-second commit window is real. If you write a file via NFS and immediately try to read it through the S3 API (using aws s3 cp or a direct GET), it won't be there yet. Your application logic needs to handle this. For workflows that do writes via NFS and reads via S3 API, consider adding a short wait or checking for object existence.

NFS file locks don't protect against S3 API access. If you lock a file through NFS, that lock only applies to other NFS clients. Someone using the S3 API directly can still modify the object. This isn't a bug. It's how the boundary between file system and object store works. But it can bite you if mixed access isn't on your radar.

The 50-million object warning is something to watch. AWS recommends caution when a mounted bucket contains more than 50 million objects. Directory listings and metadata operations can slow down at that scale. If you're dealing with buckets that large, consider using S3 prefixes to scope your mount.

No pNFS, Kerberos, or nconnect support. If your NFS setup depends on parallel NFS, Kerberos authentication, NFSv4 data retention, or the nconnect mount option, those aren't available yet at GA. Standard NFS v4.2 features work fine.

SMB is not supported. Windows workloads that need file system access to S3 still need FSx or a gateway solution.

S3 Files Technical Comparison Architecture

Why did AWS disable SSE-C encryption by default?

This change flew under the radar next to S3 Files, but it affects every new bucket created after April 6, 2026.

SSE-C (Server-Side Encryption with Customer-Provided Keys) lets you bring your own encryption key on every PUT and GET request. S3 encrypts and decrypts using your key but never stores it. The idea is maximum control. The reality is operational risk. Lose the key, lose the data forever. AWS can't recover it for you. There's no "forgot my password" option.

AWS KMS solved this years ago with customer-managed keys (CMKs) that give you full ownership and control, plus key rotation, auditing through CloudTrail, and recovery options. For most workloads, KMS does everything SSE-C does, minus the footgun.

So AWS made SSE-C opt-in instead of opt-out. Here's how the rollout works:

What changes for new buckets

Every new general-purpose S3 bucket created after April 6, 2026 has SSE-C disabled by default. If you try to upload an object with SSE-C headers, you'll get an access denied error unless you explicitly enable SSE-C first.

To enable SSE-C on a new bucket:

# Explicitly allow SSE-C on a new bucket
aws s3api put-bucket-encryption \
  --bucket my-new-bucket \
  --server-side-encryption-configuration '{
    "Rules": [{
      "ApplyServerSideEncryptionByDefault": {
        "SSEAlgorithm": "AES256"
      },
      "BucketKeyEnabled": false
    }],
    "AllowSSEC": true
  }'

What changes for existing buckets

This is the part that might catch people off guard. AWS is also disabling SSE-C on existing buckets that have zero SSE-C encrypted objects. If you created a bucket, never used SSE-C, but your automation code includes SSE-C headers "just in case," those writes will start failing.

Existing buckets that actually contain SSE-C objects? No changes. AWS won't touch those.

Who this affects

If you're using AWS KMS (SSE-KMS) or S3-managed keys (SSE-S3) for encryption, this change does nothing to you. Your buckets already don't use SSE-C.

If you're one of the teams still on SSE-C, you'll want to:

  1. Audit which buckets actually use SSE-C (aws s3api get-bucket-encryption)
  2. Plan a migration to KMS for buckets that don't strictly need SSE-C
  3. Explicitly re-enable SSE-C on new buckets where it's genuinely required

The rollout covers 37 AWS Regions, including GovCloud and China regions, and will complete over the next few weeks.

What do these changes tell us about where S3 is heading?

If I look at S3 Files and the SSE-C default together, they tell the same story: AWS is reducing the reasons you'd reach for anything other than S3.

Need file system access? You used to need EFS plus sync scripts. Now you mount S3 directly. Need encryption with your own keys? You used to reach for SSE-C. Now AWS is steering you toward KMS, which handles key management for you.

S3 now stores over 500 trillion objects and handles roughly 200 million requests per second. It turned 20 years old last month. And instead of letting it coast, AWS gave it the most significant capability upgrade since S3 Intelligent-Tiering launched in 2018.

For my own projects, I'm already replacing two EFS-backed data pipelines with S3 Files mounts. The sync cron jobs are gone. The drift alerts are gone. One mount point, one storage bill, and a 60-second commit window I can easily live with.

If you've been running parallel storage systems just to get file access to your S3 data, this week is a good week to rethink that architecture.

For the full details, see the official S3 Files announcement, the S3 Files product page, and the SSE-C security default announcement.

Keep Reading

Frequently Asked Questions

What is Amazon S3 Files?

Amazon S3 Files is a new S3 capability that lets you mount any S3 bucket as a shared NFS v4.2 file system. It works with EC2, Lambda, EKS, ECS, Fargate, and AWS Batch. Data never leaves S3, but you get full POSIX file semantics with sub-millisecond latency on cached reads.

How does S3 Files compare to EFS?

S3 Files is cheaper for large datasets with a small active working set because you only pay file system rates on cached data. EFS is better when all your data is hot. S3 Files charges $0.30/GB-month for cached storage, and large file reads over 1MB stream directly from S3 at no extra charge.

What is the S3 Files stage and commit model?

S3 Files batches file writes and commits them to S3 roughly every 60 seconds, similar to how Git stages changes. Multiple writes to the same file within that window get aggregated into a single S3 PUT, which reduces request costs and versioning overhead.

Why did AWS disable SSE-C by default on new S3 buckets?

AWS KMS now provides customer-managed encryption keys that are easier to operate. SSE-C required you to supply your own key on every request, and losing that key meant permanent data loss. Starting April 2026, SSE-C is disabled by default on new buckets to prevent accidental use.

Rabinarayan Patra

Rabinarayan Patra

SDE II at Amazon. Previously at ThoughtClan Technologies building systems that processed 700M+ daily transactions. I write about Java, Spring Boot, microservices, and the things I figure out along the way. More about me →

X (Twitter)LinkedIn

Stay in the loop

Get the latest articles on system design, frontend and backend development, and emerging tech trends, straight to your inbox. No spam.