Skip to content

feat: Add dynamic admission controller section to scs 0217#1106

Open
viccuad wants to merge 2 commits intoSovereignCloudStack:mainfrom
viccuad:feat/dyn-adm-controller
Open

feat: Add dynamic admission controller section to scs 0217#1106
viccuad wants to merge 2 commits intoSovereignCloudStack:mainfrom
viccuad:feat/dyn-adm-controller

Conversation

@viccuad
Copy link

@viccuad viccuad commented Feb 18, 2026

Dynamic Admission Controllers from Policy Engines constitute a special attack surface.

From the SIG security threat model, the majority of mitigations are implemented by policy engines and cluster operators.

But cluster providers must enable mutual TLS for secure consumption of Kubernetes API webhooks, and cluster operators must use a policy engine that authenticates against those TLS-terminated webhooks (not all policy engines do).

this, the Kubernetes API server MUST be configured with mutual TLS
authentication for the Webhooks (see [Kubernetes
docs](https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#authenticate-apiservers))
. The Policy Engine MUST be able to authenticate the API server and MUST be
Copy link
Author

@viccuad viccuad Feb 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As an example, here's the threat model for Kubewarden, and the documentation on how to generally configure a cluster API server & Kubewarden, or specifically configure both a K3s API server & Kubewarden as well.

@viccuad viccuad force-pushed the feat/dyn-adm-controller branch 2 times, most recently from 85bfd66 to e4d0aa3 Compare February 18, 2026 10:39
Dynamic Admission Controllers from Policy Engines constitute a special
attack surface.

From the SIG security threat model, the majority of mitigations are
implemented by policy engines and cluster operators.

But cluster providers must enable mutual TLS for secure consumption of
Kubernetes API webhooks, and cluster operators must use a policy engine
that authenticates against those TLS-terminated webhooks (not all policy
engines do).

Signed-off-by: Víctor Cuadrado Juan <vcuadradojuan@suse.de>
@viccuad viccuad force-pushed the feat/dyn-adm-controller branch from e4d0aa3 to f6d3a0d Compare February 18, 2026 11:07
@fkr fkr requested review from cah-hbaum and removed request for depressiveRobot and fkr March 4, 2026 11:29
@fkr
Copy link
Member

fkr commented Mar 4, 2026

I removed couple people from the review assignment, I don't have any insights into this topic.
Maybe @jschoone @janiskemper @batistein or others could comment / review this PR.

@batistein
Copy link
Contributor

Makes sense for policy engines specifically. They see every admission request, sensitive data included, so the attack surface is real. No argument there.

But the blanket MUST is too broad for a few reasons:

  1. Most SCS clusters don't run a policy engine. The requirement adds real operational overhead for clusters where this threat just doesn't exist.
  2. ClusterIP + NetworkPolicies already make threats 8 & 9 quite hard to pull off. You'd need to already be inside the cluster network. That's not nothing.
  3. --admission-control-config-file is painful across distributions. A hard MUST here is going to be difficult to conform to in practice.

Would make more sense to split it:

  • MUST if a policy engine is deployed
  • RECOMMENDED for everything else

That way the strong requirement lands where the risk actually is.

@fkr
Copy link
Member

fkr commented Mar 4, 2026

thanks @batistein for your commentary. Much appreciated!

@viccuad
Copy link
Author

viccuad commented Mar 6, 2026

Would make more sense to split it:

* `MUST` if a policy engine is deployed

* `RECOMMENDED` for everything else

Totally agree here, that was the original intention indeed. There's no need to enable this K8s hardening feature if the underlying dynamic admission feature is not being used.

Added commit with a clarification, hope that's enough!

Signed-off-by: Víctor Cuadrado Juan <vcuadradojuan@suse.de>
@viccuad viccuad force-pushed the feat/dyn-adm-controller branch from 98e142d to 6c7e95f Compare March 6, 2026 09:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants