How does keyless AWS onboarding work in Storafleet?
The first objection a company raises about a storage console is simple: we are not pasting long-lived AWS keys into a third-party website. So for AWS we built a connection that needs no keys at all.
The handshake
- The connect wizard asks our API for a setup. The server mints a fresh UUIDv4 ExternalId for that one connection and keeps it in a short-lived
RoleSetuprecord that expires after an hour. - The server builds a CloudFormation quick-create link, so the customer's own AWS console opens with our template and the ExternalId filled in. The stack creates an IAM role that trusts one dedicated Storafleet role, only when the matching ExternalId is presented, with permissions scoped to a single bucket. It can also create the bucket, with versioning, default encryption and a full public-access block switched on.
- The customer pastes the role ARN back. Before anything is saved, the server runs two probes. Assuming the role without the ExternalId must fail; if it succeeds, the trust policy is too open and we refuse the connection. Assuming it with the ExternalId must succeed. Then the usual read, write and delete checks run.
Decisions worth noting
- One ExternalId per connection, not per workspace. A workspace can connect buckets in many different AWS accounts, and each one is its own trust relationship.
- Two-hop role chaining. Our caller identity assumes our own
storafleet-stsrole, which then assumes the customer's role. Customer stacks trust that role, not the caller, so we can rotate our credentials without asking anyone to re-run a stack. - No change to existing code paths. For role connections the bucket's
getS3Config()returns an auto-refreshing temporary-credentials provider, so the roughly 30 places that build an S3 client did not change. - Failures have names:
TRUST_POLICY_TOO_OPEN,EXTERNALID_MISMATCH,RCP_BLOCKEDandROLE_NOT_ASSUMABLE, each mapped to a specific fix in the UI.
A dated caveat: as of late September 2026 the first hop is proven from production, and a full run against a disposable test stack is the next check on our list.


















