DocsAWS 101BlogServices

S3

Object storage with bucket-scoped sub-resources — policies, versioning, lifecycle, CORS, ACLs, notifications, per-version object lock, access points, Multi-Region Access Points, Object Lambda, range requests, and Glacier / Deep Archive restore (RestoreObject).

REST-XML multi-tenant 104 operations

Quick start

import boto3
s3 = boto3.client("s3", endpoint_url="http://localhost:4566",
                  region_name="us-east-1",
                  aws_access_key_id="test", aws_secret_access_key="test")
s3.create_bucket(Bucket="demo")
s3.put_object(Bucket="demo", Key="hi.txt", Body=b"hello")
print(s3.get_object(Bucket="demo", Key="hi.txt")["Body"].read())

Supported operations

104 operations exposed by this service as of MiniStack 1.5.31. Extracted directly from the handler dispatch in the source module.

AbortMultipartUpload CompleteMultipartUpload CopyObject CreateAccessPoint CreateAccessPointForObjectLambda CreateBucket CreateMultipartUpload CreateMultiRegionAccessPoint DeleteAccessPoint DeleteAccessPointForObjectLambda DeleteAccessPointPolicy DeleteAccessPointPolicyForObjectLambda DeleteBucket DeleteBucketCors DeleteBucketEncryption DeleteBucketLifecycle DeleteBucketOwnershipControls DeleteBucketPolicy DeleteBucketReplication DeleteBucketTagging DeleteBucketWebsite DeleteMultiRegionAccessPoint DeleteObject DeleteObjectAnnotation DeleteObjects DeleteObjectTagging DeletePublicAccessBlock DescribeMultiRegionAccessPointOperation GetAccessPoint GetAccessPointConfigurationForObjectLambda GetAccessPointForObjectLambda GetAccessPointPolicy GetAccessPointPolicyForObjectLambda GetBucketAccelerateConfiguration GetBucketAcl GetBucketCors GetBucketEncryption GetBucketLifecycleConfiguration GetBucketLocation GetBucketLogging GetBucketNotificationConfiguration GetBucketOwnershipControls GetBucketPolicy GetBucketReplication GetBucketRequestPayment GetBucketTagging GetBucketVersioning GetBucketWebsite GetMultiRegionAccessPoint GetMultiRegionAccessPointPolicy GetMultiRegionAccessPointRoutes GetObject GetObjectAcl GetObjectAnnotation GetObjectAttributes GetObjectLegalHold GetObjectLockConfiguration GetObjectRetention GetObjectTagging GetPublicAccessBlock HeadBucket HeadObject ListAccessPoints ListAccessPointsForObjectLambda ListBuckets ListMultipartUploads ListMultiRegionAccessPoints ListObjectAnnotations ListObjects ListObjectsV2 ListObjectVersions ListParts PostObject PutAccessPointConfigurationForObjectLambda PutAccessPointPolicy PutAccessPointPolicyForObjectLambda PutBucketAccelerateConfiguration PutBucketAcl PutBucketCors PutBucketEncryption PutBucketLifecycleConfiguration PutBucketLogging PutBucketNotificationConfiguration PutBucketOwnershipControls PutBucketPolicy PutBucketReplication PutBucketRequestPayment PutBucketTagging PutBucketVersioning PutBucketWebsite PutMultiRegionAccessPointPolicy PutObject PutObjectAcl PutObjectAnnotation PutObjectLegalHold PutObjectLockConfiguration PutObjectRetention PutObjectTagging PutPublicAccessBlock RestoreObject SubmitMultiRegionAccessPointRoutes UploadPart UploadPartCopy WriteGetObjectResponse

CloudFormation

The CloudFormation engine provisions these resource types via this service:

AWS::S3::AccessPoint AWS::S3::Bucket AWS::S3::BucketPolicy AWS::S3::MultiRegionAccessPoint AWS::S3ObjectLambda::AccessPoint AWS::S3ObjectLambda::AccessPointPolicy

See CloudFormation engine for intrinsic support and lifecycle details.

Known limitations

  • Bucket names are global, as on AWS, and each bucket keeps its home region: a request signed for another region gets 301 PermanentRedirect with x-amz-bucket-region.
  • SSE headers are validated, stored and echoed (including SSE-C key/MD5 checks on reads), but no real cryptography runs — object bytes are stored as sent.
  • Replication delivers: a write matching an Enabled rule's prefix lands in the destination bucket, the source answers x-amz-replication-status COMPLETED (FAILED when the destination is unusable) and the replica REPLICA. Delete markers replicate for V1 rules and for V2 rules with DeleteMarkerReplication enabled.
  • Notification configuration accepted; events are dispatched to SQS, SNS, Lambda, and (with EventBridgeConfiguration) EventBridge with AWS's documented detail-types.
  • Glacier / Deep Archive restore is emulated: an object in GLACIER or DEEP_ARCHIVE is unreadable (InvalidObjectState) until RestoreObject completes, which happens in seconds rather than AWS's hours; GLACIER_IR stays readable.

Source

  • ministack/services/s3.py

Read the source to verify the ops list above — dispatch tables and handler functions are the ground truth.