Back

Blog details

What Is S3 Object Storage? How It Works, Explained

AIOZ Network
9 min readAugust 27, 2026
aioz-storage

S3 object storage is a service that keeps data as objects, each named by a key inside a bucket and reached over HTTP. Amazon launched it in 2006, and dozens of other providers copy its API. This guide covers how it works, how the S3 API behaves, and what "S3-compatible" means for you.

TL;DR:

  • S3 object storage stores data as objects, each identified by a key inside a bucket, not as files in a directory tree or blocks on a disk.
  • You talk to it with plain HTTP requests (PUT to write, GET to read, DELETE to remove), and the request carries a signature made from your access keys.
  • "S3-compatible" means a provider accepts the same requests, so S3 tools and SDKs work with a changed endpoint. AIOZ Storage is one such provider.

What Is S3 Object Storage?

Amazon Simple Storage Service, or S3, is the AWS service behind the name, which AWS describes as "an object storage service that offers industry-leading scalability, data availability, security, and performance." It launched on March 14, 2006, as the first generally available AWS service, and today it stores more than 500 trillion objects, according to AWS's 20th-anniversary retrospective.

"S3 object storage" now means two things, the AWS service and the model and API that other providers copy. When you read about an "S3 bucket" on a non-AWS provider, the second meaning applies.

AWS lists the use cases as data lakes, websites, mobile applications, backup and restore, archive, enterprise applications, IoT devices, and big data analytics.

How S3 Object Storage Works: Buckets, Objects, and Keys

AWS puts the model plainly: "An object is a file and any metadata that describes the file. A bucket is a container for objects." Every object has a key, which is a unique name inside its bucket, and AWS describes S3 as "a basic data map between 'bucket + key + version' and the object itself."

A few details about buckets, keys, and metadata matter in practice when you design around them:

  • Bucket names are global. On AWS, a bucket name must be unique across all accounts in a partition. You pick the name and the region when you create the bucket, and you cannot change either later.
  • Keys are strings, not paths. A key like photos/2026/puppy.jpg looks like a file path, but the storage underneath is flat. Tools that show folders are splitting the key on its slashes for display.
  • Objects carry metadata. That includes defaults such as the last-modified date and standard HTTP headers such as Content-Type. You can add your own at upload time.
  • Versioning is optional. If you turn it on, an overwrite or delete keeps the older version, and each version gets its own ID.

The flat design is a deliberate simplification: a client asks for an object by bucket and key and gets back bytes and metadata, without reasoning about directory permissions or symlinks. That is a big reason the API is so easy to implement. Naming data by bucket and key is location addressing, the opposite of content addressing in IPFS, where a hash of the data is its name.

How Does the S3 API Work?

The S3 API is a REST interface over HTTP, and AWS says you can use "any toolkit that supports HTTP" to send standard requests "to create, fetch, and delete buckets and objects." Three things decide how a request looks: the method, the address, and the signature.

The method says what to do: PUT uploads an object, GET downloads it, and DELETE removes it, while a GET on a bucket lists its objects.

The address says where, and AWS supports two URL styles. In virtual-hosted style the bucket is part of the hostname: https://amzn-s3-demo-bucket1.s3.us-west-2.amazonaws.com/puppy.jpg. In path style the bucket comes first in the path: https://s3.us-west-2.amazonaws.com/amzn-s3-demo-bucket1/puppy.jpg. AWS supports both and has said path style will be discontinued in the future, though it delayed that plan in 2020.

The signature says who you are, since every interaction is either authenticated or anonymous. With an AWS SDK, the library computes the signature from the keys you give it. If you send raw REST calls, AWS says you "must write the code to compute the signature and add it to the request."

You can see all three parts in one request, and this table lists the calls that AIOZ's own Postman documentation shows, all in path style and all sent to the Host s3.aiozstorage.network:

What you doHTTP request
List bucketsGET /
List objectsGET /bucket-name
Upload an objectPUT /bucket-name/object-name
Download an objectGET /bucket-name/object-name
Delete an objectDELETE /bucket-name/object-name
Delete several objectsPOST /?delete
Copy an objectPUT /dest-bucket-name/dest-object-name with an x-amz-copy-source header
Anatomy of one S3 request: the PUT method stores an object, my-bucket is the bucket, photos/puppy.jpg is the key, s3.aiozstorage.network is the endpoint, and AWS4-HMAC-SHA256 is the signature made from your access keys

Most people never write these requests by hand, because an SDK builds them for you. Here is the same upload in Python with boto3, set up the way AIOZ's Python guide sets it up, plus two checksum settings:

import boto3
from botocore.config import Config

s3 = boto3.client(
    "s3",
    region_name="us-east-1",
    aws_access_key_id="YOUR_ACCESS_KEY_ID",
    aws_secret_access_key="YOUR_SECRET_ACCESS_KEY",
    endpoint_url="https://s3.aiozstorage.network",
    config=Config(
        request_checksum_calculation="when_required",
        response_checksum_validation="when_required",
        s3={"addressing_style": "path"},
    ),
)

with open("puppy.jpg", "rb") as f:
    s3.put_object(Bucket="my-bucket", Key="photos/puppy.jpg", Body=f)

We checked what this call builds without sending it. boto3 produces PUT https://s3.aiozstorage.network/my-bucket/photos/puppy.jpg and signs it with an Authorization header that starts with AWS4-HMAC-SHA256. That is AWS Signature Version 4, the same scheme S3 itself uses.

The two when_required settings are there because AIOZ Storage needs a Content-Length header on uploads. Since 1.36.0, boto3 otherwise sends uploads chunked without one (see AWS's data integrity settings and the botocore Config reference). Path-style URLs are required too, because bucket subdomains don't resolve. We confirmed both on Oct 19, 2026; a full upload with real keys is not tested yet.

Upload Size and Consistency

Two behaviors from AWS's docs shape how you use the API: a single PUT can upload an object up to 5 GB, and larger objects need multipart upload. AWS documents multipart upload for objects from 5 MB to 50 TB, with parts sent in any order and in parallel.

On consistency, AWS says S3 provides "strong read-after-write consistency for PUT and DELETE requests" in all regions. If a PUT succeeds, the next GET or LIST returns the new data. Writes to a single key are atomic, so a reader gets the old object or the new one, never half of each.

S3 does not lock an object for concurrent writers: if two PUT requests hit the same key, the latest timestamp wins. Updates are also per key, so you cannot make one key's update depend on another's without building that into your application.

Object Storage vs Block Storage vs File Storage

The three models fit three jobs, and AWS's own comparison draws the lines clearly:

ModelHow data is storedBest for
ObjectWhole objects with metadata, found by keyLarge amounts of unstructured data: backups, media, datasets
BlockEqual-sized blocksLow-latency access, such as a database disk or a VM boot volume
FileA hierarchy of directories and foldersShared access to one file tree over SMB or NFS

None of them is strictly better, because object storage gives up a real directory tree and block-level speed in return for durability, near-unlimited scale, and a simple HTTP API. That trade suits data you write once and read many times, and it does not suit a database that needs millisecond reads.

Storage Classes: Paying for How Often You Read

S3 is not one price tier, because AWS offers classes built around access patterns. S3 Standard is for frequent access, and S3 Standard-IA and One Zone-IA are for infrequent access, while three Glacier classes cover archives. S3 Intelligent-Tiering moves data between tiers as your access pattern changes, and S3 Express One Zone targets single-digit millisecond latency.

If you want the trade-offs, our guide to hot vs cold storage tiers covers when each tier makes sense.

What Does "S3-Compatible" Mean?

It means a provider accepts the same REST requests, so software written for Amazon S3 works against it. That includes an SDK, a CLI, or a script that calls PutObject and GetObject. Usually you change only the endpoint URL and the credentials.

The claim is real, but it is rarely a perfect match. Most providers implement the common operations faithfully: put, get, list, delete, and metadata. They differ on AWS extras such as S3 Object Lambda or S3 Tables, so before you build on an edge case, test it against the provider you plan to use.

A short checklist helps you test a provider before you commit to it:

  1. Addressing style. Does the provider need path style, or does it support virtual-hosted style too?
  2. Signing. Does it accept the signature your SDK produces, and with which service name and region?
  3. Large uploads. Does multipart upload work, and with which size limits?
  4. Features you rely on. Test versioning, object lock, lifecycle rules, and replication one by one, because support varies by provider.

S3 Object Storage on AIOZ Storage

AIOZ Storage is an S3-compatible object store that uses the same bucket, key, and object model and the same REST API described above. The difference is where the data lives: on AIOZ DePIN, a decentralized network of independently operated nodes, instead of a company-owned data center fleet.

What you need to connect is short, and it comes down to four settings:

  • Endpoint: https://s3.aiozstorage.network. The AWS CLI uses it through --endpoint-url.
  • Credentials: an access key ID and secret access key from an access grant in the AIOZ Storage dashboard.
  • Addressing style: AIOZ's SDK guides set path style, for example addressing_style set to path in Python and forcePathStyle: true in JavaScript.
  • Signing: AIOZ's Postman guide selects AWS Signature with service name s3 and region us-east-1.

For where AIOZ behavior differs from AWS, see the S3 compatibility page in AIOZ's docs and our guide to how AIOZ Storage works and how S3-compatible it is. If you want to try it, the CLI quickstart takes a few minutes.

Frequently Asked Questions

What is S3 object storage in simple terms?
It is a service where you store data as objects, each identified by a key inside a bucket, and reach it over HTTP. You upload with PUT, download with GET, and delete with DELETE.

What is the difference between an object, a bucket, and a key?
A bucket is a container for objects, an object is your data plus its metadata, and a key is the object's unique name inside its bucket.

Does S3 have real folders?
No. Keys can contain slashes and look like paths, but the storage is flat, and tools that show folders just split the key string for display.

How does the S3 API authenticate you?
Each request is either anonymous or signed. With an SDK, the library computes the signature from your access key and secret key, and with raw REST calls you compute it yourself.

What is the largest file you can upload to S3?
A single PUT handles up to 5 GB, and for larger files you use multipart upload, which AWS documents for objects from 5 MB to 50 TB.

How is object storage different from block storage?
Block storage splits data into fixed-size blocks for fast, low-latency access, as in a database disk. Object storage keeps whole objects with metadata and is built for scale and durability.

What does S3-compatible mean?
The provider accepts the same REST requests as Amazon S3, so existing S3 tools and code work with a different endpoint and credentials.

Is AIOZ Storage compatible with Amazon S3?
Yes. You reach it with the same SDKs and CLI tools, pointed at https://s3.aiozstorage.network, and AIOZ's guides use path-style requests, so set that in your client.

References

We only send updates when meaningful changes ship, and you can unsubscribe anytime

Related Content

blog thumbnail

What Is Distributed Storage? How It Works, With Examples

Distributed storage keeps data on many independent nodes that act as one system. See how it works, replication vs erasure coding, its types and trade-offs.

aioz-storage
6 min readNovember 03, 2026
blog thumbnail

What Are Egress Fees? How Download Charges Work in Storage

Egress fees are charges for data leaving a storage provider's network. See what triggers them, how to estimate them, and what AIOZ Storage's docs say.

aioz-storage
6 min readOctober 30, 2026
blog thumbnail

Object Storage Vector Database: Where AIOZ Storage Fits

An object storage vector database keeps vectors in the storage layer, not a cluster. See how it differs, when to pick it, and where AIOZ Storage fits in.

aioz-storage
10 min readOctober 27, 2026
blog thumbnail

AIOZ Storage Vector Database Pricing: What You Pay For

AIOZ Storage vector database pricing line by line: upload, storage, queries, data searched and data returned, with a worked monthly example you can reuse.

aioz-storage
5 min readOctober 23, 2026
blog thumbnail

How to Create a Bucket and Upload a File on AIOZ Storage

Create a bucket and upload a file on AIOZ Storage in five steps: sign up, set a passphrase, add credits, and upload. Plus what the passphrase cannot recover.

aioz-storage
5 min readOctober 20, 2026
blog thumbnail

AIOZ Storage Rate Limit: Working Within 100 Requests/s

The AIOZ Storage rate limit is 100 requests per second. See what the docs do and don't say, and how to stay under it with boto3 retries and a limiter.

aioz-storage
7 min readOctober 16, 2026