More Info:
Container-Optimized OS is an operating system image that is designed for quick, secure deployment on Compute Engine VMs.Risk Level
MediumAddress
SecurityCompliance Standards
- APRA CPS 234 (Australia)
- BSI C5 (Germany)
- Brazil LGPD
- CCPA / CPRA (California)
- CIS Critical Security Controls v8
- CIS EKS
- CMMC 2.0
- CSA Cloud Controls Matrix v4
- DPDPA
- Digital Operational Resilience Act (EU)
- Essential 8
- ISO/IEC 27017
- ISO/IEC 27018
- ISO/IEC 27701
- KSA PDPL
- MAS Technology Risk Management (Singapore)
- MITRE ATT&CK (Cloud)
- NIS2 Directive
- NIST SP 800-171
- NYDFS 23 NYCRR 500
- SWIFT Customer Security Controls Framework
- Sarbanes-Oxley IT General Controls
- UK NCSC Cyber Assessment Framework
Triage and Remediation
- Remediation
Remediation
Manual Steps
Manual Steps
-
Identify existing node OSes
- Run on any machine with gcloud installed:
- For each node instance, check its OS:
- Run on any machine with gcloud installed:
-
Determine suitable Container-Optimized OS image
- Run on any machine with gcloud installed:
- Select the desired image family (for production, usually
cos-stable).
- Run on any machine with gcloud installed:
-
Plan node replacement (drain workload from one node at a time)
- Run on any machine with kubectl access:
- This cordons and evicts pods; ensure PodDisruptionBudgets are satisfied.
- Run on any machine with kubectl access:
-
Recreate the drained node with Container-Optimized OS
- Run on any machine with gcloud installed; first capture existing node settings:
- Delete the old instance (the MIG / GKE node pool, if used, may manage this automatically; otherwise delete manually):
- Create a replacement instance using Container-Optimized OS (adapt machine/network/SA/labels to match your cluster’s node-join mechanism, e.g., GKE node pool, kubeadm, etc.):
- Wait for the node to join the cluster, then uncordon (if applicable):
- Run on any machine with gcloud installed; first capture existing node settings:
-
Repeat for all remaining worker nodes
- Process each worker node one by one (drain → recreate with COS → uncordon) to avoid large-scale disruption.
-
Verification
- Run on any machine with gcloud and kubectl to confirm all worker nodes are using Container-Optimized OS:
- Ensure each worker node’s license string references
cos-cloudand acos-image (e.g.,cos-stable).
- Run on any machine with gcloud and kubectl to confirm all worker nodes are using Container-Optimized OS:
Using kubectl
Using kubectl
kubectl cannot change the underlying operating system image of worker nodes; this control is enforced at the host level via the node’s VM/OS configuration in your cloud provider or provisioning tooling. To address this finding, make changes where nodes are created and managed (e.g., instance templates, node pools, or IaC) as described in the Manual Steps section.
Automation
Automation

