feat: scope Tailscale ACL grants by role instead of *:*:* #79
No reviewers
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!79
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "78-feat-tailscale-acl-tightening-replace-wi"
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?
Summary
src=* dst=* ip=*grant intailscale_acl.thiswith role-scoped accessgroup:developersstub ready for future onboarding (Forgejo + Woodpecker web UIs on 443)Changes
terraform/main.tf-- replaced single*:*:*grant with 4 scoped grants:autogroup:admin->*:*(full access -- SSH, kubectl, all web UIs)tag:k8s->tag:k8son*(inter-node cluster communication)tag:k8s->autogroup:adminon*(webhook callbacks, etc.)group:developers->tag:k8son443(future: Forgejo + Woodpecker web UIs only)groupsblock with emptygroup:developersstubtofu plan Output
Note: The 2 other changes (
helm_release.kube_prometheus_stackmetadata drift,kubernetes_secret_v1.dora_exporter) are pre-existing state drift unrelated to this PR.tofu fmtandtofu validateboth pass clean.Test Plan
tofu validatepassestofu fmtproduces no changestofu plan -lock=falseshows only the ACL grant change (plus pre-existing drift)Review Checklist
Related
plan-pal-e-platform-- Phase 8b (Tailscale ACL Tightening)Self-Review
Reviewed diff against all acceptance criteria from issue #78. No blockers found.
Checklist:
*:*:*grant removedautogroup:adminretains full*:*accesstag:k8sscoped to inter-node + admin-device onlygroup:developersstub with 443-only access totag:k8stofu fmtcleantofu validatepassestofu planshows only ACL change (plus 2 pre-existing drift items)Ready for human review.
Tofu Plan Output
PR #79 Review
DOMAIN REVIEW
Tech stack: OpenTofu / Terraform with the Tailscale provider (
tailscale_aclresource). Domain checklist: Terraform style, state safety, secrets handling.ACL grant analysis -- the four scoped grants replacing
*:*:*:autogroup:admin**tag:k8stag:k8s*tag:k8sautogroup:admin*group:developerstag:k8s443Funnel safety: The
nodeAttrsblock withfunnelattribute is unchanged and operates independently of ACL grants. Funnel traffic enters through the Tailscale node's own proxy, not as a tailnet peer. Public-facing funnels (Grafana, Forgejo, Woodpecker, Harbor, MinIO, Keycloak -- 7 ingresses withtailscale.com/funnel: "true") will continue to work.SSH safety: The
sshblock usesautogroup:memberwhich is orthogonal to grants. Unaffected.State safety:
tofu planshows in-place update totailscale_acl.this(no destroy/recreate). The 2 other changes noted in the plan output are pre-existing drift -- correctly called out in the PR body.Terraform style:
tofu fmtandtofu validatepass per PR body.jsonencode()wrapping is consistent with existing pattern. Comments on each grant block are clear and useful. Thegroupsblock placement (beforegrants) follows Tailscale's recommended policy ordering.Rollback: Tailscale admin console has full ACL history for instant revert.
reset_acl_on_destroy = trueandoverwrite_existing_content = trueare both present (unchanged from base). Rollback path is solid.BLOCKERS
None.
NITS
Consider whether
tag:k8s->autogroup:adminon*is too broad: Currently all ports are open from k8s nodes to admin devices. If the only use case is webhook callbacks, restricting to specific ports (e.g., 443, 8080) would tighten the policy further. However, since admin devices are inherently trusted and use cases may expand,*is a reasonable pragmatic choice. Non-blocking.group:developersempty stub: The comment says "Future stub -- populate when onboarding non-admin developers." This is good documentation. When developers are eventually added, consider whether port 443 alone is sufficient (e.g., SSH to k8s nodes for debugging would need port 22). But that is future scope -- the stub is correct as-is.SOP COMPLIANCE
78-feat-tailscale-acl-tightening-replace-wi-- references issue #78)plan-pal-e-platform-- Phase 8b)tofu planoutput included (per CLAUDE.md requirement)tofu fmtandtofu validateconfirmed passingfeat: scope Tailscale ACL grants by role instead of *:*:*)Closes #78in Related sectionPROCESS OBSERVATIONS
tofu planoutput confirms in-place update with no resource recreation.*:*:*to role-scoped grants is a meaningful security posture improvement. Combined with Phase 8a (NetworkPolicies), the platform now has defense-in-depth at both the Tailscale overlay and Kubernetes network layers.tofu apply. The safety net (Tailscale ACL history) is documented.VERDICT: APPROVED