main.tf. It is the complete, exact set of read-only permissions the 0Labs scanner
role grants. There are zero write/mutate verbs. A security team can diff this directly against
the running custom role.
The keyless, broker-based model
0Labs never holds keys. The scanner service account lives in your project; the only trust you grant isroles/iam.serviceAccountTokenCreator for 0Labs’ published broker principal on that
scanner SA — i.e. permission to mint a short-lived token as the read-only scanner SA, nothing
else.
Broker principal (stable, publishable):
Read permissions (all scopes)
These apply to every connector — organization or project scope.Organization-scope extras
When you onboard at organization scope, the role additionally includes resource-hierarchy enumeration so 0Labs can discover all current and future projects to scan. These are added only for org scope — GCP rejects folder/org-level permissions inside a project-level custom role.The standalone security-reviewer reference
If a security reviewer wants the canonical source rather than this table, the list is curated and least-privilege in the module itself:- File:
main.tfinterraform-google-zerolabs-connector - Locals:
read_permissions(all scopes) andorg_only_permissions(org scope only) - Custom role title:
Agent0 Read-Only Scanner
The custom role description states it plainly: “Read-only config/IAM access for 0Labs posture
scanning. No write permissions.”