-
Notifications
You must be signed in to change notification settings - Fork 28
OpenGraph Node Edge Tables
WebbinRoot edited this page May 20, 2026
·
4 revisions
Table reference for the main node and edge types emitted by GCPwn OpenGraph.
Coverage note:
- Some edge kinds are rule-driven from
og_privilege_escalation_paths.json. - Some node types are generated dynamically from resource types.
- This page covers major emitted families and the default built-in rule kinds.
| Node Type | Meaning | Emitted By |
|---|---|---|
GoogleUser |
Human IAM principal (user:<email>) |
users/groups + IAM binding stages |
GoogleGroup |
Group principal (group:<email>) |
users/groups + IAM binding stages |
GCPServiceAccount |
Service account principal (serviceAccount:<email>) |
IAM binding + resource expansion stages |
GCPPrincipalSet |
Principal set principal (principalSet://...) |
IAM binding + resource expansion stages |
GCPDomainPrincipal |
Domain principal (domain:<domain>) |
users/groups stage |
GCPAllUsers / GCPAllAuthenticatedUsers
|
Global wildcard principal nodes | IAM binding stage |
GCPPrincipal |
Generic fallback principal type | IAM binding stage |
GCPProject |
Project resource node | IAM binding + resource expansion stages |
GCPFolder |
Folder resource node | IAM binding stage |
GCPOrganization |
Organization resource node | IAM binding stage |
GCPIamSimpleBinding |
Binding node used for principal -> binding -> resource modeling | IAM binding stage |
GCPIamMultiBinding |
Combo binding node for multi-permission rule matches | IAM binding multi-permission stage |
GCPServiceAccountKey |
Service account key node | resource expansion stage |
GCPIamCapability |
Optional intermediate capability node for combo-hop rules | IAM binding multi-permission stage |
GCPIamBinding / GCPIamGrant
|
Compatibility/internal IAM graph node aliases used by styling and export logic | internal compatibility layer |
| Node Type | Example resource family |
|---|---|
GCPBucket |
Cloud Storage |
GCPComputeInstance |
Compute Engine |
GCPCloudFunction |
Cloud Functions |
GCPCloudRunService, GCPCloudRunJob
|
Cloud Run |
GCPCloudSQLInstance |
Cloud SQL |
GCPArtifactRegistryRepo |
Artifact Registry |
GCPBigQueryDataset, GCPBigQueryTable, GCPBigQueryRoutine
|
BigQuery |
GCPPubSubTopic, GCPPubSubSubscription, GCPPubSubSchema, GCPPubSubSnapshot
|
Pub/Sub |
GCPServiceDirectoryNamespace, GCPServiceDirectoryService
|
Service Directory |
GCPCloudTasksQueue |
Cloud Tasks |
GCPKmsKeyRing, GCPKmsCryptoKey, GCPKmsCryptoKeyVersion
|
KMS |
GCPSpannerInstance, GCPSpannerDatabase
|
Spanner |
GCPSecret |
Secret Manager |
| Edge Type | Meaning | Emitted By |
|---|---|---|
GOOGLE_MEMBER_OF |
Principal is a member of a Google Group | users/groups stage |
DOMAIN_MEMBER_OF |
Principal maps into a domain node by email suffix | users/groups stage |
HAS_IAM_BINDING |
Principal contributes to a binding node | IAM binding stage |
HAS_COMBO_BINDING |
Principal contributes to a combo binding node | IAM binding multi-permission stage |
HAS_IMPLIED_PERMISSIONS |
Principal contributes to an inferred-permission binding node | inferred-permissions stage |
POLICY_BINDINGS |
Generic binding-to-target edge (mainly visible with --include-all) |
IAM binding stage |
ROLE_OWNER / ROLE_EDITOR
|
Collapsed high-signal role edges for roles/owner and roles/editor
|
IAM binding stage |
EXISTS_IN_PROJECT |
Resource is modeled inside a project | resource expansion stage |
EXECUTES_WITH |
Compute instance executes as attached service account | resource expansion stage |
GCP_SERVICE_ACCOUNT_KEY_FOR |
Service account key belongs to service account | resource expansion stage |
GCP_PRINCIPAL_SET |
Principal set includes service account membership | resource expansion stage |
Inferred-permissions builder emits edge kinds in this pattern:
INFERRED_<EDGE_KIND>
Examples:
INFERRED_RESET_COMPUTE_STARTUP_SAINFERRED_START_COMPUTE_STARTUP_SAINFERRED_CAN_MODIFY_PROJECT_IAM
OpenGraph expands Cloud Resource Manager principal sets for service accounts into explicit membership edges:
principalSet://cloudresourcemanager.googleapis.com/projects/<PROJECT_NUMBER>/type/ServiceAccountprincipalSet://cloudresourcemanager.googleapis.com/folders/<FOLDER_NUMBER>/type/ServiceAccountprincipalSet://cloudresourcemanager.googleapis.com/organizations/<ORG_NUMBER>/type/ServiceAccount
Graph shape:
principalSet://cloudresourcemanager.googleapis.com/.../type/ServiceAccount
-> GCP_PRINCIPAL_SET
-> serviceAccount:<email>
Interpretation note:
-
GCP_PRINCIPAL_SETonly models principal-set membership, not permission grants by itself. - Effective access still comes from the IAM binding path:
principalSet://... -> HAS_IAM_BINDING -> binding -> target resource - So even when a folder/org principal set member is bound at project scope, the grant still applies to that bound project resource (not arbitrary resources in other projects).
Reference: Google Cloud principal identifiers
These edge kinds come from gcpwn/mappings/og_privilege_escalation_paths.json.
CAN_MODIFY_PROJECT_IAMCAN_MODIFY_FOLDER_IAMCAN_MODIFY_ORG_IAMCAN_MODIFY_SA_IAMCAN_MODIFY_COMPUTE_INSTANCE_IAMCAN_MODIFY_ClOUD_RUN_FUNCTION_IAMCAN_IMPERSONATE_SACAN_CREATE_SA_ACCESS_TOKENCAN_CREATE_SA_KEYCAN_READ_SECRET_DATA
RESET_COMPUTE_STARTUP_SASTART_COMPUTE_STARTUP_SA-
CAN_RESET_COMPUTE_WITH_STARTUP_SCRIPT(hop edge used inside combo path) -
CAN_START_COMPUTE_WITH_STARTUP_SCRIPT(hop edge used inside combo path)
For rule definitions and customization workflow, see OpenGraph - Add Your Own Content.
Because some edge kinds are rule-driven and some node types are data-driven, the exact set can vary by environment and flags.
Use SQL to enumerate what your current workspace actually emitted:
data sql --db service "SELECT DISTINCT node_type FROM opengraph_nodes ORDER BY node_type;"
data sql --db service "SELECT DISTINCT edge_type FROM opengraph_edges ORDER BY edge_type;"- Authentication Reference
- Workspace Instructions
- Google Workspace Enumeration
- CLI Module Reference
- Enumeration Module Reference
- Exploit Module Reference
- Downloads to Disk
- Logging & Verbosity
- Data View/Export
- IAM Enumeration and Analysis Workflow
- Troubleshooting and FAQ