Skip to content

manager.rbac.strict is a no-op; the cluster-admin binding is gated by the undocumented manager.rbac.minimal #2069

Description

@dva08

Bug description

The Capsule Helm chart v0.13.7 exposes manager.rbac.strict: true as a configuration option intended to run the controller without cluster-admin privileges. However, enabling this flag does not remove the cluster-admin ClusterRoleBinding from the controller's ServiceAccount — it only adds an aggregate ClusterRole. The controller continues to operate with cluster-admin permissions regardless of the flag value.

Reproduction steps

  1. Install Capsule via the Helm chart with manager.rbac.strict: true (chart version 0.13.7, controller image v0.13.7)
  2. Check the ClusterRoleBinding for the capsule controller:
kubectl get clusterrolebinding | grep capsule-manager
# capsule-manager-rolebinding   ClusterRole/cluster-admin   ...
3. The binding is still present and references ClusterRole/cluster-admin — strict mode has no effect on it.
Expected behavior
When manager.rbac.strict: true is set, the Helm chart should either:
- Remove the cluster-admin ClusterRoleBinding entirely, OR
- Replace it with a scoped ClusterRole that grants only the permissions Capsule actually needs
Actual behavior
The capsule-manager-rolebinding ClusterRoleBinding persists and still references ClusterRole/cluster-admin, regardless of the manager.rbac.strict flag value.
Evidence
ClusterRoleBinding (confirmed on live cluster):
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: capsule-manager-rolebinding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: capsule
  namespace: capsule-system
Helm chart values.yaml (capsule-0.13.7):
rbac:
  strict: false  # <-- When set to true, expected to remove cluster-admin binding
Controller image: ghcr.io/projectcapsule/capsule:v0.13.7
All Capsule ClusterRoleBindings:
capsule-manager-rolebinding                                     ClusterRole/cluster-admin
capsule-namespace-provisioner                                   ClusterRole/capsule-namespace-provisioner
capsule-pre-delete                                              ClusterRole/capsule-pre-delete
capsule:capsule:aggregate                                       ClusterRole/capsule:capsule:aggregate
capsule:capsule:crds                                            ClusterRole/capsule:capsule:crds

Impact
The Capsule controller runs with full cluster-admin privileges, which violates the principle of least privilege. This is a security concern for production multi-tenant clusters where defense-in-depth is important.

Environment

  • Helm chart version: capsule-0.13.7
  • Capsule controller image: ghcr.io/projectcapsule/capsule:v0.13.7
  • Kubernetes version: v1.34.5
  • CNI: Cilium v1.19.4
  • CapsuleConfiguration: default (active, reconciled)

Additional context
The manager.rbac.strict flag appears to only add an aggregate ClusterRole but does not modify or remove the existing cluster-admin binding. This may be a bug in the Helm chart template or in the Capsule controller's RBAC initialization logic.

Labels: bug, rbac, helm-chart

Metadata

Metadata

Assignees

No one assigned

    Labels

    blocked-needs-validationIssue need triage and validationbugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions