GKE Forbidden Creation Request
Detects denied GKE API create requests from non-control-plane identities. Failed creates can indicate RBAC probing, stolen credentials with insufficient privileges, or attempts to deploy unauthorized workloads.
Elastic rule (View on GitHub)
1[metadata]
2creation_date = "2026/07/16"
3integration = ["gcp"]
4maturity = "production"
5updated_date = "2026/09/18"
6
7[rule]
8author = ["Elastic"]
9description = """
10Detects denied GKE API create requests from non-control-plane identities. Failed creates can indicate RBAC probing,
11stolen credentials with insufficient privileges, or attempts to deploy unauthorized workloads.
12"""
13false_positives = [
14 """
15 Developers or CI jobs with incomplete RBAC can generate denied creates. Tune after validating expected identities
16 and namespaces. GKE control-plane and bootstrap identities are excluded.
17 """,
18]
19from = "now-6m"
20index = ["logs-gcp.audit-*"]
21language = "kuery"
22license = "Elastic License v2"
23name = "GKE Forbidden Creation Request"
24note = """## Triage and analysis
25
26### Investigating GKE Forbidden Creation Request
27
28Denied creates outside GKE system identities often reflect reconnaissance or misconfigured automation with stolen tokens.
29
30### Investigation steps
31
32- Review `client.user.email`, `event.action`, `gcp.audit.resource_name`, `source.ip`, `user_agent.original`, and `gcp.audit.status.message`.
33- Determine whether the identity should exist and whether the target resource is sensitive (pods, secrets, RBAC).
34- Correlate with later successful creates or RBAC changes from the same actor.
35
36### False positives
37
38- New deployments where RoleBindings lag the workload; exclude approved CI service accounts after review.
39
40"""
41references = [
42 "https://kubernetes.io/docs/reference/access-authn-authz/rbac/",
43 "https://cloud.google.com/kubernetes-engine/docs/how-to/audit-logging",
44]
45risk_score = 47
46rule_id = "a76f049d-97fb-4058-9379-1bd985d523c2"
47severity = "medium"
48tags = [
49 "Domain: Cloud",
50 "Domain: Kubernetes",
51 "Data Source: GCP",
52 "Data Source: Google Cloud Platform",
53 "Use Case: Threat Detection",
54 "Tactic: Execution",
55 "Resources: Investigation Guide",
56 "Noise: Medium",
57 "Performance: Fast",
58 "Rule Type: Custom Query (KQL)",
59 "Platform: GCP",
60 "Domain: Containers",
61 "Platform: Kubernetes",
62]
63timestamp_override = "event.ingested"
64type = "query"
65setup = "The GCP Fleet integration with GKE audit logs enabled is required to be compatible with this rule."
66
67query = '''
68data_stream.dataset:gcp.audit and service.name:k8s.io and event.outcome:failure and
69event.action:*.create and
70gcp.audit.status.message:(*forbidden* or *Unauthorized*) and
71not client.user.email:(
72 "system:apiserver" or system\:kube-* or "system:cloud-controller-manager" or system\:gke-* or
73 system\:node\:* or system\:serviceaccount\:kube-system\:* or system\:serviceaccount\:gke-managed* or
74 "kubelet-bootstrap" or "kubelet-nodepool-bootstrap" or "gcp:kube-bootstrap"
75) and
76not user_agent.original:(*kubernetes/$Format)
77'''
78
79[[rule.threat]]
80framework = "MITRE ATT&CK"
81
82[rule.threat.tactic]
83id = "TA0002"
84name = "Execution"
85reference = "https://attack.mitre.org/tactics/TA0002/"
86
87[rule.investigation_fields]
88field_names = [
89 "@timestamp",
90 "client.user.email",
91 "source.ip",
92 "user_agent.original",
93 "event.action",
94 "event.outcome",
95 "gcp.audit.status.message",
96 "gcp.audit.resource_name",
97 "orchestrator.resource.name",
98 "orchestrator.namespace",
99]
Triage and analysis
Investigating GKE Forbidden Creation Request
Denied creates outside GKE system identities often reflect reconnaissance or misconfigured automation with stolen tokens.
Investigation steps
- Review
client.user.email,event.action,gcp.audit.resource_name,source.ip,user_agent.original, andgcp.audit.status.message. - Determine whether the identity should exist and whether the target resource is sensitive (pods, secrets, RBAC).
- Correlate with later successful creates or RBAC changes from the same actor.
False positives
- New deployments where RoleBindings lag the workload; exclude approved CI service accounts after review.
References
Related rules
- GKE Container Created with Excessive Linux Capabilities
- GKE Anonymous Pod Create/Update/Patch
- GKE Ephemeral Container Added to Pod
- GKE Pod Created With HostIPC
- GKE Pod Created With HostNetwork