At a Glance
Credentials
Create a secret with the Impossible Cloud provider type. The auth method isimpossible_cloud_access_key, which requires:
Generate access keys in the Impossible Cloud console under IAM → Access keys. The secret is
shown once, at creation. Keys are IAM credentials, not per-region: the same key pair was used
against
us-east-1, eu-central-2, and eu-west-1 in our verification runs.
A transfer makes these calls, so a scoped IAM policy needs the matching actions: s3:ListBucket
and s3:GetObject on the source; s3:ListBucket, s3:PutObject, and the multipart family
(CreateMultipartUpload, UploadPart, UploadPartCopy, CompleteMultipartUpload,
AbortMultipartUpload, ListMultipartUploads) on the destination; s3:DeleteObject as well
for sync tasks. DataRaven never calls CreateBucket. We verified with an unrestricted key —
a minimum-policy run is listed under what we did not verify.
Location Setup
Pick the bucket’s region from the dropdown and the endpoint is derived automatically. An explicit
endpoint_url overrides the derived value and satisfies the region requirement on its own — the
region is read back out of the hostname, so an endpoint-only location behaves exactly like a
region-only one. One of the two must be set.
Region names are Impossible Cloud’s own and do not map to AWS’s:
eu-west-1 is Amsterdam here and Ireland on AWS; eu-central-2 is Frankfurt here and Zurich on
AWS. Read the bucket’s region off the Impossible Cloud console rather than from habit.
Example:
Provider Quirks
Every bucket answers on one endpoint
Impossible Cloud lists every bucket in the account from every regional endpoint, but a bucket’s data is only reachable on the endpoint of the region it was created in, and that region cannot be changed afterwards. A request for aus-east-1 bucket sent to eu-west-1 is not
redirected — it fails:
REGION_MISMATCH) rather than as a permissions problem. Fix the location’s region; nothing about
the key is wrong.
The same code comes back for a bucket name you do not own. Bucket names are shared across every
Impossible Cloud account (CreateBucket on a taken name answers “The bucket namespace is shared by
all users of the system”), so a location pointed at a stranger’s bucket fails with
IncorrectEndpoint too. The verification message says so.
Bucket names follow the S3 rules, dots included
The rules, asCreateBucket itself states them:
- 3-63 characters
- Lowercase letters, numbers, dots, and hyphens
- Must begin and end with a letter or number
- No
.., and not shaped like an IP address - Shared across all Impossible Cloud accounts
backups.example.com — carries over
unchanged. DataRaven checks the syntactic rules when you
create the location; global uniqueness surfaces at verification as described above. Uppercase is
rejected by the service rather than downcased, so the check runs on the name exactly as typed.
Object keys: everything S3 allows, including what the docs say it rejects
Impossible Cloud’s published limitations say keys may not begin with/, may not contain empty
path segments, may not have a segment longer than 255 bytes, and that an object cannot share its
name with a “folder” (xxx/yyy alongside xxx/yyy/file). In our end-to-end runs none of those
were enforced. PutObject accepted, stored, listed, and served back a leading-slash key, //,
/./, /../, a key ending in /, a 256-byte segment, and conflict next to conflict/child.txt
— along with %, %2F, +, &, #, ?, embedded newlines and tabs, NFC/NFD Unicode twins,
case-only twins, Windows-reserved names, trailing dots and spaces, a 1,024-byte key, and CJK plus
emoji. A 1,025-byte key fails with KeyTooLongError, the only key rejection we found.
Two of the awkward shapes are limited by rclone rather than by Impossible Cloud, on every S3
provider alike:
/./and/../segments cannot be read from any S3 source. rclone cannot form a request for them (“failed to open source object: object not found”), so they fail on every run. Rename them at the source.//(an empty segment) transfers only through a recursive listing. rclone’s per-directory listing discards the entry (“Entry doesn’t belong in directory … (too short) - ignoring”), and the recursiveListRpath copies it. DataRaven setsfast_listfor Impossible Cloud locations partly for this reason — turn it off and those keys are silently skipped.
Checksums verify normally
Single-part uploads get a real content-MD5 ETag, so rclone’s post-copy hash check works and DataRaven leaves it on. In our S3 → Impossible Cloud fixture transfer, 2,097 of 2,099 objects landed and 2,095 verified by hash; the other two matched on size because their source objects were multipart uploads with no rclone-written MD5 to compare against. The two that did not land wereGLACIER and DEEP_ARCHIVE objects, which fail on the source side until restored.
Multipart uploads get the usual <md5-of-part-md5s>-<parts> ETag. rclone stores the whole-object
MD5 in X-Amz-Meta-Md5chksum for its own multipart uploads, so those still verify; objects
assembled by other tools are compared by size.
Impossible Cloud also stores every x-amz-checksum-* algorithm you send — CRC32, CRC32C,
SHA1, SHA256, and CRC64NVME all came back on HeadObject with ChecksumType: FULL_OBJECT —
and it enforces Content-MD5: a PutObject or UploadPart whose MD5 header does not match the
body is rejected with BadDigest.
Standard HTTP headers do not survive — only Content-Type does
This is the most important thing to know before a migration, because nothing reports it: the upload returns200 and the header is simply gone. Verified with PutObject, HeadObject,
GetObject, a presigned GET, and CopyObject with REPLACE:
rclone’s own modification-time metadata (
X-Amz-Meta-Mtime) round-trips, including pre-1970 and
post-2038 timestamps, so incremental runs still skip unchanged objects correctly.
Rejected outright rather than silently ignored
Impossible Cloud mostly says no to what it does not support, which is the behaviour you want from a migration target: a rejected request is visible, a discarded one is not. These are all the response to a plainPutObject:
DataRaven never sets a storage class or SSE header, so none of these affect a transfer. They do
affect what a source-side setting means after migration: an object that was
STANDARD_IA on S3
is STANDARD here.
Multipart, UploadPartCopy, and server-side copy all work
The full multipart surface is implemented, and we exercised it hard: a 5.08 GiB object assembled
server-side from 52 UploadPartCopy calls, a three-part upload with non-uniform 6 + 5 + 1 MiB
parts, and an abandoned upload that ListMultipartUploads reports correctly, with the prefix
parameter honoured. Parts must be at least 5 MiB (EntityTooSmall otherwise), the S3 standard.
Server-side CopyObject works between buckets in the same region, so an Impossible Cloud →
Impossible Cloud task within one region copies without moving bytes through the worker — 31 test
objects copied server-side in about a second. Across regions the copy streams through the
worker, because rclone will not attempt server-side copies between remotes with different
endpoints: our us-east-1 → eu-central-2 fixture run moved all 5.5 GiB through the client.
Parts from a multipart upload that was interrupted and never completed or aborted are not
visible in listings but do occupy storage. Impossible Cloud has no lifecycle rules to expire
them (
GetBucketLifecycleConfiguration is NotImplemented), so clean up with
aws s3api abort-multipart-upload or rclone cleanup after an interrupted large-object
transfer.Versioning and object lock
Versioning is a per-bucket switch that can be enabled, suspended, and re-enabled. On a versioned destination:- every overwrite creates a new version and every delete leaves a delete marker — including the
deletes a
synctask performs; - an unchanged object on a re-run is skipped, not re-written, so scheduled tasks do not pile up identical versions;
- a transfer reads and writes current versions only. Version history on the source does not carry over.
Performance and Rate Limits
Impossible Cloud publishes no request rate limit and charges nothing per request. We looked for a ceiling and did not find one:- Small objects, one client,
us-east-1: 1,500 objects attransfers16 / 32 / 64 ran at 93 / 187 / 250 objects per second; 10,000 objects at 64 ran at 357 objects/s and at 128 at 666 objects/s. Zero errors and noSlowDown,429, or503at any setting. Listing the resulting 24,500 objects took 3 seconds; deleting them took 71 seconds. - Large objects: the fixture transfers (5.5 GiB, 2,100 objects, three regions) were bounded by our client’s uplink, not by the service. Server-side copy within a region is effectively free.
- DataRaven defaults to
transfers: 32,checkers: 16for tasks touching an Impossible Cloud location. That is nowhere near what the service accepted; it is a conservative starting point that leaves headroom for the remote on the other side of the transfer, which may well have a limit of its own. Raise it in the task’s rclone configuration if the peer can take it. (Plan limits still apply: Free-tier executions run withtransfers: 1.) There is notpslimit, deliberately — there is no request budget to protect. - HTTP/1.1 only. The endpoints do not negotiate HTTP/2, so each request owns its connection
and a server-side connection close costs at most one retryable request. No
disable_http2setting is needed. s3_no_check_bucketis on by default, and not becauseCreateBucketis unavailable — it works with an ordinary key. With the check on, rclone would create a mistyped destination bucket name on the spot, or collide with someone else’s bucket of that name. Off, a typo fails verification instead.
What Transfers — and What Doesn’t
Impossible Cloud stores object data,Content-Type, user metadata, object tags, and rclone’s
modification-time metadata faithfully. Migrating from S3:
CopyObject and UploadPartCopy are supported within a region, along with range requests and
presigned URLs (rclone link works). DeleteObjects is listed as supported by Impossible Cloud;
rclone issues one DeleteObject per key regardless.
What We Did Not Verify
Every claim above comes from a run against liveus-east-1, eu-central-2, and eu-west-1
buckets on 2026-09-04 with rclone 1.75.0. These did not get a run and are stated on Impossible
Cloud’s documentation alone:
- A transfer with a minimum-privilege IAM policy — we used an unrestricted key.
- A transfer into an object-locked bucket, and what a
syncdelete does there. - The 50 TiB object ceiling and the maximum part count — our largest object was 5.08 GiB in 52 parts.
- Behaviour under the fair-use egress threshold — our egress stayed far below stored volume.
- The four regions we have no bucket in:
eu-west-2,eu-west-3,eu-east-1,eu-north-1.
Importing from rclone.conf
Impossible Cloud remotes appear inrclone.conf as type = s3 with
provider = ImpossibleCloud. rclone’s own config wizard writes the endpoint without a scheme
(endpoint = eu-central-2.storage.impossibleapi.net) and often no region; the importer accepts
both and recovers the region from the endpoint hostname. See the
rclone import guide.