Delivery kit

Annex — Tier 2 on Google Workspace

Last changed 2026-08-18 · all documents · security & deployment

The Google equivalent of annex-tier2.md. Everything in that annex still applies — preference order, client-owned credentials, per-project credentials, checking granted scopes after consent, backup and restore, monitoring. Only the concrete triple changes: where it runs, how access is scoped, and where the secret lives.

Written as its own file rather than as a set of parentheses in the Microsoft annex, because a Workspace client should not have to read someone else's stack to find out how their own would work.

Where the code runs

Preference order, same logic as tier 2:

  1. Inside the client's own project. Two shapes, and the smaller one is usually right:
  2. Apps Script with a time-driven trigger. Lives in the client's Workspace, no cloud project to create, no billing account to argue about, and it can read Drive and Sheets natively. For a nightly aggregate over a folder of exports this is often the whole answer.
  3. Cloud Run job or Cloud Function on Cloud Scheduler, in the client's own Google Cloud project, when the work outgrows Apps Script quotas or needs a real runtime.
  4. My EU-region infrastructure with client-owned credentials — same conditions as tier 2: Art. 30 register, DPA in place first, and nothing kept between runs (extract deleted once the aggregate is built, all copies gone within seven days of the engagement ending).
  5. My VPS — only when neither fits. See annex-selfhosted.md.

Region: europe-west*. I record the configured region string from the console, not the default. Apps Script does not expose a region, which is worth stating plainly to a client who asks — the data stays inside their Workspace, but the "which region" question does not have the same crisp answer it has on Cloud Run.

Access — one folder, never the domain

The principle is identical to Sites.Selected: grant access to one container, not to a directory. Google makes the narrow path the slightly harder one, which is exactly why the broad one is so common.

Checking what was actually granted: the OAuth consent screen and the granted scopes are not always the same, so after setup I list the service account's keys and check the folder's sharing panel, and I recommend the client does too.

Secrets

Everything else from annex-tier2.md holds unchanged: injected at runtime, never committed, never logged, never pasted into chat or a ticket, and rotatable without a code change.

What differs when the client asks

Two honest answers a Workspace client is more likely to need than a Microsoft one: