Connecting Google Cloud Storage
Add GCS buckets with an HMAC key for a service account, why buckets are added by name, and what differs from S3 once they're connected.
What you need
GCS buckets are a Business feature, alongside Cloudflare R2 buckets and Azure migrations.
BucketPilot talks to GCS through its S3-compatible interoperability API, not the native Google API. That is what lets everything else in the product work unchanged — and it's also the source of every difference on this page, because the interop API exposes a deliberately smaller surface than GCS itself.
You need an HMAC key for a service account: Cloud Storage → Settings → Interoperability → Create a key for a service account. Paste the HMAC access key and secret. (Google's own instructions)
⚠️ A key for a service account, not for a user. Google lets you create HMAC keys for both. A user key is tied to a person and stops working when their access changes; a service-account key is what a machine integration is meant to use. Grant that service account the roles it needs on the buckets you're connecting — reading for a migration source, writing for a destination.
There is no region to choose and no account ID to paste: GCS has one endpoint, https://storage.googleapis.com, and BucketPilot sends the auto region string.
Adding the credential and the buckets
- 1.Credentials → Add credential, and pick Google Cloud Storage.
- 2.Paste the HMAC access key and secret.
- 3.Test it.
- 4.Add the bucket by name. Google Cloud Storage has no usable bucket listing over the S3-compatible interface — the call needs a project identifier that the S3 protocol has nowhere to put — so Discover buckets is not offered for it. Type the bucket name exactly as it appears in the Google Cloud console.
⚠️ Getting the bucket name wrong looks like a permissions problem, since a bucket you can't see and a bucket that doesn't exist answer much the same way. Copy it from the Google Cloud console rather than typing it.
What differs from S3
All of this follows from the interoperability API rather than from GCS itself — the native Google API supports several of these, and BucketPilot doesn't use it.
| On Google Cloud Storage | |
|---|---|
| Object versioning | Not available. Nothing in BucketPilot can restore a previous version of an object here, because there isn't one to restore — deletes and overwrites are final. Keep a backup job to a versioned bucket if you need that. |
| Lifecycle rules | Not available. The rule editor is hidden for these buckets rather than writing rules the provider would drop. |
| Per-object storage class | One class only. No storage-class column, and no tiering — there is nothing to tier to. |
| Bucket policies | Not available. The policy editor is an S3 feature; manage access in the Google Cloud console. |
| CORS | Not exposed over this interface — set it in the Google Cloud console if you need it. |
| Object tags | Stored by BucketPilot, not on the object. Google Cloud Storage answers the tagging calls with not implemented, so tags you add here live in our index — they are searchable and they survive, but a tool reading the bucket directly won't see them. |
| Inventory-based indexing | Not available — indexing is always a live scan. Fine for most buckets; see Indexing & search for what that means on a very large one. |
| Cost figures | Storage size is measured from the index, and BucketPilot does not price Google Cloud Storage for you — there are no published rates it can apply the way it does for S3. The size and object counts are real; the money column is not shown. |
Browsing, search, indexing, uploads and downloads, backups and migrations all work normally. Indexing & search → · Backups & migration →