Feature
January 20, 20258 min read

Multi-Cloud Storage: Direct Uploads to S3, Azure, GCS & Alibaba OSS

One of the most requested features is here: multi-cloud storage support. You can now configure Tornado to upload downloads directly to your preferred cloud provider, eliminating intermediate servers and egress fees entirely.

Supported Providers

Tornado supports four major cloud storage providers:

  • AWS S3 & S3-Compatible — AWS S3, Cloudflare R2, MinIO, DigitalOcean Spaces, Backblaze B2, Wasabi, OVH
  • Azure Blob Storage — Azure Storage Accounts with Blob containers
  • Google Cloud Storage — GCS buckets with service account authentication
  • Alibaba Cloud OSS — Alibaba Object Storage Service

Why Direct Cloud Delivery?

Traditional download services route files through their servers before delivering to you. This creates two problems:

  1. Egress fees — You pay for data transfer twice: once from their servers, once to your storage.
  2. Latency — Files take longer to arrive because of the extra hop.

With Tornado's direct delivery, files go straight from the source to your bucket. Zero intermediate storage, zero extra fees.

Configuration Examples

AWS S3

curl -X POST "https://api.tornadoapi.io/user/storage" \
  -H "x-api-key: sk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "provider": "s3",
    "endpoint": "https://s3.us-east-1.amazonaws.com",
    "bucket": "my-tornado-downloads",
    "region": "us-east-1",
    "access_key": "AKIAIOSFODNN7EXAMPLE",
    "secret_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
  }'

Cloudflare R2

curl -X POST "https://api.tornadoapi.io/user/storage" \
  -H "x-api-key: sk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "provider": "s3",
    "endpoint": "https://ACCOUNT_ID.r2.cloudflarestorage.com",
    "bucket": "my-downloads",
    "region": "auto",
    "access_key": "YOUR_R2_ACCESS_KEY",
    "secret_key": "YOUR_R2_SECRET_KEY"
  }'

Azure Blob Storage

curl -X POST "https://api.tornadoapi.io/user/storage" \
  -H "x-api-key: sk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "provider": "azure_blob",
    "account_name": "mystorageaccount",
    "container": "tornado-downloads",
    "account_key": "your-storage-account-key..."
  }'

Google Cloud Storage

curl -X POST "https://api.tornadoapi.io/user/storage" \
  -H "x-api-key: sk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "provider": "gcs",
    "project_id": "my-gcp-project",
    "bucket": "tornado-downloads",
    "service_account_json": "{...}"
  }'

Presigned URLs

When jobs complete, the s3_url field contains a presigned URL valid for 24 hours, regardless of which provider you use. This lets you access files immediately without exposing your bucket publicly.

Which Provider Should You Choose?

The best storage provider depends on your use case and existing infrastructure:

ProviderBest ForEgress PricingSpecial Features
AWS S3Most teams, broad ecosystem$0.09/GBLifecycle policies, Glacier archival
Cloudflare R2Frequent access, cost optimization$0 (free!)Zero egress, S3-compatible
Azure BlobMicrosoft/Azure shops$0.087/GBHot/Cool/Archive tiers
Google CloudAI/ML teams on GCP$0.12/GBVertex AI integration
Alibaba OSSAsia-Pacific operations$0.12/GBLow latency in Asia

Pro tip for AI teams: If you're building a pipeline that processes videos frequently (like an AI long-form to short-form tool), Cloudflare R2 is the best choice. Zero egress fees mean you can read files from your bucket as many times as needed without cost. Combined with Tornado's direct delivery, you get the most cost-effective video ingestion pipeline possible.

Multi-Cloud Strategy

Some teams use multiple storage providers for different purposes:

  • R2 for hot data — Videos being actively processed by your AI pipeline
  • S3 for warm data — Completed datasets that need occasional access
  • S3 Glacier for cold data — Long-term archival at minimal cost

You can switch storage providers at any time by updating your storage configuration. Tornado will use the new credentials for all subsequent downloads.

Why Direct Upload Matters at Scale

When you're downloading several terabytes per hour with Tornado, the traditional approach of downloading to an intermediate server and then uploading to cloud storage becomes impossibly expensive and slow. At 10 TB/month, egress fees alone cost $900-1,200. At 50 TB/month, you're looking at $4,500-6,000 in pure data transfer costs.

Tornado's direct delivery eliminates this entirely. Files stream directly from source to your bucket, saving you thousands per month. Learn more about the cost savings in our zero egress fees deep dive.

Security Best Practices

  • Use least privilege — Create dedicated IAM credentials with only the permissions needed: PutObject, GetObject, DeleteObject, ListBucket.
  • Rotate credentials regularly — Set up automated key rotation every 90 days.
  • Enable bucket logging — Monitor access to your storage for security audits.
  • Use bucket policies — Restrict access by IP or VPC endpoint for production environments.
  • Enable encryption — Use SSE-S3 or SSE-KMS for data at rest encryption.

Ready to Get Started?

Request your API key and start downloading in minutes.

View Documentation