Skip to main content
compliance · gcp

Compute Engine VMs with interactive serial console access switched on

resource types
1
rule IDs covered
1
severity
high

What does ZopNight detect here?

Serial console access on a Compute Engine VM bypasses VPC firewalls entirely. Google's global serial gateway accepts connections from any network once serial-port-enable=true is set. ZopNight rule RC-1204 flags instances whose per-instance metadata carries that value, rated high severity. VMs enabled only through project-level metadata are invisible to the check today.

Signal and threshold

How ZopNight evaluates Compute Engine VMs with interactive serial console access switched on.
Field Value
Rule IDsRC-1204
Categorycompliance
Severityhigh
Metricnone — pure configuration read
Sourcevm_serial_port.go

A login path your firewall never sees

Interactive serial console access does not travel through your VPC. Connections go to Google’s serial gateway service, which relays them to the VM’s virtual serial port, so firewall rules, private-only networking, and the absence of an external IP all do nothing to stop it. Anyone holding the right IAM permission and a matching SSH key in metadata can reach a login prompt on the machine from any network on the internet. VPC Flow Logs never record the session, because no VPC packet is involved. For a production VM that was deliberately made unreachable from outside, serial-port-enable=true quietly reopens a door on a path most network reviews never look at.

What fires, and the blind spot to know about

Rule RC-1204 fires only when the per-instance serial-port-enable metadata item (mirrored by the discoverer into the resource’s tag sink as serial_port_enabled) is exactly true. Absent, false, or malformed data abstains. The rule therefore proves the per-instance condition, but it carries a known false-negative: GCP also honours serial-port-enable in project-level commonInstanceMetadata, applying it to every VM without an instance override, and the discoverer does not read project metadata. A fleet enabled at project scope produces zero findings today. Until that producer gap closes, audit the project by hand:

Terminal window
gcloud compute project-info describe --project my-project \
--format='value(commonInstanceMetadata.items)' | tr ',' '\n' | grep serial-port

Shutting the door

Per instance, remove or falsify the key:

Terminal window
gcloud compute instances add-metadata my-vm --zone us-central1-a \
--metadata serial-port-enable=false

For break-glass access, prefer IAP TCP tunneling: the session is IAM-gated, audited, and does not require the serial gateway.

Kill the whole class at the org

Individual findings recur as long as anyone can set the metadata key. The durable fix is the org policy constraint compute.disableSerialPortAccess, enforced at the organization or folder: with it on, the per-VM setting stops mattering, and exceptions become deliberate policy decisions rather than forgotten debugging leftovers. Serial access is usually enabled during an incident and never turned off afterwards. The org constraint is what breaks that cycle.

See it fire on your bill.

Connect an account read-only. The first findings land in minutes.

417 rule families across 353 resource types on 22 platforms. Every threshold, metric, and IAM action is documented on these pages before you grant anything.

417 rule families documented
353 resource types covered
read-only default access level
Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console· Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console·