Skip to main content

More Info:

Ensure that the audit policy created for the cluster covers key security concerns.

Risk Level

High

Address

Security

Compliance Standards

  • CIS GKE

Triage and Remediation

Remediation

Manual Steps

  1. Identify cluster type and constraints
    • On any machine with gcloud access, confirm this is a GKE cluster and note its mode (standard vs autopilot), as GKE manages the API server:
  2. Review current GKE audit/logging configuration
    • On any machine with gcloud access, check which control-plane logs are enabled (these are GKE’s effective “audit surfaces”):
    • Confirm that at least API server audit logs / control plane logs are enabled (names and options vary by GKE version; look for entries under loggingConfig.componentConfig.enableComponents such as APISERVER, AUDIT, or CONTROLPLANE).
  3. Review log sink and retention settings
    • On any machine with gcloud access, determine where logs go and for how long, as this impacts audit usefulness:
    • Verify logs are retained for a period that meets your policy (e.g., 90–365 days) and that sinks route them to an appropriate SIEM or storage location if required.
  4. Sample current audit-related events for key security concerns
    • On any machine with gcloud access, query Cloud Logging for recent events that reflect key security concerns, such as:
      • Authentication/authorization failures
      • Changes to ClusterRole, Role, RoleBinding, ClusterRoleBinding
      • Changes to Namespace, NetworkPolicy, PodSecurityPolicy/equivalent, Pod, ServiceAccount, Secret
    • Example queries:
    • Adjust filters in the Cloud Console Logs Explorer to visually verify that such actions are being logged.
  5. Compare observed logging coverage with your security requirements
    • Using your organization’s policies, confirm that the available GKE audit/control-plane logs:
      • Capture administrative actions on critical resources (RBAC, namespaces, network/security policies, workloads, service accounts, secrets).
      • Include enough context (actor, source IP, target object, verb, timestamp) to support incident response and forensics.
      • Are reliably exported and retained per policy.
    • If gaps exist that cannot be closed due to GKE’s managed nature (for example, you cannot customize the underlying /etc/kubernetes/manifests/kube-apiserver.yaml or audit policy file), document the residual risk and any compensating controls (e.g., higher-level IAM logging, workload-level audit, admission webhooks, or service mesh logs).
  6. Decide and document compliance status
    • If GKE’s built-in control-plane logging and your sinks/retention meet your documented requirements for “key security concerns,” record this control as “Covered by managed GKE audit/control plane logging; configuration not directly modifiable” and keep evidence from steps 2–4.
    • If requirements are not met and cannot be met within GKE’s constraints, mark the control as accepted risk/partially compliant, attach the evidence and rationale, and define any additional monitoring or architectural changes (e.g., moving to a more configurable environment) needed to close the gap.
kubectl cannot be used to configure or modify the API server audit policy for this control, because it is defined via the control plane’s host-level configuration in /etc/kubernetes/manifests/kube-apiserver.yaml (and, in GKE, is not user-modifiable). Please refer to the Manual Steps section for guidance on how to review this setting and what decisions are required.
How to interpret the output
  • Problems that need review:
    • Any cluster where MASTER_LOGS shows DISABLED.
    • Any project where NOT FOUND appears for ADMIN_READ, DATA_WRITE, or DATA_READ in the last hour (may indicate missing or misrouted audit/API logs, or simply no activity).
  • Because this control is MANUAL and GKE’s audit policy is not user-modifiable, these outputs are evidence for a human review, not an automatic pass/fail decision.

Additional Reading: