Skip to content

RBAC reference

Default grants of the Helm chart (release tailnet-operator, namespace tailnet-system), derived from the rendered manifests, not from a cluster.

Scope

  • tailnet-operator-crds (ClusterRole): read Tailnet and TailnetIngress, write their status and finalizers. No CR spec writes, no CRD-object access.
  • tailnet-operator-workloads (ClusterRole): the children of tenant ingresses in every namespace — Secrets, ConfigMaps, Deployments, NetworkPolicies, Events; Pods read-only; cert-manager Certificates get/create/patch/delete (no Issuer or CertificateRequest access).
  • tailnet-operator (Role, operator namespace): TailnetEgress read/status/finalizers, Services, leader-election Leases, and the same workload verbs for egress children.
  • The ClusterRole/Role split documents which resources each controller touches; it does not narrow effective privilege, because Kubernetes RBAC is additive and cannot restrict create by resourceNames.
  • No wildcards, no non-resource URLs. Disabling leader election removes the Lease rule.

Reproduce

bash hack/rbac-diff.sh --check fails on drift; --write regenerates this file after a reviewed change. Both render chart defaults with Helm and need no cluster. The effective-namespace column follows the bindings: a RoleBinding limits its role to that namespace, a ClusterRoleBinding means all namespaces.

Effective rules

RoleRole namespaceEffective namespace(s)API groupsResourcesVerbsResource namesNon-resource URLs
ClusterRole/tailnet-operator-crds—cluster-widetsunaro.iotailnetgateways/statusget, patch, updateall names—
ClusterRole/tailnet-operator-crds—cluster-widetsunaro.iotailnetgatewaysget, list, patch, watchall names—
ClusterRole/tailnet-operator-crds—cluster-widetsunaro.iotailnetingresses/finalizers, tailnets/finalizersupdateall names—
ClusterRole/tailnet-operator-crds—cluster-widetsunaro.iotailnetingresses/statusget, patch, updateall names—
ClusterRole/tailnet-operator-crds—cluster-widetsunaro.iotailnetingressesget, list, watchall names—
ClusterRole/tailnet-operator-crds—cluster-widetsunaro.iotailnets/statusget, patch, updateall names—
ClusterRole/tailnet-operator-crds—cluster-widetsunaro.iotailnetsget, list, watchall names—
ClusterRole/tailnet-operator-crds—cluster-widetsunaro.iotailnetsites/statusget, patch, updateall names—
ClusterRole/tailnet-operator-crds—cluster-widetsunaro.iotailnetsitesget, list, watchall names—
ClusterRole/tailnet-operator-workloads—cluster-wide(core)configmaps, secretscreate, delete, get, list, patch, update, watchall names—
ClusterRole/tailnet-operator-workloads—cluster-wide(core)eventscreate, patchall names—
ClusterRole/tailnet-operator-workloads—cluster-wide(core)podsget, list, watchall names—
ClusterRole/tailnet-operator-workloads—cluster-wideappsdeploymentscreate, delete, get, list, patch, update, watchall names—
ClusterRole/tailnet-operator-workloads—cluster-widecert-manager.iocertificatescreate, delete, get, patchall names—
ClusterRole/tailnet-operator-workloads—cluster-widenetworking.k8s.ionetworkpoliciescreate, delete, get, list, patch, update, watchall names—
Role/tailnet-operatortailnet-systemtailnet-system(core)configmaps, secrets, servicescreate, delete, get, list, patch, update, watchall names—
Role/tailnet-operatortailnet-systemtailnet-system(core)eventscreate, patchall names—
Role/tailnet-operatortailnet-systemtailnet-system(core)podsget, list, watchall names—
Role/tailnet-operatortailnet-systemtailnet-system(core)serviceaccountscreate, delete, getall names—
Role/tailnet-operatortailnet-systemtailnet-systemappsdeploymentscreate, delete, get, list, patch, update, watchall names—
Role/tailnet-operatortailnet-systemtailnet-systemappsstatefulsetscreate, delete, get, updateall names—
Role/tailnet-operatortailnet-systemtailnet-systemcoordination.k8s.ioleasescreate, get, list, patch, update, watchall names—
Role/tailnet-operatortailnet-systemtailnet-systemnetworking.k8s.ionetworkpoliciescreate, delete, get, list, patch, update, watchall names—
Role/tailnet-operatortailnet-systemtailnet-systempolicypoddisruptionbudgetscreate, delete, getall names—
Role/tailnet-operatortailnet-systemtailnet-systemrbac.authorization.k8s.iorolebindings, rolescreate, delete, getall names—
Role/tailnet-operatortailnet-systemtailnet-systemtsunaro.iotailnetegresses/finalizersupdateall names—
Role/tailnet-operatortailnet-systemtailnet-systemtsunaro.iotailnetegresses/statusget, patch, updateall names—
Role/tailnet-operatortailnet-systemtailnet-systemtsunaro.iotailnetegressesget, list, watchall names—

Bindings

BindingNamespaceRole reference (kind/namespace/name)Subjects (kind/namespace/name, API group)
ClusterRoleBinding/tailnet-operator-crds—ClusterRole//tailnet-operator-crdsServiceAccount/tailnet-system/tailnet-operator (apiGroup=)
ClusterRoleBinding/tailnet-operator-workloads—ClusterRole//tailnet-operator-workloadsServiceAccount/tailnet-system/tailnet-operator (apiGroup=)
RoleBinding/tailnet-operatortailnet-systemRole/tailnet-system/tailnet-operatorServiceAccount/tailnet-system/tailnet-operator (apiGroup=)

Source: docs/reference/rbac.md at v0.18.0 — found a mistake? Tell us.