A presigned URL is a regular HTTPS URL with an embedded signature that grants temporary access to a single object — no Access Key required by the recipient.
Use presigned URLs to:
- Let a user download a private object from a browser, without giving them credentials.
- Let a client upload a file directly to your bucket, bypassing your backend.
- Hand a third-party system temporary access to a single file.
The URL stops working when its expiry passes.
Before you begin
- A bucket (Create a bucket)
- An API token with at least Object Read & Write scope on the target bucket — used to sign URLs
The S3 endpoint for your project is https://{project_id}.blob.ibeestorage.com.
Generate a download URL with the AWS CLI
The command prints a URL with embedded signature parameters:
Anyone with the URL can GET the object until the expiry passes.
Generate from an SDK
Presigned uploads (PUT)
Generate a URL the client can PUT to directly:
The client uploads with a single HTTP request:
Presigned POST (browser uploads with form data)
POST policies are the right fit for browser-based form uploads — they let you constrain the upload (key prefix, max size, content type) before the file is sent.
Best practices
- Use the shortest expiry that works. Don’t issue a long-lived URL when 5 minutes is enough.
- Bind to content type and size for upload URLs to prevent abuse.
- Don’t log presigned URLs — anyone who reads the log gets the same access.
- Treat them as one-time secrets — regenerate per request rather than caching.
Limitations
- The URL stops working if the API token used to sign it is revoked.
- Each presigned URL is valid for one HTTP method on one key. Different operations need different URLs.