Back to Checks
API server pod authorization mode includes RBAC
apiserver_auth_mode_include_rbac
Service: apiserverSeverity: high
OfficialBuilt-inVerified
Categories:cluster-securityidentity-access
Resource Type:Pod
Kubernetes API server authorization configuration includes the RBAC authorizer in the enabled modes, i.e., RBAC appears in the authorizer chain.
Risk
Absence of RBAC removes fine-grained, role-scoped control. Identities may gain broad or unintended access, enabling:
- Secret disclosure (confidentiality)
- Unauthorized changes to workloads/policies (integrity)
- Destructive API calls causing outages (availability)
Run this check with Prowler
Run in Prowler CloudRun
prowler kubernetes --checks apiserver_auth_mode_include_rbacRecommendation
Adopt RBAC as the primary authorizer and avoid permissive modes like AlwaysAllow or legacy ABAC.
Enforce least privilege with narrowly scoped roles and bindings, apply separation of duties, and monitor authorization activity for defense in depth.
Remediation
Other
1SSH to each control-plane node
2Edit /etc/kubernetes/manifests/kube-apiserver.yaml
3In spec.containers[].command, add or update the flag to include RBAC, for example:
4- --authorization-mode=Node,RBAC
5(If --authorization-mode already exists, append ,RBAC to its value)
6Save the file; the kubelet will restart the API server automatically
Check Code
from prowler.lib.check.models import Check, Check_Report_Kubernetes
from prowler.providers.kubernetes.services.apiserver.apiserver_client import (
apiserver_client,
)
class apiserver_auth_mode_include_rbac(Check):
def execute(self) -> Check_Report_Kubernetes:
findings = []
for pod in apiserver_client.apiserver_pods:
report = Check_Report_Kubernetes(metadata=self.metadata(), resource=pod)
report.status = "PASS"
report.status_extended = (
f"API Server authorization mode includes RBAC in pod {pod.name}."
)
rbac_auth_mode_set = False
for container in pod.containers.values():
rbac_auth_mode_set = False
for command in container.command:
if command.startswith("--authorization-mode"):
if "RBAC" in (command.split("=")[1]):
rbac_auth_mode_set = True
break
if not rbac_auth_mode_set:
break
if not rbac_auth_mode_set:
report.status = "FAIL"
report.status_extended = f"API Server authorization mode does not include RBAC in pod {pod.name}."
findings.append(report)
return findings