Connecting Cloudflare R2
Add R2 buckets with an S3-compatible API token and your Cloudflare account ID, and what differs from S3 once they're connected.
What you need
R2 buckets are a Business feature, alongside Google Cloud Storage buckets and Azure migrations.
R2 speaks the S3 API, so once it's connected it behaves like any other bucket in BucketPilot — browse, search, index, back up, migrate. Two things are specific to R2 and both are asked for on the form:
- •An S3-compatible API token. In the Cloudflare dashboard: R2 → Manage API tokens → Create token. Use the S3-compatible Access Key ID and Secret. (Cloudflare's own instructions)
- •Your Cloudflare account ID. R2 gives every account its own endpoint —
https://<account id>.r2.cloudflarestorage.com— so without it there is no host to talk to. It's on the R2 overview page in the Cloudflare dashboard.
There is no region to choose. R2 is a single global namespace, and BucketPilot sends the auto region string R2 expects.
Adding the credential and the buckets
- 1.Credentials → Add credential, and pick Cloudflare R2.
- 2.Paste the access key ID, the secret, and your Cloudflare account ID.
- 3.Test it. A failure here names what went wrong — a wrong account ID looks different from a wrong key, because the first one can't resolve a host and the second is refused by one.
- 4.Discover buckets lists everything the credential can see, and you import the ones you want in one click. You can also add a bucket by name if you'd rather not grant listing.
A credential can be re-tested at any time from its card, and the result stays there rather than disappearing.
What differs from S3
None of this stops you using R2 — it's what to expect from the parts of BucketPilot that assume S3.
| On R2 | |
|---|---|
| Object versioning | Not available. Nothing in BucketPilot can restore a previous version of an object here, because there isn't one to restore — deletes and overwrites are final. Keep a backup job to a versioned bucket if you need that. |
| Lifecycle rules | Supported — expiration, cleaning up incomplete multipart uploads, and one transition (to STANDARD_IA). Tag filters are not honoured — Cloudflare R2 accepts a rule containing one and then ignores the filter, so BucketPilot doesn't offer it. |
| Per-object storage class | Supported — STANDARD and STANDARD_IA. You can see which class each object is in and change it in place, which matters because Cloudflare R2 prices them differently. |
| Bucket policies | Not available. The policy editor is an S3 feature; manage access in the Cloudflare dashboard. |
| CORS | Editable from BucketPilot. |
| Object tags | Stored by BucketPilot, not on the object. Cloudflare R2 answers the tagging calls with not implemented, so tags you add here live in our index — they are searchable and they survive, but a tool reading the bucket directly won't see them. |
| Inventory-based indexing | Not available — indexing is always a live scan. Fine for most buckets; see Indexing & search for what that means on a very large one. |
| Cost figures | Storage size is measured from the index, and BucketPilot does not price Cloudflare R2 for you — there are no published rates it can apply the way it does for S3. The size and object counts are real; the money column is not shown. |
The zero-egress pricing that makes R2 attractive is also why it's a common backup destination: a restore doesn't cost you bandwidth. Backups & migration →