Skip to content

RBAC: grant update on /status for globalalerts, packetcaptures, securityeventwebhooks#4853

Merged
caseydavenport merged 1 commit into
tigera:masterfrom
caseydavenport:casey-rbac-status-verbs
May 23, 2026
Merged

RBAC: grant update on /status for globalalerts, packetcaptures, securityeventwebhooks#4853
caseydavenport merged 1 commit into
tigera:masterfrom
caseydavenport:casey-rbac-status-verbs

Conversation

@caseydavenport
Copy link
Copy Markdown
Member

Several service accounts call UpdateStatus on Calico Enterprise CRDs but the operator-rendered ClusterRoles only list the parent resource, so the kube-apiserver rejects the writes with 403.

Adds the missing /status entries:

  • calico-apiserver SA (backing-storage rule in pkg/render/apiserver.go): globalalerts/status, packetcaptures/status, securityeventwebhooks/status. This is the SA that the aggregated calico-apiserver uses to write through to the underlying CRDs, so missing /status verbs here block every controller that calls UpdateStatus on these resources.
  • calico-node SA (pkg/render/node.go, enterprise-only rule): packetcaptures/status alongside the existing packetcaptures update verb. Felix's capture status writer (felix/capture_status_writer.go) calls UpdateStatus.
  • intrusion-detection-controller SA (pkg/render/intrusion_detection.go): securityeventwebhooks/status. The webhooks-processor controller runs in the IDC pod and writes status conditions on SecurityEventWebhook objects (see https://github.com/tigera/calico-private/pull/12079).

Same pattern as #4759 (managedclusters/status). KinD CI doesn't catch these because of how operator RBAC is layered on KinD vs gcp-kubeadm; the failures show up as repeated 403s in the intrusion-detection-controller and felix logs on gcp-kubeadm BPF e2e runs.

Release note

Grant operator-managed service accounts update permission on /status subresources for GlobalAlert, PacketCapture, and SecurityEventWebhook.

Several SAs need to write to /status subresources but the ClusterRoles
only grant access to the parent resource:

- calico-apiserver SA: add globalalerts/status, packetcaptures/status,
  securityeventwebhooks/status (backing-storage rule)
- calico-node SA (enterprise): add packetcaptures/status alongside
  the existing packetcaptures update verb
- intrusion-detection-controller SA: add securityeventwebhooks/status
  for the webhooks-processor controller

Surfaces on real-cluster e2e (gcp-kubeadm) as repeated 403s in
intrusion-detection-controller and felix capture status writer.
@caseydavenport caseydavenport merged commit bbad028 into tigera:master May 23, 2026
7 checks passed
@caseydavenport caseydavenport deleted the casey-rbac-status-verbs branch May 23, 2026 00:54
caseydavenport added a commit that referenced this pull request May 23, 2026
Several SAs need to write to /status subresources but the ClusterRoles
only grant access to the parent resource:

- calico-apiserver SA: add globalalerts/status, packetcaptures/status,
  securityeventwebhooks/status (backing-storage rule)
- calico-node SA (enterprise): add packetcaptures/status alongside
  the existing packetcaptures update verb
- intrusion-detection-controller SA: add securityeventwebhooks/status
  for the webhooks-processor controller

Surfaces on real-cluster e2e (gcp-kubeadm) as repeated 403s in
intrusion-detection-controller and felix capture status writer.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants