Skip to main content
Multi-CloudStorageintermediate

Storage Across Clouds

Comprehensive comparison of object, block, and file storage across AWS, Azure, GCP, and OCI with pricing tables, CLI examples, lifecycle policies, and cross-cloud transfer strategies.

CloudToolStack Team22 min readPublished Mar 14, 2026

Prerequisites

  • Basic understanding of storage types (object, block, file)
  • Familiarity with at least one cloud storage service

Storage Across Clouds

Cloud storage is one of the most foundational services, and every cloud provider offers three primary categories: object storage for unstructured data (files, images, backups), block storage for VM disks and databases, and file storage for shared file systems. While the core functionality is similar across providers, the pricing models, performance characteristics, storage tiers, and advanced features differ significantly.

This guide provides a comprehensive comparison of storage services across AWS, Azure, GCP, and OCI covering object storage, block storage, and file storage. Each section includes pricing comparisons, CLI examples for common operations, and guidance on choosing the right storage tier for your use case. Understanding these differences is essential for multi-cloud architectures, cost optimization, and disaster recovery planning.

All pricing data is current as of early 2026 for the US East/Central regions. Prices vary by region, and volume discounts may apply. Always check the provider's pricing calculator for exact costs.

Object Storage Comparison

Object storage is the most commonly used cloud storage type, suitable for static websites, data lakes, backups, media files, and application assets. All four providers offer virtually unlimited storage with 99.999999999% (11 nines) durability.

FeatureAWS S3Azure BlobGCP Cloud StorageOCI Object Storage
Service NameSimple Storage Service (S3)Blob StorageCloud StorageObject Storage
Max Object Size5 TB190.7 TB (block blob)5 TB10 TB
NamespaceGlobal (bucket names unique worldwide)Per-account (storage account scoped)Global (bucket names unique worldwide)Per-tenancy namespace
VersioningYesYes (soft delete, snapshots)YesYes (object versioning)
EncryptionSSE-S3, SSE-KMS, SSE-CMicrosoft-managed or customer-managed keysGoogle-managed, CMEK, or CSEKOracle-managed or customer-managed
ReplicationCRR (cross-region), SRR (same-region)LRS, ZRS, GRS, GZRS, RA-GRSDual-region, multi-region, Turbo ReplicationCross-region copy (manual)

Object Storage Pricing (per GB/month, US regions)

TierAWS S3Azure BlobGCP Cloud StorageOCI Object Storage
Hot / Standard$0.023$0.018 (Hot LRS)$0.020$0.0255
Infrequent / Cool$0.0125 (Standard-IA)$0.010 (Cool LRS)$0.010 (Nearline)$0.0100 (Infrequent)
Cold / Archive Access$0.004 (Glacier IR)$0.002 (Cold LRS)$0.004 (Coldline)$0.0026 (Archive)
Deep Archive$0.00099 (Deep Archive)$0.00099 (Archive LRS)$0.0012 (Archive)N/A
Data Egress (per GB)$0.09 (first 10 TB)$0.087 (first 5 GB free)$0.12 (first 1 TB)$0.0085 (10 TB free/mo)

OCI Egress Pricing Advantage

OCI stands out with dramatically lower data egress costs: $0.0085/GB compared to $0.09-$0.12/GB on other providers, plus 10 TB/month of free egress. For egress-heavy workloads (CDN origin, data distribution, API responses), OCI can be 5-14x cheaper than AWS, Azure, or GCP. This is increasingly important as providers charge more for inter-cloud data transfer in multi-cloud architectures.

Object Storage CLI Comparison

bash
# === Upload a file ===

# AWS
aws s3 cp myfile.tar.gz s3://my-bucket/backups/myfile.tar.gz

# Azure
az storage blob upload \
  --account-name mystorageacct \
  --container-name my-container \
  --name backups/myfile.tar.gz \
  --file myfile.tar.gz

# GCP
gcloud storage cp myfile.tar.gz gs://my-bucket/backups/myfile.tar.gz

# OCI
oci os object put \
  --namespace-name mynamespace \
  --bucket-name my-bucket \
  --name backups/myfile.tar.gz \
  --file myfile.tar.gz
bash
# === List objects ===

# AWS
aws s3 ls s3://my-bucket/backups/ --recursive --summarize

# Azure
az storage blob list \
  --account-name mystorageacct \
  --container-name my-container \
  --prefix backups/ \
  --output table

# GCP
gcloud storage ls gs://my-bucket/backups/ --long --recursive

# OCI
oci os object list \
  --namespace-name mynamespace \
  --bucket-name my-bucket \
  --prefix backups/
bash
# === Sync a directory ===

# AWS
aws s3 sync ./local-dir s3://my-bucket/data/ --delete

# Azure
azcopy sync "./local-dir" "https://mystorageacct.blob.core.windows.net/my-container/data" --delete-destination=true

# GCP
gcloud storage rsync ./local-dir gs://my-bucket/data/ --delete-unmatched-destination-objects

# OCI (no native sync, use rclone)
rclone sync ./local-dir oci:my-bucket/data/

Block Storage Comparison

Block storage provides high-performance disk volumes that attach to compute instances. They are essential for databases, file systems, and any workload requiring consistent IOPS and low latency. All providers offer multiple performance tiers to match different workload requirements.

FeatureAWS EBSAzure Managed DisksGCP Persistent DiskOCI Block Volume
Standard SSDgp3: $0.08/GB, 3000 IOPSStandard SSD: $0.075/GBpd-balanced: $0.100/GBBalanced: $0.025/GB, $0.0017/IOPS
Premium SSDio2: $0.125/GB, up to 64K IOPSPremium SSD v2: $0.082/GBpd-ssd: $0.170/GBHigher Perf: $0.025/GB, custom IOPS
HDDst1: $0.045/GB, sc1: $0.015/GBStandard HDD: $0.04/GBpd-standard: $0.040/GBLower Cost: $0.025/GB
Max Size64 TB65 TB64 TB32 TB
Max IOPS256,000 (io2 Block Express)160,000 (Ultra Disk)120,000 (pd-ssd)225,000 (Ultra High Perf)
Multi-Attachio1/io2 (up to 16 instances)Premium SSD v2 / Ultrapd-ssd (read-only multi-attach)Yes (read/write shareable)
SnapshotsEBS Snapshots (incremental)Managed Disk SnapshotsPD Snapshots (incremental)Volume Backups

OCI Block Volume Pricing

OCI's block storage pricing model is unique: all tiers cost the same $0.025/GB/month for capacity, and you pay separately for IOPS performance. This means you can right-size performance independently of capacity, potentially saving significantly compared to other providers where you pay for a fixed IOPS tier bundled with storage. For large volumes with moderate IOPS needs, OCI can be 2-4x cheaper than AWS EBS gp3.

File Storage Comparison

Managed file storage provides NFS or SMB file shares that can be mounted by multiple instances simultaneously. These are critical for legacy application migration, shared data processing, content management systems, and home directories.

FeatureAWS EFSAzure FilesGCP FilestoreOCI File Storage
ProtocolNFS v4.1SMB 3.x, NFS 4.1NFS v3NFS v3
Min CapacityNo minimum (pay per use)100 GB (premium)1 TB (Basic), 2.5 TB (Enterprise)No minimum
Max CapacityPetabytes100 TB per share100 TB8 EB
Standard Price$0.30/GB/mo (Standard)$0.06/GB/mo (Transaction Optimized)$0.20/GB/mo (Basic HDD)$0.30/GB/mo
Multi-AZYes (Regional)Yes (ZRS)Yes (Enterprise)Yes (with replication)

Storage Lifecycle and Tiering

bash
# AWS: Create lifecycle rule to transition objects
aws s3api put-bucket-lifecycle-configuration \
  --bucket my-bucket \
  --lifecycle-configuration '{
    "Rules": [{
      "ID": "ArchiveOldData",
      "Status": "Enabled",
      "Filter": {"Prefix": "logs/"},
      "Transitions": [
        {"Days": 30, "StorageClass": "STANDARD_IA"},
        {"Days": 90, "StorageClass": "GLACIER"},
        {"Days": 365, "StorageClass": "DEEP_ARCHIVE"}
      ],
      "Expiration": {"Days": 2555}
    }]
  }'
bash
# Azure: Create lifecycle management policy
az storage account management-policy create \
  --account-name mystorageacct \
  --resource-group my-rg \
  --policy '{
    "rules": [{
      "name": "archiveOldBlobs",
      "type": "Lifecycle",
      "definition": {
        "filters": {"blobTypes": ["blockBlob"], "prefixMatch": ["logs/"]},
        "actions": {
          "baseBlob": {
            "tierToCool": {"daysAfterModificationGreaterThan": 30},
            "tierToArchive": {"daysAfterModificationGreaterThan": 90},
            "delete": {"daysAfterModificationGreaterThan": 2555}
          }
        }
      }
    }]
  }'
bash
# GCP: Set lifecycle rules on a bucket
gcloud storage buckets update gs://my-bucket --lifecycle-file=- << 'EOF'
{
  "rule": [
    {
      "action": {"type": "SetStorageClass", "storageClass": "NEARLINE"},
      "condition": {"age": 30, "matchesPrefix": ["logs/"]}
    },
    {
      "action": {"type": "SetStorageClass", "storageClass": "COLDLINE"},
      "condition": {"age": 90, "matchesPrefix": ["logs/"]}
    },
    {
      "action": {"type": "SetStorageClass", "storageClass": "ARCHIVE"},
      "condition": {"age": 365, "matchesPrefix": ["logs/"]}
    },
    {
      "action": {"type": "Delete"},
      "condition": {"age": 2555}
    }
  ]
}
EOF

Cross-Cloud Data Transfer

Moving data between cloud providers incurs egress charges from the source provider. For large transfers, use dedicated transfer services or offline transfer appliances rather than downloading through the public internet.

ServiceProviderSource SupportBest For
Storage Transfer ServiceGCPAWS S3, Azure Blob, HTTP, on-premOngoing sync to GCS
DataSyncAWSNFS, SMB, HDFS, other cloudsData migration to AWS
AzCopyAzureAWS S3, GCS, localAd-hoc transfers to Azure
rcloneOpen-sourceAll providers + 40+ backendsMulti-cloud sync, any direction
bash
# rclone: Sync between AWS S3 and GCP Cloud Storage
rclone sync s3:my-aws-bucket gcs:my-gcp-bucket \
  --transfers=32 \
  --checkers=16 \
  --progress

# GCP Storage Transfer: Create a recurring transfer from S3
gcloud transfer jobs create s3://source-bucket gs://dest-bucket \
  --source-creds-file=aws-creds.json \
  --schedule-starts=2026-03-15 \
  --schedule-repeats-every=24h \
  --description="Daily S3 to GCS sync"

Egress Cost Planning

Before planning cross-cloud data transfers, calculate the egress costs carefully. Transferring 10 TB from AWS S3 costs approximately $900 in egress fees. The same transfer from OCI costs only $85 (after the 10 TB free tier). For large-scale migrations, negotiate with your cloud provider for reduced egress rates or use physical transfer appliances (Snowball, Data Box, Transfer Appliance).

Choosing the Right Storage

Decision Matrix

Use CaseRecommended ServiceWhy
Cheapest hot object storageAzure Blob Hot LRS$0.018/GB vs $0.020-0.025 on others
Cheapest egressOCI Object Storage$0.0085/GB + 10 TB free/month
Cheapest archiveAWS S3 Deep Archive / Azure Archive$0.00099/GB/month
Best block storage valueOCI Block Volume$0.025/GB with separate IOPS pricing
Highest IOPS block storageAWS io2 Block ExpressUp to 256,000 IOPS per volume
Cheapest file storageAzure Files (Cool)$0.015/GB/month
Simplest multi-region objectGCP Cloud Storage (multi-region)Built-in geo-redundancy, single bucket
Multi-Cloud Storage Cheat SheetAWS S3 Storage ClassesGCP Storage Classes & Lifecycle

Key Takeaways

  1. 1Azure Blob has the cheapest per-GB object storage ($0.018/GB Hot LRS) while OCI has the cheapest egress ($0.0085/GB after 10 TB free).
  2. 2OCI block storage uses a unique model: flat $0.025/GB with separate IOPS pricing, enabling independent cost optimization.
  3. 3All providers support lifecycle policies for automatic storage tier transitions to reduce costs over time.
  4. 4GCP Cloud Storage multi-region buckets provide built-in geo-redundancy without configuring replication manually.
  5. 5rclone is the best cross-cloud data transfer tool, supporting all four providers with a consistent interface.
  6. 6Data egress costs dominate total storage cost for read-heavy workloads: OCI is 5-14x cheaper than other providers.

Frequently Asked Questions

Which cloud has the cheapest storage?
It depends on the workload. Azure Blob is cheapest for hot object storage per GB. OCI is cheapest for total cost when factoring in egress (10 TB free/month). AWS Glacier Deep Archive and Azure Archive are cheapest for long-term archival at $0.00099/GB. OCI block storage is cheapest at $0.025/GB flat.
How do I transfer data between cloud providers?
For ad-hoc transfers, use rclone (open-source, supports all providers). GCP Storage Transfer Service can continuously sync from S3 or Azure Blob. Azure AzCopy supports S3 as a source. For large migrations (tens of TB+), use provider-specific transfer services or physical transfer appliances to avoid egress charges.
Should I use object storage or block storage?
Object storage (S3, Blob, GCS) is for unstructured data: files, images, backups, logs, data lakes. Block storage (EBS, Managed Disks, PD) is for structured data requiring low-latency random access: databases, file systems, application data. Object storage is cheaper and virtually unlimited; block storage is faster but capacity-limited.

Written by CloudToolStack Team

Cloud engineers and architects with hands-on experience across AWS, Azure, and GCP. We write guides based on real-world production patterns, not just documentation rewrites.

Disclaimer: This guide is for educational purposes. Cloud services change frequently; always refer to official documentation for the latest information. AWS, Azure, and GCP are trademarks of their respective owners.