docs(guide): record the bucket public-access policy - #10493
Merged
Conversation
allUsers on anyplot-images swapped from objectViewer (bundles storage.objects.list - the whole bucket incl. staging/ was publicly enumerable) to legacyObjectReader (get-only), applied 2026-08-19 via gcloud. Bucket IAM does not deploy with the repo, so the runbook carries the policy and the re-apply command, next to the CORS section. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Pull request overview
Documents an operational IAM change for the public anyplot-images GCS bucket (public object GET remains allowed, but public object listing is blocked) and records it in the repo’s operator-facing project guide and changelog.
Changes:
- Add a project-guide runbook section describing the intended bucket public-access policy and how to re-apply it after a rebuild.
- Add a
[Unreleased]changelog entry documenting the IAM change and rationale (prevent public enumeration ofstaging/).
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| CHANGELOG.md | Adds an [Unreleased] entry capturing the bucket IAM change and its motivation/impact. |
| agentic/docs/project-guide.md | Adds an operator runbook section detailing the bucket’s public-access/listing policy and the re-apply command. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Copilot review on #10493: the re-apply snippet only added the get-only role — if an objectViewer binding regains a foothold, that alone does not remove public listability. Both commands documented. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.
Suppressed comments (1)
agentic/docs/project-guide.md:420
- The verification guidance is overly strict about the expected HTTP status code. Google Cloud Storage listing requests can be denied with either 401 or 403 depending on the caller/auth context, so the runbook should assert that listing is denied rather than requiring exactly 401.
Never grant `allUsers` a role that includes `storage.objects.list`. To verify:
an object URL must return 200 anonymously, while
`https://storage.googleapis.com/storage/v1/b/anyplot-images/o` must return 401.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
anyplot-imagesIAM change applied 2026-08-19:allUsersswapped fromroles/storage.objectViewer(bundlesstorage.objects.list— the whole bucket, including the unreviewedstaging/prefix, was publicly enumerable) toroles/storage.legacyObjectReader(get-only). Verified live: every render URL still 200 incl. CORS; both listing APIs now denied (401/AccessDenied).agentic/docs/project-guide.mdwith the re-apply command — bucket IAM does not deploy with the repo, so a rebuild would silently drop it. Changelog entry included.Plan
Docs-only. The commit raced #10492's squash-merge (same recovery as before: cherry-picked onto merged main, stale branch deleted).
Test plan
access-control-allow-origin: *intact,allUsersholds onlylegacyObjectReader