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.
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.
| Feature | AWS S3 | Azure Blob | GCP Cloud Storage | OCI Object Storage |
|---|---|---|---|---|
| Service Name | Simple Storage Service (S3) | Blob Storage | Cloud Storage | Object Storage |
| Max Object Size | 5 TB | 190.7 TB (block blob) | 5 TB | 10 TB |
| Namespace | Global (bucket names unique worldwide) | Per-account (storage account scoped) | Global (bucket names unique worldwide) | Per-tenancy namespace |
| Versioning | Yes | Yes (soft delete, snapshots) | Yes | Yes (object versioning) |
| Encryption | SSE-S3, SSE-KMS, SSE-C | Microsoft-managed or customer-managed keys | Google-managed, CMEK, or CSEK | Oracle-managed or customer-managed |
| Replication | CRR (cross-region), SRR (same-region) | LRS, ZRS, GRS, GZRS, RA-GRS | Dual-region, multi-region, Turbo Replication | Cross-region copy (manual) |
Object Storage Pricing (per GB/month, US regions)
| Tier | AWS S3 | Azure Blob | GCP Cloud Storage | OCI 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
# === 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# === 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/# === 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.
| Feature | AWS EBS | Azure Managed Disks | GCP Persistent Disk | OCI Block Volume |
|---|---|---|---|---|
| Standard SSD | gp3: $0.08/GB, 3000 IOPS | Standard SSD: $0.075/GB | pd-balanced: $0.100/GB | Balanced: $0.025/GB, $0.0017/IOPS |
| Premium SSD | io2: $0.125/GB, up to 64K IOPS | Premium SSD v2: $0.082/GB | pd-ssd: $0.170/GB | Higher Perf: $0.025/GB, custom IOPS |
| HDD | st1: $0.045/GB, sc1: $0.015/GB | Standard HDD: $0.04/GB | pd-standard: $0.040/GB | Lower Cost: $0.025/GB |
| Max Size | 64 TB | 65 TB | 64 TB | 32 TB |
| Max IOPS | 256,000 (io2 Block Express) | 160,000 (Ultra Disk) | 120,000 (pd-ssd) | 225,000 (Ultra High Perf) |
| Multi-Attach | io1/io2 (up to 16 instances) | Premium SSD v2 / Ultra | pd-ssd (read-only multi-attach) | Yes (read/write shareable) |
| Snapshots | EBS Snapshots (incremental) | Managed Disk Snapshots | PD 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.
| Feature | AWS EFS | Azure Files | GCP Filestore | OCI File Storage |
|---|---|---|---|---|
| Protocol | NFS v4.1 | SMB 3.x, NFS 4.1 | NFS v3 | NFS v3 |
| Min Capacity | No minimum (pay per use) | 100 GB (premium) | 1 TB (Basic), 2.5 TB (Enterprise) | No minimum |
| Max Capacity | Petabytes | 100 TB per share | 100 TB | 8 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-AZ | Yes (Regional) | Yes (ZRS) | Yes (Enterprise) | Yes (with replication) |
Storage Lifecycle and Tiering
# 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}
}]
}'# 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}
}
}
}
}]
}'# 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}
}
]
}
EOFCross-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.
| Service | Provider | Source Support | Best For |
|---|---|---|---|
| Storage Transfer Service | GCP | AWS S3, Azure Blob, HTTP, on-prem | Ongoing sync to GCS |
| DataSync | AWS | NFS, SMB, HDFS, other clouds | Data migration to AWS |
| AzCopy | Azure | AWS S3, GCS, local | Ad-hoc transfers to Azure |
| rclone | Open-source | All providers + 40+ backends | Multi-cloud sync, any direction |
# 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 Case | Recommended Service | Why |
|---|---|---|
| Cheapest hot object storage | Azure Blob Hot LRS | $0.018/GB vs $0.020-0.025 on others |
| Cheapest egress | OCI Object Storage | $0.0085/GB + 10 TB free/month |
| Cheapest archive | AWS S3 Deep Archive / Azure Archive | $0.00099/GB/month |
| Best block storage value | OCI Block Volume | $0.025/GB with separate IOPS pricing |
| Highest IOPS block storage | AWS io2 Block Express | Up to 256,000 IOPS per volume |
| Cheapest file storage | Azure Files (Cool) | $0.015/GB/month |
| Simplest multi-region object | GCP Cloud Storage (multi-region) | Built-in geo-redundancy, single bucket |
Key Takeaways
- 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).
- 2OCI block storage uses a unique model: flat $0.025/GB with separate IOPS pricing, enabling independent cost optimization.
- 3All providers support lifecycle policies for automatic storage tier transitions to reduce costs over time.
- 4GCP Cloud Storage multi-region buckets provide built-in geo-redundancy without configuring replication manually.
- 5rclone is the best cross-cloud data transfer tool, supporting all four providers with a consistent interface.
- 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?
How do I transfer data between cloud providers?
Should I use object storage or block storage?
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.