Skip to content
v0.8.38GitHub

Getting startedQuickstart

Quickstart

Install s3ctl, preview a bucket and its scoped credentials with --dry-run, then create them for real.

Applies to v0.8.38stable, released 4 November 2026Release notes →

Every channel tracks the same stable release. Pick the one that fits the machine.

brew tap netspeedy/s3ctl
brew install s3ctl

macOS and Linux. Upgrades arrive with brew upgrade.

Check it’s on your path:

s3ctl --version

Plan a bucket and a key scoped to it. With --dry-run nothing is created; s3ctl only prints what it would do.

s3ctl --bucket app-data --create-scoped-credentials \
--endpoint https://objects.example.com --dry-run
Output
S3 Provisioning Result
======================
Resources: 1
Mode: dry-run
Bucket: app-data
Endpoint: https://objects.example.com
Region: us-east-1
Bucket create planned: yes
Versioning requested: no
Encryption requested: no
Bucket policy planned: no
Scoped credentials planned: yes
IAM user: app-data
Credential policy template: bucket-readwrite
Access key ID: (generated on apply)
Secret access key: (generated on apply)

On OVHcloud the same request goes through the Public Cloud API. There, --region is a Public Cloud region such as UK, GRA or EU-WEST-PAR, not an AWS-style region like us-east-1:

s3ctl --provider ovh --bucket app-data --region UK \
--ovh-service-name PUBLIC_CLOUD_PROJECT_ID --dry-run

When the plan looks right, run it again without --dry-run. For a first real bucket:

  1. Put shared provider settings in ~/.config/s3ctl/config.json. Configuration shows what goes in it.

  2. Run s3ctl --bucket app-data --dry-run --output json.

  3. Check the endpoint, region and credential scope in the plan.

  4. Run s3ctl --bucket app-data --output json.

  5. Store the returned access key and secret somewhere safe.