Skip to content
Calcrivo

GCP Bucket Exposure Calculator

Score a Cloud Storage bucket's exposure from public access prevention, allUsers IAM bindings, uniform access, signed URLs, CMEK and audit logging.

Inputs

hours
objects
GB

Exposure Index

67.3/ 100

Exposure Level

High

Objects in the Exposed Path

565,651objects

Data in the Exposed Path

1,750.8GB

Signed URL Risk Points

12.3points

Dominant Exposure Path

Public access prevention is not enforced by organisation policy

Recommended Remediation

Remove the allUsers and allAuthenticatedUsers bindings, then enforce public access prevention at the organisation node

Step by step

  1. Values used

    Public access prevention = Inherited, not enforced — 20; Broadest IAM binding on the bucket = allAuthenticatedUsers objectViewer — 15; Uniform bucket-level access = Enabled, legacy ACLs removed — 0; Encryption key = Google-managed key — 4; VPC Service Controls perimeter = No perimeter — 10; Data access audit logs = ADMIN_READ only — 6; Longest signed URL lifetime = 720 hours; Objects in the bucket = 840,000 objects; Data stored in the bucket = 2,600 GB

  2. GCP Bucket Exposure

    Exposure index = public access prevention points + broadest IAM binding points + uniform-access points + CMEK points + VPC Service Controls points + audit log points + min(13, log2(signed URL hours) × 1.3), clamped to 0–100.

  3. Exposed volume

    Objects in the exposed path = object count × exposure index ÷ 100 — a linear read of how much of the bucket the scored configuration puts within reach.

  4. Exposure Index

    = 67.3 / 100

  5. Exposure Level

    = High

  6. Objects in the Exposed Path

    = 565,651 objects

  7. Data in the Exposed Path

    = 1,750.8 GB

  8. Signed URL Risk Points

    = 12.3 points

  9. Dominant Exposure Path

    = Public access prevention is not enforced by organisation policy

How it works

Cloud Storage exposure is dominated by one control — the IAM binding — so allUsers with objectAdmin alone carries 30 of the 100 points. Public access prevention is scored separately because it is an organisation-level backstop that blocks the binding from taking effect, and audit logging is included because DATA_READ logs are off by default, which means a public bucket can be drained with no trace at all. A single `gsutil iam ch allUsers:objectViewer` command is one keystroke from a public dataset, and without DATA_READ audit logs you will never know how many copies were taken before you noticed.

Formulas

GCP Bucket Exposure

Exposure index = public access prevention points + broadest IAM binding points + uniform-access points + CMEK points + VPC Service Controls points + audit log points + min(13, log2(signed URL hours) × 1.3), clamped to 0–100.

iamBinding
0–30 points for the broadest member on the bucket
publicAccessPrevention
20 points while the organisation policy is only inherited
vpcSc
10 points when no service perimeter contains the bucket

Exposed volume

Objects in the exposed path = object count × exposure index ÷ 100 — a linear read of how much of the bucket the scored configuration puts within reach.

objectCount
Objects currently stored in the bucket
exposureIndex
0–100 weighted exposure index

Frequently Asked Questions

How is GCP Bucket Exposure calculated?

Exposure index = public access prevention points + broadest IAM binding points + uniform-access points + CMEK points + VPC Service Controls points + audit log points + min(13, log2(signed URL hours) × 1.3), clamped to 0–100. Cloud Storage exposure is dominated by one control — the IAM binding — so allUsers with objectAdmin alone carries 30 of the 100 points. Public access prevention is scored separately because it is an organisation-level backstop that blocks the binding from taking effect, and audit logging is included because DATA_READ logs are off by default, which means a public bucket can be drained with no trace at all.

Why does GCP Bucket Exposure matter?

A single `gsutil iam ch allUsers:objectViewer` command is one keystroke from a public dataset, and without DATA_READ audit logs you will never know how many copies were taken before you noticed.

What values do I need to enter?

This calculator takes 9 inputs: Public access prevention, Broadest IAM binding on the bucket, Uniform bucket-level access, Encryption key, VPC Service Controls perimeter, Data access audit logs, Longest signed URL lifetime, Objects in the bucket, Data stored in the bucket. The pre-filled defaults are a realistic starting point — replace them with figures from your own environment for a result you can act on.

Why score audit logging in an exposure calculator?

Because exposure you cannot see is worse than exposure you can. Cloud Storage data access logs are disabled by default and are not retroactive, so a bucket that was public for six months with logging off leaves you unable to answer the only question that matters during the incident: what was read, and by whom.

Does uniform bucket-level access reduce exposure on its own?

It removes an entire class of it. With legacy ACLs enabled, every object can carry its own grant, so a bucket that looks private at the policy level can still contain thousands of world-readable objects. Uniform access makes the bucket policy the single answer.

You might also need