Detection rules › Panther
GCP Access Attempts Violating IAP Access Controls
GCP Access Attempts Violating IAP Access Controls
Rule body yaml
AnalysisType: rule
Description: GCP Access Attempts Violating IAP Access Controls
DisplayName: "GCP Access Attempts Violating IAP Access Controls"
Enabled: true
Filename: gcp_access_attempts_violating_iap_access_controls.py
Reference: https://cloud.google.com/iap/docs/concepts-overview
Severity: Medium
Tests:
- ExpectedResult: true
Log:
httprequest:
latency: 0.048180s
remoteIp: 1.2.3.4
requestMethod: GET
requestSize: 77
requestUrl: http://6.7.8.9/
responseSize: 211
status: 403
userAgent: curl/7.85.0
insertid: u94qwjf25yzns
jsonpayload:
at_sign_type: type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry
remoteIp: 1.2.3.4
statusDetails: handled_by_identity_aware_proxy
logname: projects/gcp-project1/logs/requests
p_any_ip_addresses:
- 6.7.8.9
- 1.2.3.4
p_any_trace_ids:
- projects/gcp-project1/traces/dd43c6eb7046da54fa3724d2753262e6
p_event_time: "2023-03-09 23:19:25.712"
p_log_type: GCP.HTTPLoadBalancer
p_parse_time: "2023-03-09 23:21:14.47"
p_row_id: be93fccee09dd2f1b0b2d9ee16d5d704
p_schema_version: 0
p_source_id: 964c7894-9a0d-4ddf-864f-0193438221d6
p_source_label: panther-gcp-logsource
receivetimestamp: "2023-03-09 23:19:26.392"
resource:
labels:
backend_service_name: web-backend-service
forwarding_rule_name: http-content-rule
project_id: gcp-project1
target_proxy_name: http-lb-proxy-2
url_map_name: web-map-http-2
zone: global
type: http_load_balancer
severity: INFO
spanid: d75cc31c93528953
timestamp: "2023-03-09 23:19:25.712"
trace: projects/gcp-project1/traces/dd43c6eb7046da54fa3724d2753262e6
Name: Blocked By IAP
- ExpectedResult: false
Log:
httprequest:
latency: 0.048180s
remoteIp: 1.2.3.4
requestMethod: GET
requestSize: 77
requestUrl: http://6.7.8.9/
responseSize: 211
status: 302
userAgent: curl/7.85.0
insertid: u94qwjf25yzns
jsonpayload:
at_sign_type: type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry
remoteIp: 1.2.3.4
statusDetails: handled_by_identity_aware_proxy
logname: projects/gcp-project1/logs/requests
p_any_ip_addresses:
- 6.7.8.9
- 1.2.3.4
p_any_trace_ids:
- projects/gcp-project1/traces/dd43c6eb7046da54fa3724d2753262e6
p_event_time: "2023-03-09 23:19:25.712"
p_log_type: GCP.HTTPLoadBalancer
p_parse_time: "2023-03-09 23:21:14.47"
p_row_id: be93fccee09dd2f1b0b2d9ee16d5d704
p_schema_version: 0
p_source_id: 964c7894-9a0d-4ddf-864f-0193438221d6
p_source_label: panther-gcp-logsource
receivetimestamp: "2023-03-09 23:19:26.392"
resource:
labels:
backend_service_name: web-backend-service
forwarding_rule_name: http-content-rule
project_id: gcp-project1
target_proxy_name: http-lb-proxy-2
url_map_name: web-map-http-2
zone: global
type: http_load_balancer
severity: INFO
spanid: d75cc31c93528953
timestamp: "2023-03-09 23:19:25.712"
trace: projects/gcp-project1/traces/dd43c6eb7046da54fa3724d2753262e6
Name: Redirected by IAP
DedupPeriodMinutes: 60
LogTypes:
- GCP.HTTPLoadBalancer
RuleID: "GCP.Access.Attempts.Violating.IAP.Access.Controls"
Threshold: 1
Detection logic
Condition
resource.type eq "http_load_balancer"
jsonPayload.statusDetails eq "handled_by_identity_aware_proxy"
not (httprequest.status starts_with "2" or httprequest.status starts_with "3")
Exclusions
Top-level NOT(...) conjuncts: predicates this rule actively suppresses.
| Field | Kind | Excluded values |
|---|---|---|
httprequest.status | starts_with | 2 |
httprequest.status | starts_with | 3 |
Indicators
Each row is a field, operator, and value that the rule matches. The corpus column counts how many other rules in the catalog look for the same combination: high numbers point to widely-used, community-vetted indicators. Blank or 1 shows that the indicator is specific to this rule.
| Field | Kind | Values |
|---|---|---|
jsonPayload.statusDetails | eq |
|
resource.type | eq |
|
Output fields
Fields the rule emits when it matches. Chronicle authors list these in the outcome block; they appear on the detection and $risk_score drives alerting. Sentinel / Defender XDR rules build them up through project / summarize / extend stages. Sentinel maps these into alert fields via entityMappings and customDetails; Defender XDR custom detections surface them as alert fields directly.
| Field | Source |
|---|---|
remoteIp | jsonPayload.remoteIp |
requestUrl | httprequest.requestUrl |