Profile applicability: Level 1
Ensure that if the kubelet configuration file exists, it is owned by 
root:root.The kubelet reads various parameters, including security settings, from a config file
               specified by the 
--config argument. If this file is specified you should restrict its file permissions to maintain
               the integrity of the file. The file should be owned by root:root.
NoteThe default file ownership is  
root:root. | 
Impact
Overly permissive file access increases the security risk to the platform.
Audit
Using Google Cloud Console
- Go to Kubernetes Engine.
 - Click on the desired cluster to open the Details page, then click on the desired Node pool to open the Node pool Details page.
 - Note the name of the desired node.
 - Go to VM Instances.
 - Find the desired node and click on SSH to open an SSH connection to the node.
 
Using Command Line
Method 1: SSH to the worker nodes
- To check to see if the Kubelet Service is running:
                        
sudo systemctl status kubelet
 - The output should return 
Active: active (running) since.... Run the following command on each node to find the appropriate Kubelet config file:ps -ef | grep kubelet
 - The output of the above command should return something similar to 
--config/etc/kubernetes/kubelet/kubelet-config.yaml, which is the location of the Kubelet config file. - Run this command :
                        
stat -c %U:%G /etc/kubernetes/kubelet/kubelet-config.yaml
 - The output of the above command gives you the Kubelet config file's ownership. Verify
                        that the ownership is set to 
root:root. 
Method 2: Create and Run a Privileged Pod
- Run a pod that is privileged enough to access the host's file system by deploying
                        a pod that uses the hostPath volume to mount the node's file system into the pod.
                        Here's an example of a simple pod definition that mounts the root of the host to /host
                        within the pod:
                        
apiVersion: v1 kind: Pod metadata: name: file-check spec: volumes: - name: host-root hostPath: path: / type: Directory containers: - name: nsenter image: busybox command: ["sleep", "3600"] volumeMounts: - name: host-root mountPath: /host securityContext: privileged: true
 - Save this to a file (e.g., file-check-pod.yaml) and create the pod:
                        
kubectl apply -f file-check-pod.yaml
 - Once the pod is running, you can exec into it to check file ownership on the node:
                        
kubectl exec -it file-check -- sh
 - Now you are in a shell inside the pod, but you can access the node's file system through
                        the /host directory and check the ownership of the file:
                        
ls -l /etc/kubernetes/kubelet/kubelet-config.yaml
 - Verify that the ownership is set to 
root:root. 
Remediation
Run the below command (using the config file location identified in the Audit step):
chown root:root <kubelet_config_file>
		