ビュー:
プロファイル適用性: レベル1
kubelet構成ファイルが存在する場合は、root:rootが所有していることを確認してください。
kubeletは、--config引数で指定された設定ファイルからセキュリティ設定を含む様々なパラメータを読み取ります。このファイルが指定されている場合、ファイルの整合性を維持するためにファイルのアクセス権を制限する必要があります。ファイルはroot:rootによって所有されるべきです。
注意
注意
デフォルトのファイル所有者はroot:rootです。

影響

ファイルアクセスの許可が過剰であると、プラットフォームのセキュリティリスクが増大します。

監査

Google Cloud Consoleを使用する
  1. Google Cloud Console Kubernetes Engine pageにアクセスしてKubernetes Engineに移動します。
  2. 希望するクラスターをクリックして詳細ページを開き、次に希望するノードプールをクリックしてノードプールの詳細ページを開きます。3.
  3. 目的のノードの名前をメモしてください
  4. Google Cloud Console VM インスタンスページにアクセスして、VM インスタンスに移動します
  5. 目的のノードを見つけてSSHをクリックし、そのノードへのSSH接続を開いてください。
コマンドラインを使用する
方法1
まず、関連するワーカーノードにSSHします。
kubeletサービスが実行中かどうかを確認するには:
sudo systemctl status kubelet
出力はActive: active (running) since..を返す必要があります
各ノードで次のコマンドを実行して、適切なkubelet設定ファイルを見つけてください。
ps -ef | grep kubelet
上記のコマンドの出力は、--config /etc/kubernetes/kubelet-config.yamlのようなものを返すはずです。これはkubeletの設定ファイルの場所です。
次のコマンドを実行します。
stat -c %U:%G /etc/kubernetes/kubelet-config.yaml
上記のコマンドの出力はkubelet設定ファイルの所有権です。所有権がroot:rootに設定されていることを確認してください。
方法2
特権ポッドを作成して実行します。
ホストのファイルシステムにアクセスするために十分な権限を持つポッドを実行する必要があります。これは、hostPathボリュームを使用してノードのファイルシステムをポッドにマウントするポッドをデプロイすることで実現できます。
ホストのルートをポッド内の/hostにマウントするシンプルなポッド定義の例を次に示します。
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
これをファイル (例: file-check-pod.yaml) に保存し、ポッドを作成してください。
kubectl apply -f file-check-pod.yaml
Podが実行されると、ノード上のファイル所有権を確認するためにexecでアクセスできます。
kubectl exec -it file-check -- sh
現在、ポッド内のシェルにいますが、/hostディレクトリを通じてノードのファイルシステムにアクセスし、ファイルの所有権を確認できます。
ls -l /etc/kubernetes/kubelet-config.yaml
上記のコマンドの出力はファイルの所有権を示します。所有権がroot:rootに設定されていることを確認してください。

修復

監査手順で特定された設定ファイルの場所を使用して、次のコマンドを実行してください。
chown root:root <kubelet_config_file>