
Cloud StorageAuthorCloudBrum editorial teamLast reviewedReading time~12 minLevelBeginner to advanced
Google Cloud · Storage · Object storage
One storage API for every temperature of data. You create a bucket, put objects in it, and pick a storage class by how long you’ll keep the data. The cold classes (Nearline, Coldline, Archive) still answer in milliseconds, unlike the offline archives on some other clouds. Autoclass can move objects between classes for you.
On this page (17 sections)
Mind map: Cloud Storage at a glance
Free to share. The downloaded image includes the CloudBrum link.
Key features (summary)
- Buckets and objectsObjects live in buckets whose names are unique across Google Cloud. A single object can be up to 5 TiB, and the folder view in the console is only a display of name prefixes.
- Four classes, one APIStandard, Nearline, Coldline and Archive all use the same API and give millisecond access. The colder the class, the lower the storage price and the higher the read price and minimum storage time.
- Choose where it livesA region keeps data in one place, a dual-region pairs two regions, and a multi-region spreads across a large area such as the US or the EU.
- AutoclassLet Cloud Storage move objects between classes on its own, based on how they’re used, so you don’t need to guess the access pattern.
- Strongly consistentA read after a write returns the new data, and list calls are consistent too. Data is stored with 11 nines of annual durability.
- Soft delete by defaultDeleted objects are kept for seven days unless you change it, so most accidental deletes are recoverable. Versioning, retention policies and holds go further.
- Simple access modelUniform bucket-level access means IAM alone decides who gets in. Public access prevention blocks public sharing, and signed URLs give time-limited access to one object.
- Lifecycle and eventsRules change class or delete objects by age, and notifications through Pub/Sub or Eventarc start workflows when objects arrive.
Basic concepts
- Bucket
- The container for objects. It has a globally unique name and a location, and it holds the settings for access, classes and lifecycle.
- Object
- A piece of data with a name, metadata and a generation number that changes each time the data is replaced.
- Location type
- Region, dual-region or multi-region. It’s chosen when the bucket is created and can’t be changed later.
- Storage class
- Standard, Nearline, Coldline or Archive. It sets storage and retrieval prices and the minimum storage duration (none, 30, 90 and 365 days).
- Autoclass
- A bucket setting that moves objects between classes automatically as their use changes.
- Uniform bucket-level access
- Turns off object ACLs so that IAM policies are the only way access is granted.
- Public access prevention
- A setting that blocks anything from being made public on a bucket or across an organisation.
- Signed URL
- A temporary link, signed with a service account key or through the IAM Credentials API, that gives access to one object.
- Soft delete
- Keeps deleted objects for a retention period, seven days by default, so they can be restored.
- Object versioning
- Keeps earlier generations of an object when it is overwritten or deleted.
- Retention policy and Bucket Lock
- A minimum time objects must be kept. Locking the policy makes it permanent, for records that mustn’t be changed.
- Lifecycle rule
- A condition and an action, such as change to Nearline after 30 days, or delete when the object has been noncurrent for 90.
- Resumable upload
- An upload that can be restarted after a failure, which is how large files are normally sent.
- Requester pays
- A bucket setting that bills the person downloading the data for the request and the network, instead of the bucket owner.
How to create & configure it
Create your first private bucket in the Google Cloud console
- Open Cloud StorageChoose your project, then go to Cloud Storage and Buckets, and pick Create.
- Name the bucketNames must be unique across Google Cloud, 3 to 63 characters, using lower-case letters, numbers, dashes and underscores. Don’t put anything sensitive in the name, because names are public.
- Choose the locationPick a region near your users and compute, a dual-region for two-region resilience, or a multi-region for broad reach. You can’t change it later.
- Choose a storage classStart with Standard unless you know the data is cold, or turn on Autoclass if you can’t tell. Colder classes cost more to read and have minimum storage times.
- Control accessLeave Enforce public access prevention on, and choose Uniform access control so that IAM is the only door.
- Protect the dataKeep soft delete at its default of seven days or raise it, and add object versioning if you need older copies.
- Create it and upload a filePress Create and drag in a file. For large data use gcloud storage cp or an SDK, which upload in parts and can resume.
- Give access to the right identitiesOn the Permissions tab, grant an application’s service account a role such as Storage Object User on this bucket only, and not at the project level.
- Add a lifecycle rule and a budgetUnder Lifecycle, change the class or delete objects after the period that matches your use, and create a budget alert for the project.
Tip: once the console version behaves, write the bucket down as Terraform, Deployment Manager or Config Connector (see the code references) so settings can’t drift and a change gets a review.
Common issues after configuration
| Symptom | Likely cause | What to check / fix |
|---|---|---|
| 403 Forbidden or AccessDeniedException | The identity lacks a role on the bucket | Check the exact permission named in the message, then grant a role such as Storage Object Viewer or User on the bucket. If the bucket is in another project, check any organisation policy or VPC Service Controls perimeter too. |
| 404 Not Found for an object that exists | Wrong name, bucket or generation | Object names are case sensitive, and /photo.jpg is not photo.jpg. Check the bucket name too, and if versioning is on, make sure you aren’t asking for an old generation. |
| 429 Too Many Requests or 503 | Too many writes to one object name, or a sudden burst on a bucket | Writes to the same object name are limited to about one per second. Spread names, ramp load up gradually, and retry with exponential backoff. |
| Signed URL gives SignatureDoesNotMatch or ExpiredToken | Wrong signing account, clock skew or changed headers | Check the expiry and the clock, sign with a service account that has access to the object, and don’t change the headers or query string after signing. |
| Signed URL can’t be created on Cloud Run or Compute Engine | The credentials have no private key to sign with | Use the IAM Credentials API to sign on behalf of a service account (it needs the Service Account Token Creator role), or use a key file where that’s acceptable. |
| Public access is refused | Public access prevention is enforced | That’s the safe setting. Serve public assets through a load balancer with Cloud CDN, or use signed URLs. |
| Early deletion fee on a cold object | Object removed or changed before the minimum period | Nearline has 30 days, Coldline 90 and Archive 365. Move data to a cold class only when you’re sure it will stay. |
| Object can’t be deleted or overwritten | A retention policy, hold or lock applies | That’s what they’re for. Check the bucket’s retention policy and any object holds. A locked policy can’t be removed. |
| Deleted files still appear on the bill | Soft delete retains them, and they’re billed | Lower the soft delete period where that’s safe, and add a lifecycle rule for noncurrent versions. |
| Browser blocks a request from your site | CORS isn’t set on the bucket | Set a CORS configuration naming your origin, methods and headers. Avoid * except for public assets. |
| Large upload fails partway | Single-shot upload over an unreliable link | Use resumable uploads, which the SDKs and gcloud storage do on their own, and parallel composite uploads for very large files. |
| 409 Conflict when creating a bucket | The name is taken, possibly by someone else | Bucket names are global. Add your organisation or project name. Also avoid creating and deleting buckets rapidly: it’s rate limited. |
Use cases: when and where to use it
Good fit
- User uploads such as images, video and documents
- Backups and archives, in Nearline, Coldline or Archive
- The data lake behind BigQuery, Dataproc and machine learning
- Static websites and single-page apps, behind a load balancer with Cloud CDN
- Software releases, build artefacts and container image layers
- Staging space for imports from other clouds and on-premises systems
Consider something else
- A shared file system for servers → Filestore
- A disk for one virtual machine → Persistent Disk or Hyperdisk
- Rows you query by key at scale → Bigtable, Firestore or Spanner
- Analytics on structured data → BigQuery, with files in Cloud Storage as the source
- The same job on other clouds → compare Amazon S3 and Azure Blob Storage
Pros: why consider it?
Why teams choose it
- Cold classes still read in milliseconds, with one API for all of them
- Strong consistency and a simple access model with IAM
- Autoclass takes the class decision off your hands
- Soft delete is on by default, which has saved many people
- Dual-region and multi-region buckets are built in
- Tight links to BigQuery, Dataflow, Vertex AI and the rest of Google Cloud
Trade-offs to weigh
- The location type can’t be changed after creation
- Writes to a single object name are limited to about one per second
- The cold classes add retrieval fees and minimum storage durations
- Signed URLs need a service account that can sign, which trips up serverless code
- Egress charges can dominate the bill for popular content
- Moving off Google Cloud means copying data out, and that egress is billed
Common threats, vulnerabilities & risks
| Risk | Severity | Why it matters | Mitigation |
|---|---|---|---|
| A bucket opened to allUsers or allAuthenticatedUsers | High | Anyone on the internet, or anyone with any Google account, can read the data. | Enforce public access prevention on the organisation, and use signed URLs or a CDN for public content. |
| Over-broad IAM roles | High | Storage Admin at project level lets a leaked credential read and delete every bucket. | Grant narrow roles on specific buckets, and use service accounts with one purpose each. |
| Long-lived service account keys | High | A downloaded key works from anywhere until someone deletes it. | Prefer workload identity and impersonation. If you must use keys, rotate them and block key creation by organisation policy. |
| No protection against deletion | Medium | A bug in a clean-up job, or a hijacked identity, can destroy objects with no way back. | Keep soft delete on, add versioning, and use retention policies and Bucket Lock for records. |
| Signed URLs shared too widely | Medium | Anyone with the link can use it until it expires, and it can’t be revoked individually. | Give links a short life, scope them to one object and one HTTP method, and rotate the signing account if one leaks. |
| Data leaving the perimeter | Medium | A compromised identity can copy data to a bucket outside your organisation. | Use VPC Service Controls for sensitive projects and restrict who can create buckets. |
| Weak key control | Medium | Google-managed encryption covers most needs, but regulated data may need its own key and an audit trail. | Use customer-managed keys in Cloud KMS where policy requires, and watch Cloud Audit Logs. |
| Unexpected costs | Low–Med | Retrieval from cold classes, early deletion, soft-deleted data and egress all bill quietly. | Lifecycle rules, Autoclass where access is uncertain, budgets and the billing export to BigQuery. |
| No audit trail | Low–Med | Data access logs are off by default for most services. | Turn on Data Access audit logs for sensitive buckets, and send them to a central project. |
Performance optimisation
- Keep the bucket in the same region as the compute that uses it, or use a multi-region bucket for content read from many places.
- Cache widely read content with Cloud CDN on a load balancer in front of the bucket; most requests then stop at the edge.
- Spread writes over object names. One name takes roughly one write per second, though a bucket as a whole scales much higher.
- Use parallel composite uploads and ranged reads for large files. gcloud storage does this automatically when it’s worthwhile.
- Ramp request rates up gradually. Buckets autoscale, and a sudden burst from zero can see 429 and 503 errors for a short time.
- Use Anywhere Cache to keep hot data close to compute in a zone, for read-heavy jobs such as training.
- Don’t store millions of tiny objects if you can batch them. Fewer, larger objects mean fewer requests and a lighter bill.
- Mount a bucket with Cloud Storage FUSE only where a file interface is truly needed. Direct API access is faster.
Reduce monthly cost
FinOps is the habit of managing cloud spend together with engineering. These are the FinOps checks that matter most for Cloud Storage.
- Start with Standard or turn on Autoclass when you can’t predict access. Move to colder classes only for data that you can show is cold.
- Use lifecycle rules for every bucket: change class, delete old data, and remove noncurrent versions.
- Mind the minimum durations: 30 days for Nearline, 90 for Coldline and 365 for Archive, plus retrieval fees. A wrong guess costs more than leaving the data in Standard.
- Watch operations. Class A operations (writes, lists) cost more than Class B (reads), and chatty applications can spend more on operations than on storage.
- Check egress. Data leaving Google Cloud, or going between regions, is billed. Keep compute in the same location and put a CDN in front of public content.
- Count soft-deleted data and noncurrent versions as live data for billing, and shorten how long you hold them.
- Choose the location type deliberately. Dual- and multi-region buckets cost more than a single region.
- Delete test buckets, old exports and orphaned data, and use the Storage Insights reports to find them.
- Consider committed use discounts only where you know the baseline for a year or more. Standard storage is billed per GB with no commitment otherwise.
- Label buckets by team and product, export billing data to BigQuery, and set budget alerts.
The prices and the free program described here are only examples. They differ by location and they change, so verify them on Google's pages first (see Pricing).
Security optimisation
- Enforce public access prevention and uniform bucket-level access across the organisation with organisation policies.
- Give each application its own service account with a narrow role on a specific bucket, and avoid long-lived keys.
- Use workload identity or impersonation instead of downloaded keys, and block key creation where you can.
- Use signed URLs with short lifetimes, instead of making objects public.
- Turn on soft delete and versioning, and use retention policies with Bucket Lock for records.
- Encrypt with customer-managed keys in Cloud KMS where policy requires, and log key use.
- Enable Data Access audit logs for sensitive buckets and send them to a separate project.
- Use VPC Service Controls to keep data from leaving a perimeter, and Private Google Access for traffic from private VMs.
- Scan for sensitive data with Sensitive Data Protection and review findings.
- Review who has Storage Admin and who can change bucket settings, and keep the list short.
Governance & compliance
Guardrails
- Label rules for buckets: owner, environment, data class, cost centre
- Organisation policies that enforce public access prevention and uniform bucket-level access, and restrict service account key creation
- A shared Terraform module for buckets with the safe defaults built in
- A data classification that decides which buckets need customer-managed keys, retention locks or VPC Service Controls
Continuous checks (Security Command Center and Organisation Policy)
- “storage.publicAccessPrevention”
- “storage.uniformBucketLevelAccess”
- “Public bucket ACL” and “Bucket policy only disabled” findings in Security Command Center
- “iam.disableServiceAccountKeyCreation”
- “gcp.restrictNonCmekServices” where customer-managed keys are required
Use Cloud Audit Logs to see who changed a bucket or read an object, Organization Policy to enforce settings, Security Command Center for findings, and the Compliance Reports Manager for assurance reports. Cloud Storage is in scope for many programmes, but responsibility is shared: Google runs the service, and you own the identities, access settings, encryption choices and data.
Reduce carbon footprint
- Hold less data. Anything nobody uses still sits on powered hardware, so deleting it comes first.
- Compress files and use compact formats, so there is less to store and less to push around.
- Use lifecycle rules or Autoclass so cold data sits in the classes meant for it.
- Let Cloud CDN answer repeat requests so the origin sends each popular object once.
- Create buckets in the location your workloads run in, which also cuts transfer over long distances.
- Pick a low-carbon region for large archives that don’t need low latency. Google publishes the carbon-free energy share of each region.
- The Google Cloud Carbon Footprint report gives estimated emissions for your usage. Read how it counts storage before you quote a figure.
Pricing
Purchase options
Storage by class Per GB-month
Each gigabyte stored carries a monthly price set by class and location, with Standard highest and Archive lowest.
Operations Class A and B
Writes and lists are Class A, reads are Class B, and the price per operation varies by class. Colder classes charge more per operation.
Retrieval and minimums Cold classes
Nearline, Coldline and Archive charge per GB to read data and bill a minimum storage period, so cheap to keep can mean costly to touch.
Network Egress
Data leaving Google Cloud, or moving between locations, is billed by distance and destination. Reading from compute in the same location is not.
What you actually pay for
- Storage, by class, location type and GB-month
- Operations (Class A and Class B)
- Retrieval fees on Nearline, Coldline and Archive, plus early-deletion charges
- Network egress, and replication between locations in dual- and multi-region buckets
- Features: Autoclass management, Anywhere Cache, soft-deleted data and others
Prices depend on the location and change over time. Check the official Cloud Storage pricing page and the Google Cloud Pricing Calculator for current figures, and read the Google Cloud Free Program page for what is free.
Important code references
A private bucket for user uploads, set up as you’d want it in production: public access prevention, uniform access, versioning, a longer soft delete and a lifecycle rule. gcloud and Terraform both build it. The Python and C# tabs upload an invoice and return a signed link that expires after 15 minutes. Put in your own project, bucket name, location and service account.
# Bucket names are global: change this one. Mumbai (asia-south1) is used as the example location.
PROJECT=my-project
BUCKET=acme-uploads-my-project
LOCATION=asia-south1
UPLOADER=uploader@$PROJECT.iam.gserviceaccount.com
# Private from the start: IAM only, and nothing can be made public
gcloud storage buckets create gs://$BUCKET --project=$PROJECT --location=$LOCATION \
--default-storage-class=STANDARD --uniform-bucket-level-access --public-access-prevention
# Keep older versions, and deleted objects for 14 days instead of the default 7
gcloud storage buckets update gs://$BUCKET --versioning
gcloud storage buckets update gs://$BUCKET --soft-delete-duration=14d
# Nearline after 30 days, noncurrent versions deleted after 90
cat > lifecycle.json <<'JSON'
{
"rule": [
{"action": {"type": "SetStorageClass", "storageClass": "NEARLINE"},
"condition": {"age": 30, "matchesStorageClass": ["STANDARD"], "isLive": true}},
{"action": {"type": "Delete"},
"condition": {"daysSinceNoncurrentTime": 90}}
]
}
JSON
gcloud storage buckets update gs://$BUCKET --lifecycle-file=lifecycle.json
# Let one service account create and read objects here, and nothing else
gcloud storage buckets add-iam-policy-binding gs://$BUCKET \
--member=serviceAccount:$UPLOADER --role=roles/storage.objectUser
# Upload, then make a link that works for 15 minutes (signs through the IAM Credentials API)
gcloud storage cp ./invoice-1042.pdf gs://$BUCKET/invoices/2026/10/invoice-1042.pdf
gcloud storage sign-url gs://$BUCKET/invoices/2026/10/invoice-1042.pdf \
--duration=15m --impersonate-service-account=$UPLOADER
# Assumes var.project_id, var.bucket_name (globally unique) and var.location (for example "asia-south1")
resource "google_storage_bucket" "uploads" {
name = var.bucket_name
project = var.project_id
location = var.location
storage_class = "STANDARD"
uniform_bucket_level_access = true
public_access_prevention = "enforced"
force_destroy = false # refuse to delete a bucket that still has objects
versioning {
enabled = true
}
soft_delete_policy {
retention_duration_seconds = 1209600 # 14 days
}
lifecycle_rule {
condition {
age = 30
matches_storage_class = ["STANDARD"]
with_state = "LIVE"
}
action {
type = "SetStorageClass"
storage_class = "NEARLINE"
}
}
lifecycle_rule {
condition {
days_since_noncurrent_time = 90
}
action {
type = "Delete"
}
}
}
resource "google_service_account" "uploader" {
account_id = "uploader"
display_name = "Uploads writer"
project = var.project_id
}
resource "google_storage_bucket_iam_member" "uploader" {
bucket = google_storage_bucket.uploads.name
role = "roles/storage.objectUser"
member = "serviceAccount:${google_service_account.uploader.email}"
}
# pip install google-cloud-storage
import datetime
import google.auth
from google.auth.transport.requests import Request
from google.cloud import storage
BUCKET = "acme-uploads-my-project"
client = storage.Client() # uses Application Default Credentials: a service account in Google Cloud, or your own login locally
bucket = client.bucket(BUCKET)
def upload_invoice(path, name):
"""Upload one file. Large files are sent with a resumable upload."""
blob = bucket.blob(name)
blob.metadata = {"team": "billing"}
blob.upload_from_filename(path, content_type="application/pdf")
def download_link(name, minutes=15):
"""A V4 signed URL. Without a private key (Cloud Run, Compute Engine) it signs through the IAM Credentials API."""
blob = bucket.blob(name)
credentials, _ = google.auth.default()
if getattr(credentials, "signer", None) is not None:
return blob.generate_signed_url(version="v4", expiration=datetime.timedelta(minutes=minutes), method="GET")
credentials.refresh(Request())
return blob.generate_signed_url(
version="v4",
expiration=datetime.timedelta(minutes=minutes),
method="GET",
service_account_email=credentials.service_account_email,
access_token=credentials.token,
)
def list_prefix(prefix):
"""Object names under a prefix, fetched a page at a time by the library."""
return [blob.name for blob in client.list_blobs(BUCKET, prefix=prefix)]
if __name__ == "__main__":
name = "invoices/2026/10/invoice-1042.pdf"
upload_invoice("invoice-1042.pdf", name)
print(download_link(name))
print(list_prefix("invoices/2026/10/"))
// Program.cs: upload an invoice, then print a signed link that expires in 15 minutes
// NuGet package: Google.Cloud.Storage.V1
using Google.Apis.Auth.OAuth2;
using Google.Cloud.Storage.V1;
using Object = Google.Apis.Storage.v1.Data.Object;
const string bucket = "acme-uploads-my-project";
const string name = "invoices/2026/10/invoice-1042.pdf";
// Application Default Credentials: a service account in Google Cloud, or your own login locally
var client = await StorageClient.CreateAsync();
// Upload with metadata; large files are sent with a resumable upload
var obj = new Object
{
Bucket = bucket,
Name = name,
ContentType = "application/pdf",
Metadata = new Dictionary<string, string> { ["team"] = "billing" }
};
using (var file = File.OpenRead("invoice-1042.pdf"))
{
await client.UploadObjectAsync(obj, file);
}
// A V4 signed URL. Signing needs a service account key; on Cloud Run or Compute Engine, sign through the IAM Credentials API instead
var credential = (await GoogleCredential.GetApplicationDefaultAsync()).UnderlyingCredential as ServiceAccountCredential
?? throw new InvalidOperationException("Use a service account key, or sign through the IAM Credentials API.");
var signer = UrlSigner.FromCredential(credential);
Console.WriteLine(await signer.SignAsync(bucket, name, TimeSpan.FromMinutes(15), HttpMethod.Get));
// List objects under a prefix, page by page
await foreach (var item in client.ListObjectsAsync(bucket, "invoices/2026/10/"))
{
Console.WriteLine($"{item.Name} {item.Size} bytes");
}
Best videos to explore
Short walkthrough videos for this service are being prepared. They will appear here and load only when you press play. Until then, follow CloudBrum on YouTube for new videos.
Interview questions
BasicWhat is Cloud Storage?
It’s Google Cloud’s object storage. You create buckets in a location, store objects in them, and read them over HTTPS with the console, gcloud storage, a client library or the JSON and XML APIs. Google handles the hardware, replication and scaling, so there’s no capacity to plan.
BasicWhat are the storage classes?
Standard is for data used often, Nearline for data used about once a month, Coldline about once a quarter, and Archive about once a year or less. All four give millisecond access through the same API, and the colder classes cost less to store and more to read, with minimum storage periods of 30, 90 and 365 days.
BasicWhat is the difference between a region, dual-region and multi-region bucket?
A region keeps data in one place and is the cheapest. A dual-region stores data in two chosen regions for resilience and low latency across both, and a multi-region spreads it across a wide area such as the US or EU. The choice is made when the bucket is created and can’t be changed afterwards.
IntermediateHow do you stop a bucket from ever being public?
Enable public access prevention on the bucket, and enforce it organisation-wide with the storage.publicAccessPrevention organisation policy. Also use uniform bucket-level access so ACLs can’t grant access, and watch Security Command Center for findings. For genuinely public content, use a load balancer with Cloud CDN or signed URLs.
IntermediateWhat does soft delete do, and what does it cost?
It keeps deleted or overwritten objects for a retention period, seven days by default and up to 90, so you can restore them. The soft-deleted data is billed as storage during that time. Raise the period for protection, or shorten or disable it on buckets that hold temporary data.
IntermediateHow do you give a mobile app time-limited access to a private object?
Create a signed URL on your back end with a service account, for one object, one method and a short expiry, and return it to the app. On Cloud Run or Compute Engine, where there’s no key file, sign through the IAM Credentials API, which needs the Service Account Token Creator role.
AdvancedCosts are rising on a bucket that has Nearline and Coldline data. What do you check?
Look at the billing export by SKU. Retrieval fees and early-deletion charges suggest data was moved to a cold class and then read or removed, and operations suggest a job listing or reading constantly. Soft-deleted data and old versions can be a surprise as well. Fix it with lifecycle rules, Autoclass for uncertain data, and a review of what reads the bucket.
AdvancedHow would you make records tamper-proof for seven years?
Create a bucket with a retention policy of seven years and lock it with Bucket Lock, which makes the policy permanent. Turn on versioning, restrict who can administer the bucket, enable Data Access audit logs, and replicate or copy the data to a bucket in another project. Test the whole process on a non-production bucket first, because a lock can’t be undone.
AdvancedHow would you move 500 TB from another cloud or an on-premises store into Cloud Storage?
Use Storage Transfer Service for cloud-to-cloud and for on-premises with transfer agents, which runs in parallel, checks integrity and can schedule incremental syncs. For slow links consider Transfer Appliance. Choose the destination class and location first so you don’t pay to change them, and keep the source live with scheduled syncs until the cutover.
AdvancedA job gets 429 errors writing to a single object name. How do you fix it?
Writes to the same object name are limited to about one per second. Change the design so each writer uses its own name, or write parts and combine them with compose. Add retries with exponential backoff and jitter, and don’t use one object as a shared log.
Similar or alternative services on other clouds
| Capability | AWS | Azure | Google Cloud |
|---|---|---|---|
| Service | Amazon S3 | Azure Blob Storage | Cloud Storage |
| Main charges | Storage, requests, retrieval from cold classes, data out | Capacity, operations, retrieval, data out, geo-replication | Storage, Class A and B operations, retrieval from cold classes, egress |
| Free allowance for new users | Free-plan credits or a small allowance (the terms changed in 2025) | A free account includes some Blob storage for twelve months | A small Always Free amount in a few US regions |
| Keeping a copy in a second place | Cross-Region replication to a bucket you choose | GRS and GZRS copy to the paired region | Dual-region buckets store data in two regions you name |
| Stopping public access | Block Public Access | Disable anonymous access on the account | Public access prevention |
| Moving data in | DataSync, Snowball, the AWS CLI | AzCopy, Storage Mover, Data Box | Storage Transfer Service, Transfer Appliance |
| Mounting as a drive | Mountpoint for Amazon S3 | BlobFuse2, or NFS on supported accounts | Cloud Storage FUSE |
| Lower latency for readers | S3 Express One Zone, or CloudFront | Premium block blob accounts, or a CDN | Anywhere Cache, or Cloud CDN |
Object storage isn't the only kind. Shared file systems for servers belong in Filestore, disks for virtual machines in Persistent Disk, and big analytical tables in BigQuery. To react when a file lands in a bucket, see Cloud Run functions.
Did you find this article helpful?
Your answer helps us improve this page for the next reader.
Sources and further reading
CloudBrum wrote this page in its own words, using the provider’s public documentation listed below as the reference. Features, limits, names and prices change, so confirm anything that matters on the provider’s own pages before you decide.
- Cloud Storage documentation: product overviewGoogle Cloud
- Cloud Storage: storage classesGoogle Cloud
- Cloud Storage: quotas and limitsGoogle Cloud
- Cloud Storage: soft deleteGoogle Cloud
- Cloud Storage: AutoclassGoogle Cloud
- Cloud Storage: uniform bucket-level accessGoogle Cloud
- Cloud Storage: public access preventionGoogle Cloud
- Cloud Storage: signed URLsGoogle Cloud
- Cloud Storage pricingGoogle Cloud
- Terraform Google provider: google_storage_bucketHashiCorp
