Clone
71
Amazon S3 API
Chris Lu edited this page 2026-05-19 17:58:53 -07:00

To be compatible with Amazon S3 API, a separate "weed s3" command is provided. This provides much faster access when reading or writing files, compared to operating files on the cloud.

How It Works

weed s3 starts a stateless gateway server to bridge the Amazon S3 API to SeaweedFS Filer. For convenience, weed server -s3 starts a master, a volume server, a filer, and the S3 gateway. weed filer -s3 can start a filer and the S3 gateway together also.

Each bucket is stored in one collection, and mapped to folder /buckets/<bucket_name> by default. A bucket can be deleted efficiently by deleting the whole collection.

From version 3.51 the collection name is filerGroup_bucketname or bucketname if filer group is not set.

Support Many Buckets

Each bucket has its own collection. Usually one collection uses 7 volumes, where each volume is 30GB by default. So if you want to create multiple buckets, you may run out of volumes very quickly unless you have a large disk.

Try to keep the volume size low. For example,

weed master -volumeSizeLimitMB=1024

In addition, you can also configure the per bucket storage this way in weed shell:

fs.configure -locationPrefix=/buckets/ -volumeGrowthCount=1 -apply

This will add 1 physical volume when existing volumes are full. If using replication, you will need to add more volumes, so that it is a multiple of the number of replicas:

fs.configure -locationPrefix=/buckets/ -replication=001 -volumeGrowthCount=2 -apply

See Path Specific Configuration

Multiple S3 Nodes

You can start multiple S3 instances pointing to a filer for horizontal scaling. The easiest way is to run filer together with S3:

weed filer -s3

Supported APIs

The following tables list all standard AWS S3 API operations and their support status in SeaweedFS, using official AWS API operation names.

For IAM action names used in bucket policies (e.g., s3:ListBucketMultipartUploads), see S3 Bucket Policies.

Bucket Operations

API Operation Supported Notes
CreateBucket Yes
DeleteBucket Yes Deletes the entire collection
HeadBucket Yes
ListBuckets Yes
ListDirectoryBuckets No S3 Express One Zone

Bucket Configuration

API Operation Supported Notes
GetBucketAcl Yes
PutBucketAcl Yes
GetBucketCors Yes See S3 CORS
PutBucketCors Yes
DeleteBucketCors Yes
GetBucketEncryption Yes See Server-Side Encryption
PutBucketEncryption Yes
DeleteBucketEncryption Yes
GetBucketLifecycleConfiguration Yes See S3 Lifecycle
PutBucketLifecycleConfiguration Yes Transition rules not supported
DeleteBucketLifecycle Yes
GetBucketLocation Yes Returns default location
GetBucketOwnershipControls Yes
PutBucketOwnershipControls Yes
DeleteBucketOwnershipControls Yes
GetBucketPolicy Yes See S3 Bucket Policies
PutBucketPolicy Yes
DeleteBucketPolicy Yes
GetBucketRequestPayment Yes Always returns BucketOwner
GetBucketTagging Yes
PutBucketTagging Yes
DeleteBucketTagging Yes
GetBucketVersioning Yes See S3 Object Versioning
PutBucketVersioning Yes
GetObjectLockConfiguration Yes See S3 Object Lock and Retention
PutObjectLockConfiguration Yes
GetPublicAccessBlock Yes
PutPublicAccessBlock Yes
DeletePublicAccessBlock Yes
GetBucketAccelerateConfiguration Yes Always returns Suspended
GetBucketAnalyticsConfiguration Yes Stub: returns NoSuchConfiguration
ListBucketAnalyticsConfigurations Yes Stub: returns an empty list
GetBucketIntelligentTieringConfiguration Yes Stub: returns NoSuchConfiguration
ListBucketIntelligentTieringConfigurations Yes Stub: returns an empty list
GetBucketInventoryConfiguration Yes Stub: returns NoSuchConfiguration
ListBucketInventoryConfigurations Yes Stub: returns an empty list
GetBucketLogging Yes Always returns an empty BucketLoggingStatus
GetBucketMetricsConfiguration Yes Stub: returns NoSuchConfiguration
ListBucketMetricsConfigurations Yes Stub: returns an empty list
GetBucketPolicyStatus Yes Computes IsPublic from the bucket policy
PutBucketRequestPayment Yes Accepts only Payer=BucketOwner
PutBucketAccelerateConfiguration No
PutBucketAnalyticsConfiguration No
DeleteBucketAnalyticsConfiguration No
PutBucketIntelligentTieringConfiguration No
DeleteBucketIntelligentTieringConfiguration No
PutBucketInventoryConfiguration No
DeleteBucketInventoryConfiguration No
PutBucketLogging No
PutBucketMetricsConfiguration No
DeleteBucketMetricsConfiguration No
GetBucketNotificationConfiguration No
PutBucketNotificationConfiguration No
GetBucketReplication No
PutBucketReplication No
DeleteBucketReplication No
GetBucketWebsite No
PutBucketWebsite No
DeleteBucketWebsite No

Object Operations

API Operation Supported Notes
CopyObject Yes Supports version ID, encryption, metadata directive
DeleteObject Yes Supports version ID; also deletes folders
DeleteObjects Yes Multi-object delete
GetObject Yes Supports range requests, conditional headers, SSE, user metadata
GetObjectAcl Yes
GetObjectAttributes Yes
GetObjectLegalHold Yes See S3 Object Lock and Retention
GetObjectRetention Yes
GetObjectTagging Yes
HeadObject Yes Returns user metadata, encryption info
ListObjects Yes V1 (legacy)
ListObjectsV2 Yes
ListObjectVersions Yes See S3 Object Versioning
PostObject Yes Browser-based form uploads via POST policy
PutObject Yes Supports SSE, user metadata (x-amz-meta-*), conditional headers
PutObjectAcl Yes
PutObjectLegalHold Yes
PutObjectRetention Yes
PutObjectTagging Yes
DeleteObjectTagging Yes
GetObjectTorrent No
RenameObject No
RestoreObject No
SelectObjectContent No
WriteGetObjectResponse No S3 Object Lambda

Multipart Upload Operations

API Operation Supported Notes
CreateMultipartUpload Yes IAM action: s3:CreateMultipartUpload
UploadPart Yes IAM action: s3:UploadPart
UploadPartCopy Yes
CompleteMultipartUpload Yes IAM action: s3:CompleteMultipartUpload
AbortMultipartUpload Yes IAM action: s3:AbortMultipartUpload
ListMultipartUploads Yes IAM action: s3:ListBucketMultipartUploads
ListParts Yes IAM action: s3:ListMultipartUploadParts

All multipart operations are implicitly allowed when s3:PutObject is granted. See S3 Bucket Policies#multipart-upload-permission-inheritance.

Additional APIs

SeaweedFS also implements these related AWS service APIs on the same S3 endpoint:

Service Operations Documentation
Security Token Service (STS) AssumeRole, AssumeRoleWithWebIdentity, AssumeRoleWithLDAPIdentity, GetFederationToken, GetCallerIdentity OIDC Integration
IAM API User, policy, access key, and group management Amazon IAM API, AWS IAM CLI
S3 Tables Table bucket, namespace, and table management (Apache Iceberg) S3 Table Bucket

Feature Differences

Feature SeaweedFS Amazon S3
Multi byte ranges reads Yes No
DeleteObject deletes a folder Yes No
Same path for both a file and a folder No Yes
Allows more than "/" as a delimiter No Yes
Object Versioning Yes Yes
MFA Delete for versioning No Yes
Server-Side Encryption (SSE-KMS) Yes Yes
Server-Side Encryption (SSE-C) Yes Yes
Server-Side Encryption (SSE-S3) Yes Yes
KMS Providers (Multi-cloud) Yes No
Conditional Headers (All operations) Yes Yes
Range requests with SSE Yes Yes
Presigned URLs Yes Yes

Empty Folders

SeaweedFS has directories while AWS S3 only has objects with "fake" directories. In AWS S3, if the last file is deleted in a directory, the directory will disappear also.

To be consistent with AWS S3, SeaweedFS automatically cleans up empty folders asynchronously after file deletions.

Related Pages

Configuration & Authentication

Security & Policies

Encryption

Features

S3 Tables & Iceberg

Deployment & Operations

Client Tools