Public CDN: MinIO assets bucket with public-read policy + public funnel #126
Labels
No labels
domain:backend
domain:devops
domain:frontend
status:approved
status:in-progress
status:needs-fix
status:qa
type:bug
type:devops
type:feature
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
forgejo_admin/pal-e-platform#126
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Type
Feature
Lineage
plan-pal-e-platform→ discovered scope (jersey email images unreachable)Repo
forgejo_admin/pal-e-platformUser Story
As a platform operator
I want the MinIO
assetsbucket to be publicly readableSo that images in HTML emails and public pages render correctly from any network
Context
MinIO API (
minio-api.tail5b443a.ts.net) is Tailscale-internal only. Images referenced in HTML emails (sent via Gmail API) show as broken/question marks because Gmail servers can't reach Tailscale URLs. The westside-app logo in the nav bar has the same problem in emails.Enterprise fix: S3 bucket policy makes
assetspublicly readable, public Tailscale funnel exposes the API. Other buckets (postgres_wal,tf_state_backups) stay private via default-deny — no bucket policy = 403.File Targets
terraform/main.tf— add public funnel annotation to MinIO API ingress, addminio_iam_policyormc policyfor assets bucketterraform/main.tf— MinIO bucket policy resource forassets(public-read)Files the agent should NOT touch:
postgres_walbucket config — must remain privatetf_state_backupsbucket config — must remain privateAcceptance Criteria
assetsbucket has anonymous GET (public-read) policypostgres_walandtf_state_backupsreturn 403 for anonymous requestshttps://minio-api.tail5b443a.ts.net/assets/westside/jerseys/IMG_4164.jpegloads from any browser (not on tailnet)https://minio-api.tail5b443a.ts.net/postgres_wal/returns 403 from any browserTest Expectations
curl https://minio-api.tail5b443a.ts.net/assets/westside/branding/logo.jpeg -o /dev/null -w '%{http_code}'returns 200 from non-tailnetcurl https://minio-api.tail5b443a.ts.net/postgres_wal/ -o /dev/null -w '%{http_code}'returns 403tofu plan -lock=falseConstraints
assetsbucket gets public-read. Other buckets must remain private.tofu fmt && tofu validatebefore pushChecklist
Related
pal-e-platform— project