> ## Documentation Index
> Fetch the complete documentation index at: https://cloudanix.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Ensure Kubelet Configuration File Permissions Restrictive

### More Info:

Ensure that the kubelet.conf file has permissions of 644 or more restrictive

### Risk Level

Medium

### Address

Security

### Compliance Standards

* APRA CPS 234 (Australia)
* BSI C5 (Germany)
* Brazil LGPD
* CCPA / CPRA (California)
* CIS Critical Security Controls v8
* CIS GKE
* 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

<Tabs>
  <Tab title="Remediation">
    ### Remediation

    <AccordionGroup>
      <Accordion title="Manual Steps" defaultOpen="true">
        1. On every worker node, check the current permissions of the kubelet configuration file:
           ```sh theme={null}
           stat -c permissions=%a /etc/kubernetes/kubelet-config.yaml
           ```

        2. On every worker node, set the file permissions to 644 as required:
           ```sh theme={null}
           chmod 644 /etc/kubernetes/kubelet-config.yaml
           ```

        3. (Optional, on every worker node) Confirm file ownership is appropriate for your environment (commonly root:root):
           ```sh theme={null}
           ls -l /etc/kubernetes/kubelet-config.yaml
           ```

        4. On every worker node, verify the permissions are now compliant:
           ```sh theme={null}
           stat -c permissions=%a /etc/kubernetes/kubelet-config.yaml
           ```
      </Accordion>

      <Accordion title="Using kubectl">
        kubectl cannot modify file permissions on node-local paths such as `/etc/kubernetes/kubelet-config.yaml`; this must be fixed directly on every worker node via host-level access (for example, SSH). Refer to the Manual Steps section for the exact commands to run on each node.
      </Accordion>

      <Accordion title="Automation">
        ```bash theme={null}
        #!/usr/bin/env bash
        #
        # Remediation: Ensure kubelet configuration file permissions are 644 or more restrictive
        # Scope: Run on every worker node
        # Idempotent: Yes, safe to re-run

        set -euo pipefail

        KUBELET_CONF="/etc/kubernetes/kubelet-config.yaml"

        echo "=== CIS GKE 3.1.3: Ensure Kubelet Configuration File Permissions Restrictive ==="

        # 1. Check if the kubelet configuration file exists
        if [ ! -e "$KUBELET_CONF" ]; then
          echo "File not found: $KUBELET_CONF"
          echo "Nothing to change on this node."
          exit 0
        fi

        # 2. Show current permissions
        CURRENT_PERMS="$(stat -c '%a' "$KUBELET_CONF")"
        echo "Current permissions on $KUBELET_CONF: $CURRENT_PERMS"

        # 3. Apply restrictive permissions (644) if needed
        if [ "$CURRENT_PERMS" != "644" ]; then
          echo "Setting permissions on $KUBELET_CONF to 644..."
          chmod 644 "$KUBELET_CONF"
        else
          echo "Permissions already set to 644. No change needed."
        fi

        # 4. Verification (same logic as audit command)
        echo "Verifying resulting permissions..."
        FINAL_PERMS="$(stat -c 'permissions=%a' "$KUBELET_CONF")"
        echo "$FINAL_PERMS"

        if [ "$FINAL_PERMS" != "permissions=644" ]; then
          echo "ERROR: Expected permissions=644 but found $FINAL_PERMS"
          exit 1
        fi

        echo "Success: $KUBELET_CONF permissions are correctly set to 644."
        ```

        Usage:

        * Copy this script to a file, for example `/usr/local/sbin/fix-cis-gke-3.1.3.sh`.
        * Run on every worker node as root:

        ```bash theme={null}
        bash /usr/local/sbin/fix-cis-gke-3.1.3.sh
        ```
      </Accordion>
    </AccordionGroup>
  </Tab>
</Tabs>

### Additional Reading:

* [https://kubernetes.io/docs/admin/kubelet/](https://kubernetes.io/docs/admin/kubelet/)
