Cloud Bucket Exposure Checker vs. Manually Checking in the Cloud Console

Names no specific company or product — this compares against clicking through your own provider's console, a manual habit every bucket owner already has, not a company or product this could be mistaken for.

Checking the console by handThis tool
What it readsThe settings a person configured — bucket policy, ACLs, the account-level public-access toggleThe actual response an anonymous, unauthenticated request receives
Catches a policy/ACL/account-toggle conflictOnly if you know which layer wins and check the right oneYes — it sends the real request, so it reports what wins, not what any one setting says in isolation
Repeatable in CINo — a manual click-throughYes — a scriptable exit code (0 private/not-found, 1 exposed)
Catches drift after a deploy or a policy editOnly the next time someone happens to lookEvery run, on demand or on a schedule

What does checking the console by hand actually show you?

Your cloud provider's console shows you the settings you (or someone on your team) configured: a bucket policy document, an ACL grant list, an account-level "Block Public Access" toggle. That is a real, useful read of intent -- what the configuration says should happen.

Where does the by-hand check fall short?

Several independent settings can each grant or block public listing, and the console shows each one separately -- it does not always make obvious which one actually wins for an anonymous, unauthenticated request. A bucket policy statement can grant s3:ListBucket to a wildcard principal while a different admin reads only the account-level Block Public Access toggle and sees it enabled, not realising a resource-level policy can still take effect depending on how it was applied. An old ACL grant from before a stricter policy was added can persist unnoticed. A storage account's container-level "Public access level" in Azure can be set independently of the account's own "Allow Blob public access" setting, and either alone reading "restricted" does not confirm the other agrees. The only way to know for certain what an anonymous outsider receives is to actually send the anonymous request they would send -- which is what this tool does, and reading five separate settings correctly by hand does not replace.

Why does this matter for CI, not just a one-time check?

A console check is a point-in-time, manual look. A new bucket policy statement, a fresh IaC deploy, or a teammate widening an ACL for a one-off debugging session can reopen a bucket at any point after the last time someone happened to look. The CLI here returns a real exit code, so it can gate a deploy the same way a linter or test suite does -- catching a regression the day it ships rather than the next time someone thinks to open the console.

← Back to the checker