Skip to content
liteio

Buckets

Create, list, delete, and configure buckets.

Create

aws s3api create-bucket --bucket my-bucket --profile liteio
{
    "Location": "/my-bucket"
}

If you already own the bucket, this returns 409 BucketAlreadyOwnedByYou in every region. liteio does not reproduce the legacy us-east-1 quirk where the same call returns 200 and resets the ACL. See the compatibility notes for why.

List

aws s3api list-buckets --profile liteio
{
    "Buckets": [
        { "Name": "my-bucket", "CreationDate": "2026-06-10T12:00:00.000Z" }
    ],
    "Owner": { "DisplayName": "admin", "ID": "admin" }
}

Delete

A bucket has to be empty first.

aws s3api delete-bucket --bucket my-bucket --profile liteio

Location

aws s3api get-bucket-location --bucket my-bucket --profile liteio
{ "LocationConstraint": null }

liteio reports null, the value AWS uses for us-east-1, no matter what constraint you passed at creation. There is one namespace, not per-region endpoints.

Versioning

Turn on versioning to keep every version of a key instead of overwriting it.

aws s3api put-bucket-versioning \
  --bucket my-bucket \
  --versioning-configuration Status=Enabled \
  --profile liteio

aws s3api get-bucket-versioning --bucket my-bucket --profile liteio
{ "Status": "Enabled" }

Suspending versioning stops new versions but keeps the ones you have. With versioning on, deleting a key writes a delete marker rather than removing the data, so a delete is reversible.

Lifecycle

Lifecycle rules expire or transition objects on a schedule. Put the rules in a JSON file:

{
    "Rules": [
        {
            "ID": "expire-old-logs",
            "Status": "Enabled",
            "Filter": { "Prefix": "logs/" },
            "Expiration": { "Days": 30 }
        }
    ]
}
aws s3api put-bucket-lifecycle-configuration \
  --bucket my-bucket \
  --lifecycle-configuration file://lifecycle.json \
  --profile liteio

aws s3api get-bucket-lifecycle-configuration --bucket my-bucket --profile liteio

liteio stores and serves lifecycle configuration today. The scanner that enforces expiration on a schedule is on the roadmap, so rules are recorded but not yet acted on automatically. Track it in the compatibility matrix.

Tagging

aws s3api put-bucket-tagging \
  --bucket my-bucket \
  --tagging 'TagSet=[{Key=env,Value=prod},{Key=team,Value=infra}]' \
  --profile liteio

aws s3api get-bucket-tagging    --bucket my-bucket --profile liteio
aws s3api delete-bucket-tagging --bucket my-bucket --profile liteio

Bucket policy

Bucket policies use IAM JSON. This one lets anyone read objects in the bucket:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-bucket/*"
        }
    ]
}
aws s3api put-bucket-policy \
  --bucket my-bucket \
  --policy file://policy.json \
  --profile liteio

aws s3api get-bucket-policy    --bucket my-bucket --profile liteio
aws s3api delete-bucket-policy --bucket my-bucket --profile liteio

The policy language and evaluation rules are covered in IAM.