Goal
Give each workload the minimum S2 access it needs and understand how the platform enforces boundaries.Prerequisites
- An existing S2 bucket
- Permission to manage the bucket through the StackShift API
Workflow
1
Keep buckets private unless every object in the bucket is intended for unauthenticated reads.
2
Issue a separate labeled access key for each workload or deployment environment.
3
Store the one-time secret in the workload secret manager.
4
Rotate by creating a replacement key, deploying it, verifying use, and revoking the old key.
5
Choose the bucket encryption default that matches the workload data policy.
6
Track object bytes and counts against the owning customer plan.
Two authentication planes
- Control-plane operations use a StackShift bearer token to create, inspect, delete, and manage keys for buckets owned by that tenant.
- Object operations use S3 Signature Version 4 with a bucket-scoped access key and secret.
- Storage-service and recovery credentials remain platform-internal and are never exposed as customer bucket credentials.
Credential lifecycle
The initial key is created with the bucket. Additional keys can be labeled, listed, and revoked through the bucket management API. Only the access key ID is listable; the secret is shown once at creation. Use overlapping rotation: create a new key, deploy it, observe successful traffic, then revoke the old key. Revocation is the recovery action for a suspected leak.Tenant and bucket isolation
The control plane authorizes bucket management against the authenticated owner. The S3 gateway resolves the access key to one principal and rejects operations outside that key’s bucket. Object metadata and quota accounting remain tied to the owning tenant.Server-side encryption
none stores new objects without the S2 encryption layer. sse-s2 encrypts new objects with StackShift-managed local key material. sse-kms uses StackShift’s platform KMS key for envelope encryption.
Customers select the mode but never provide AWS credentials or choose an arbitrary KMS key. When sse-kms is active, the bucket response exposes the platform key identifier for auditability. If the platform KMS integration is unavailable, the settings update and KMS-backed writes fail closed.
Changing the bucket default affects new writes. Existing objects keep the encryption mode and key metadata recorded when they were written; changing the setting does not rewrite historical objects.
Enable platform-managed KMS with the CLI
Visibility, quotas, and rate limits
- Private is the default and requires a valid signature for reads and writes.
- Public visibility permits unauthenticated GET requests for object keys; mutations still require a valid bucket key.
- Customer-plan limits and optional per-bucket quotas are enforced independently.
- Requests above the gateway allowance return
429 SlowDownwithRetry-After: 60. - Quota exhaustion returns an S3
QuotaExceedederror; delete unused objects or move to a plan with more storage.
Expected result
A leaked workload key is limited to one bucket and can be rotated without changing the bucket or other workloads.
Common failures
Related guides
Create a bucket and connect an S3 client
Create an S2 bucket, capture its one-time credentials, and verify object operations with the AWS CLI.
S3 operations and presigned access
Use the supported S3 operations, conditional requests, object metadata, tags, multipart uploads, and presigned URLs.
Versioning, lifecycle, and retention
Protect object history, restore earlier versions, automate aging policies, and prevent protected objects from being deleted too early.
Security and connections
Manage password changes, active sessions, GitHub app installs, and other connected-account behavior from the settings area.