---
title: Connect Google Cloud Storage
description: "Create a service account and HMAC key for quickS3, then connect your Cloud Storage buckets through the S3-compatible XML API."
section: Connections
order: 90
audience: [owner]
status: published
lastVerified: 2026-09-15
sources:
  - web/src/components/app/provider-connections/ConnectionFormCard.tsx
  - web/src/components/app/BucketSelection.tsx
  - src/objects/routes/providers.cors.ts
---

quickS3 connects to Cloud Storage through its S3-compatible XML API. That uses an HMAC key, a pair that looks like an S3 access key, rather than a service-account JSON file.

## 1. Create a service account and HMAC key

1. In the Google Cloud console, create a service account just for quickS3.
2. On each bucket your team will use, give that service account a Cloud Storage role. **Storage Object User** lets it read, upload, and delete files. **Storage Object Viewer** is enough for read-only.
3. Open **Cloud Storage → Settings → Interoperability**, and under **Service account HMAC**, create a key for that service account.
4. Copy the **Access key** and **Secret**. Google only shows the secret once.

A new HMAC key can take up to a minute to start working. If your first test fails with an authentication error, wait a minute and try again.

## 2. Add the connection

1. In quickS3, open **Connections**, select **New connection**, and pick **Google Cloud Storage**.
2. Enter a **Name**.
3. In **Bucket scopes**, type your bucket names, separated by commas.
4. Paste the HMAC access key (it starts with `GOOG`) into **Access Key**, and the secret into **Secret**.
5. Keep CORS updates on and select **Connect provider**.

There's no endpoint or region to fill in. quickS3 always uses `https://storage.googleapis.com`.

Then select **Test connection**. You want **Connection verified** with "CORS allows direct uploads".

## If uploads are blocked by CORS

For quickS3 to set CORS for you, the service account needs permission to update bucket settings, such as the **Storage Admin** role on the bucket. If you'd rather not grant that, set the rule yourself. Save this as `cors.json`:

```json
[
  {
    "origin": ["https://quicks3.com"],
    "method": ["GET", "HEAD", "PUT"],
    "responseHeader": ["Content-Type", "ETag"],
    "maxAgeSeconds": 3600
  }
]
```

Then apply it with `gcloud storage buckets update gs://my-bucket --cors-file=cors.json`. This replaces the bucket's CORS rules, so first add any rules already there to the same file. Run **Test connection** again afterwards.

## Creating buckets

Overview has no **Create bucket** button for Cloud Storage connections. Create buckets in the Google Cloud console, add their names to **Bucket scopes**, and give the service account access.
