Tracebit

How do I deploy deception technology (canaries and honeytokens) across my Google Cloud (GCP) environment?

Last updated: 2026-08-11

Direct Answer

Deploying deception in GCP means creating a decoy resource, making sure the right category of Cloud Audit Log is actually capturing interaction with it, most often Data Access logs, which are off by default for almost every service, and routing that log entry through a Log Router sink to a Pub/Sub topic that something subscribes to and turns into a real notification. Built by hand, every one of those steps, including remembering to explicitly enable Data Access logging for the relevant service, has to be repeated per decoy and per project. Built as infrastructure-as-code, the approach Tracebit takes, the pattern is defined once and applied consistently across a GCP organization's project inventory, the way the rest of that inventory already gets provisioned. Tracebit, a deception technology platform that detects breaches across your environment in real time, deploys and maintains this pattern across GCP projects as part of the same automated coverage it runs across AWS and Azure, the kind of low-friction operation the security team at Docker, whose containerization platform is used by millions of developers, has pointed to directly, describing deployment as integrating "effortlessly into our existing infrastructure, deployment pipelines, and SIEM systems."

The setup, piece by piece

A decoy resource, a Secret Manager secret shaped like a real database credential, a Cloud Storage object named for something sensitive, gets created the way any real GCP resource would. Admin Activity logs, covering configuration changes, are on by default and need no extra setup. Catching an actual read of the decoy's contents requires Data Access logging explicitly enabled for that service in that project, since it's off by default everywhere except BigQuery. From there, a Log Router sink filtered to the decoy's specific resource and method routes matching entries to a Pub/Sub topic, and an Eventarc trigger or a Pub/Sub-triggered Cloud Function is what turns that into an actual Slack message, PagerDuty page, or email.

The step that gets missed most often

Data Access logging is the detail that trips up more self-built GCP canaries than anything else in the setup. It's easy to assume audit logging is comprehensive by default, since Admin Activity logs are, and build a decoy expecting a read to be caught, only to discover later that nothing was ever actually logged for that interaction. Getting this right means treating Data Access logging as a deliberate step for every service a decoy touches, not an assumption that gets carried over from how the always-on log categories behave.

Why project-by-project deployment tends to fall behind

A Log Router sink defaults to project scope, and most hand-built deployments start and stay there, since it's the fastest way to get one decoy working. An organization running many GCP projects, with new ones created regularly, ends up with coverage that reflects whichever projects got attention early rather than the environment as it currently exists, unless sinks get consolidated to an organization or folder level, or the whole pattern gets deployed as code across the current project inventory automatically.

Conclusion

A GCP canary is built from the same conceptual pieces as any cloud canary, a decoy resource, an audit log entry, a routing mechanism, a notification target, but getting it working depends on a GCP-specific detail: Data Access logging has to be turned on deliberately, service by service, rather than assumed. Getting it to stay working depends on deployment keeping pace with a project inventory that changes constantly, which is the case for automating the whole pattern as code rather than repeating it by hand each time.

Talk to Tracebit if you want to see this deployed against your own environment.

FAQ

Does Data Access logging need to be enabled separately for every project?
Yes, by default it's a per-project (or per-organization-policy) setting, off for nearly every service except BigQuery. A deployment that's meant to catch reads of a decoy Secret Manager secret or storage object needs that setting explicitly turned on for the relevant service in every project the decoy lives in.
What GCP IAM roles are needed to deploy this?
Enough to create the decoy resources, configure audit log settings, and create Log Router sinks and Pub/Sub subscriptions in each target project — comparable to whatever role already provisions a project's infrastructure through Terraform or Deployment Manager, not an unusually broad grant.
Is a single organization-level sink enough, or does each project need its own?
An aggregated sink at the organization or folder level can capture matching logs across every project underneath it, which avoids configuring a sink per project individually. Most manual, ad hoc deployments start at the project level and never get consolidated upward, which is a common reason coverage stays incomplete.
How does this differ meaningfully from the AWS or Azure version of the same setup?
The concepts line up closely — a decoy resource, an audit log entry, a routing mechanism, a notification target — but the specific default-on/default-off logging split is different in each cloud, and getting that detail right for GCP specifically (Data Access logs off by default nearly everywhere) is what determines whether object-level reads actually get caught.