Skip to main content

More Info:

An authorization mode of AlwaysAllow permits every authenticated request without further checks. Using Webhook authorization ensures requests to the kubelet are properly authorized.

Risk Level

Critical

Address

Security

Compliance Standards

  • CIS Kubernetes

Triage and Remediation

Remediation

Manual Steps

  1. On every control plane node, back up the API server static pod manifest and open it for editing:
  2. In the kube-apiserver container command/args section, locate any existing --authorization-mode= flag:
    • If present and set to AlwaysAllow, change it to a secure mode, for example:
    • If multiple modes are configured, ensure AlwaysAllow is not among them, for example:
    • If the flag is missing, add a new line under the other -- flags:
  3. Save the file and exit the editor. The kubelet will automatically detect the change to /etc/kubernetes/manifests/kube-apiserver.yaml and restart the kube-apiserver static pod. Be aware this temporarily restarts the API server on that control plane node.
  4. Wait for the kube-apiserver pod to become Ready again (from any machine with kubectl access):
  5. Repeat steps 1–4 on every control plane node to ensure consistent authorization configuration across the cluster.
  6. Verify on each control plane node that the API server is no longer running with --authorization-mode=AlwaysAllow:
    Confirm that the kube-apiserver process line includes --authorization-mode= and that AlwaysAllow does not appear in its value (e.g., it shows RBAC or Node,RBAC instead).
kubectl cannot modify kube-apiserver startup flags or static pod manifests on the nodes, so this finding cannot be fixed through the Kubernetes API. To remediate it, edit /etc/kubernetes/manifests/kube-apiserver.yaml directly on every control plane node as described in the Manual Steps section.