Google Cloud Storage Bring your own bucket

SFTP to Google Cloud Storage, through the XML API

Google Cloud Storage has no SFTP endpoint, but its XML API speaks the S3 protocol with HMAC keys. CloudFile uses it to write partner uploads straight into your GCS bucket, with a service account that only has access to that bucket.

Google Cloud Storage with CloudFile, at a glance.

Endpointhttps://storage.googleapis.com (the XML API), region auto
URL stylePath-style
CredentialsAn HMAC key for a service account with the Storage Object User role on one bucket. Not a JSON key file.
LocationsAny Cloud Storage location, e.g. europe-west3 (Frankfurt). Google accepts any region value when signing.
Pricing modelStorage per GB-month by location and class, operations per request, and egress per GB. Soft delete is on by default for 7 days and billed.

Google Cloud Storage prices are from their public website as of October 2026, excluding taxes. Your bucket is billed by Google Cloud Storage, not by us, and doesn't count toward your plan's storage.

Why pair SFTP with Google Cloud Storage.

  • Stay inside Google Cloud

    Files land in a bucket governed by your IAM, organization policies and audit logs, next to BigQuery, Dataflow and Cloud Run.

  • Trigger Google Cloud services

    New objects are ordinary GCS objects, so storage triggers for Cloud Run functions still fire. CloudFile's signed webhooks are an alternative.

  • One bucket, one role

    Grant Storage Object User on the bucket only. The service account has no project-wide roles.

  • No SFTP VM on Compute Engine

    Skip the VM with gcsfuse and an SSH daemon. CloudFile runs the server and keeps it patched.

How it works, in three steps.

  1. Step 1

    Create a bucket, service account and HMAC key

    Create a Standard bucket with uniform access. Grant a new service account Storage Object User on it, then create an HMAC key under Settings → Interoperability.

    [email protected] roles/storage.objectUser HMAC ✓
  2. Step 2

    Connect it in CloudFile

    Storage → Add bucket → Google Cloud Storage. Paste the HMAC access key and secret; the endpoint and region are preset.

    https://storage.googleapis.com auto ✓ test passed
  3. Step 3

    Uploads go to GCS

    Each user writes under its own prefix. A webhook or a Cloud Storage trigger starts your pipeline.

    acme → gs://acme-sftp/acme/exports/q3.csv

Every click and field is in the Google Cloud Storage setup guide.

What your partners see, and where it lands in Google Cloud Storage.

Partner's terminal$ sftp -P 22000 [email protected] sftp> put invoice-2026-10.pdf sftp> ls invoice-2026-10.pdfYour Google Cloud Storage bucket<bucket>/<folder>/acme/invoice-2026-10.pdf <bucket>/<folder>/_shared/inbox/…
  • Any SFTP, FTPS or FTP client: FileZilla, WinSCP, Cyberduck, the sftp command or their own system. WebDAV too, if you turn it on.

  • Their own home folder as /, and nothing else. They never see the bucket name, other users' folders or your keys.

  • A password, an SSH key or both, with the permissions you pick: full access, read only or upload only.

  • Shared folders at /shared/<name> when several users need the same files. They live under _shared/<name>/ in your Google Cloud Storage bucket.

Get these right in Google Cloud Storage.

  • Soft delete keeps deleted files for 7 days by default, and they're billed. Consider turning it off (retention 0) for a busy drop folder.

  • Use the Standard storage class. Nearline, Coldline and Archive have minimum storage durations and retrieval fees.

  • Organization policies such as constraints/storage.restrictAuthTypes or iam.disableServiceAccountKeyCreation can block HMAC keys. Ask an admin to allow them for the project.

Questions about SFTP on Google Cloud Storage.

Does CloudFile support Google Cloud Storage natively?

It uses Cloud Storage's S3-compatible XML API with HMAC keys, which Google documents for exactly this kind of tool. You don't need a JSON key file.

Service account or user account HMAC key?

A service account key. Google recommends service accounts for production, and access doesn't break when a person leaves. You can have up to 10 HMAC keys per service account.

I shared the bucket but the test says Access denied.

Buckets with uniform bucket-level access ignore ACLs. Grant the IAM role Storage Object User on the bucket's Permissions tab. Changes can take a minute.

Can I trigger a Cloud Run function on upload?

Yes. Use a Cloud Storage trigger on the bucket as you normally would, or add a CloudFile listener that POSTs to the function with a signed payload and a download link.

More in the docs: Google Cloud Storage setup · Your own bucket · Webhooks

Other providers work the same way.

Connect your Google Cloud Storage bucket in a minute. Free for 7 days, no card needed.