Skip to main content
orphan · gcp

Compute Engine disk snapshots older than 90 days that still bill for storage

resource types
1
rule IDs covered
1
severity
low

What does ZopNight detect here?

Compute Engine standard snapshots incur monthly storage charges for as long as they exist. ZopNight flags any snapshot 90 days or older, based on its `creationTimestamp`, and prices the saving from the snapshot's stored gigabytes at its per-GB snapshot storage rate. Recent snapshots and snapshots it cannot date or price are left out.

Signal and threshold

How ZopNight evaluates Compute Engine disk snapshots older than 90 days that still bill for storage.
Field Value
Rule IDsRC-143
Categoryorphan
Severitylow
Metricnone — pure configuration read
Thresholdsnapshot age 90 days or more
Evaluation window90d
SourceZopNight
Permissions usedcompute.snapshots.list · compute.snapshots.get · compute.disks.list

Snapshot storage bills until the snapshot is deleted

Google’s disk and image pricing says standard snapshots “incur monthly storage charges as long as they exist in your project”. The charge is for the compressed data stored, not the size of the source disk, and snapshots are incremental, so each one holds only what changed since the previous snapshot in the chain.

That makes old snapshots easy to ignore: each looks small, nobody remembers why it was taken, and a project that snapshots before every release can build up a long tail of them.

Listing snapshots older than 90 days

gcloud filters accept ISO 8601 durations, so this lists snapshots created more than 90 days ago with their source disk and stored bytes:

Terminal window
gcloud compute snapshots list \
--filter="creationTimestamp<-P90D" \
--format="table(name,sourceDisk,storageBytes,creationTimestamp)"

To see every snapshot of one disk, filter on sourceDisk, as shown in Google’s snapshot management guide.

Age is the trigger, not existence

ZopNight reads each snapshot’s creation time and fires once the snapshot is at least 90 days old. A snapshot that exists but is younger than that is never flagged, however many there are, and there is no size threshold.

Snapshots it does not report

If the creation time is missing or cannot be read, the snapshot is skipped rather than assumed old. If ZopNight has no storage size or no per-GB rate for the snapshot, it stays silent instead of reporting a zero. Snapshots whose source disk has already been deleted are tracked as a separate group in ZopNight’s inventory and are not evaluated here.

Pricing the saving from stored gigabytes

Terminal window
saving = snapshot stored GB x per-GB-month snapshot storage rate for that snapshot

Treat it as an upper bound. Google notes that when you delete a snapshot in a chain, “some of its data may move to the next incremental snapshot”, which adds storage to that later snapshot. Deleting the oldest snapshot of a disk that still has newer ones usually frees less than its listed size.

Clearing out stale snapshots

  1. Check the snapshot’s labels and description for a retention reason (audit, legal hold, golden image).
  2. Confirm a newer snapshot of the same disk exists, or that the disk is gone and the data is not needed.
  3. Delete it: gcloud compute snapshots delete SNAPSHOT_NAME.
  4. Stop the pile from coming back by moving the disk to a snapshot schedule with --max-retention-days, as described on GCP Persistent Disk Without Snapshot.

See it fire on your bill.

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

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

472 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·