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 →
Install
Section titled “Install”Every channel tracks the same stable release. Pick the one that fits the machine.
brew tap netspeedy/s3ctlbrew install s3ctlmacOS and Linux. Upgrades arrive with brew upgrade.
curl -fsSL https://netspeedy.github.io/s3ctl/install.sh | bashInstalls into a bin directory you own and clears the macOS quarantine flag, because releases aren't notarised yet.
sudo install -d -m 0755 /etc/apt/keyringscurl -fsSL https://netspeedy.github.io/s3ctl/apt/s3ctl-archive-keyring.gpg \ | sudo tee /etc/apt/keyrings/s3ctl-archive-keyring.gpg >/dev/null
sudo tee /etc/apt/sources.list.d/s3ctl.sources >/dev/null <<'EOF'Types: debURIs: https://netspeedy.github.io/s3ctl/apt/Suites: stableComponents: mainSigned-By: /etc/apt/keyrings/s3ctl-archive-keyring.gpgEOF
sudo apt update && sudo apt install s3ctlPackages are signed with 7E6A 3D77 36C6 E573 16AC 2920 418B 37C1 CF46 53F1.
docker run --rm ghcr.io/netspeedy/s3ctl:v0.8.38Multi-arch image on GHCR. :latest and semver tags are published too.
Check it’s on your path:
s3ctl --versionPreview a bucket
Section titled “Preview a bucket”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-runS3 Provisioning Result======================Resources: 1Mode: dry-run
Bucket: app-dataEndpoint: https://objects.example.comRegion: us-east-1Bucket create planned: yesVersioning requested: noEncryption requested: noBucket policy planned: noScoped credentials planned: yesIAM user: app-dataCredential policy template: bucket-readwriteAccess 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-runCreate it
Section titled “Create it”When the plan looks right, run it again without --dry-run. For a first real bucket:
-
Put shared provider settings in
~/.config/s3ctl/config.json. Configuration shows what goes in it. -
Run
s3ctl --bucket app-data --dry-run --output json. -
Check the endpoint, region and credential scope in the plan.
-
Run
s3ctl --bucket app-data --output json. -
Store the returned access key and secret somewhere safe.