More Info:
Deploy Linux auditd logging on Container-Optimized OS nodes so kernel-level audit events from nodes are captured and shipped to Cloud Logging. This provides host-level forensic visibility.Risk Level
MediumAddress
SecurityCompliance Standards
- CIS GKE
Triage and Remediation
- Remediation
Remediation
Manual Steps
Manual Steps
-
Identify node OS and scope
- On any machine with kubectl access, list nodes and their OS images to confirm which are Container-Optimized OS:
- Decide whether you want auditd logging on all COS nodes or only on specific node pools (e.g., production).
- On any machine with kubectl access, list nodes and their OS images to confirm which are Container-Optimized OS:
-
Check for existing auditd logging DaemonSet
- On any machine with kubectl access, run:
- If a DaemonSet is present with a description indicating COS auditd logging to Cloud Logging and it is fully available on all target COS nodes, document that this control is covered and proceed to step 6 for periodic re-verification.
- On any machine with kubectl access, run:
-
Review/prepare deployment manifests (IaC or manual)
- If no suitable DaemonSet exists, download the reference manifests on your IaC workstation or any machine with kubectl:
- Open
cos-auditd-logging.yamland review: namespace, resource requests/limits, tolerations, and any labels/annotations to ensure they match your cluster standards and target only COS nodes you intend to monitor.
- If no suitable DaemonSet exists, download the reference manifests on your IaC workstation or any machine with kubectl:
-
Deploy or update the DaemonSet (change via console/CLI/IaC policy)
- If you manage manifests via IaC (Terraform, Config Sync, etc.), add
cos-auditd-logging.yamlto the appropriate repo/module and apply using your standard pipeline. - For direct CLI-based clusters, on a machine with kubectl access, you may deploy with:
- Ensure this change is reflected in your cloud provider configuration management (e.g., documenting in GKE cluster configuration or IaC) so it is reapplied if the cluster is recreated.
- If you manage manifests via IaC (Terraform, Config Sync, etc.), add
-
Verify pod rollout and coverage
- On any machine with kubectl access:
- Confirm desired number of pods equals the number of target COS nodes and that pods are in
Runningstate on those nodes.
- On any machine with kubectl access:
-
Validate logs in Cloud Logging and document decision
- In the cloud console (Logging > Logs Explorer), filter for logs from the auditd logging agent (e.g., by namespace
cos-auditdor the DaemonSet/pod name) and confirm kernel-level audit events from COS nodes are present. - Record in your security documentation whether COS auditd logging is: enabled for all COS nodes, enabled for specific node pools only (with rationale), or intentionally not enabled (with accepted risk and justification).
- In the cloud console (Logging > Logs Explorer), filter for logs from the auditd logging agent (e.g., by namespace
Using kubectl
Using kubectl
kubectl cannot enable or configure Linux auditd logging on Container-Optimized OS nodes because this control is implemented via cloud provider / managed control plane configuration and supporting DaemonSets defined in manifests. To address this finding, follow the guidance in the Manual Steps section, using the cloud console and/or IaC to deploy and manage the required auditd logging resources.
Automation
Automation

