ビュー:
プロファイル適用性: レベル1
すべての要求を許可しないでください。明示的な承認を有効にします。
Kubeletsは、apiserverからの明示的な認可チェックを必要とせずに、認証されたすべてのリクエスト (匿名のものも含む) を許可するように設定できます。この動作を制限し、明示的に認可されたリクエストのみを許可するべきです。
注意
注意
GKEのドキュメントでデフォルト値を確認してください。

影響

GKEのドキュメントでデフォルト値を確認してください。

監査

監査方法1:
Kubeletsは設定ファイルから設定を受け入れることができ、場合によってはコマンドライン引数からも受け入れることができます。コマンドライン引数として提供されたパラメータは、設定ファイル内の対応するパラメータを上書きすることに注意することが重要です (詳細については、Kubelet CLIレファレンス--configを参照してください。どの設定パラメータがコマンドライン引数として提供できるかも確認できます)。これを念頭に置いて、Kubeletの設定を監査する際には、コマンドライン引数の存在と設定ファイルのエントリの両方を確認することが重要です。
  1. 各ノードにSSHで接続し、次のコマンドを実行してKubeletプロセスを見つけてください。
    ps -ef | grep kubelet
    上記のコマンドの出力は、アクティブなKubeletプロセスの詳細を提供します。これにより、プロセスに提供されたコマンドライン引数を確認できます。また、--config引数で指定された設定ファイルの場所にも注意してください。これは設定を確認するために必要です。
  2. ファイルはmorelessのようなコマンドで表示できます。
    sudo less /path/to/kubelet-config.json
  3. Webhook認証が有効になっていることを確認してください。これは、kubeletサービスへのコマンドライン引数として--authentication-token-webhookを使用するか、kubelet設定ファイルで"authentication": { "webhook": { "enabled": true } }として設定できます。
  4. Authorization ModeがWebHookに設定されていることを確認してください。これは、--authorization-mode=Webhookを使用してkubeletサービスへのコマンドライン引数として設定するか、"authorization": { "mode": "Webhook }を使用して設定ファイルで設定することができます。
監査方法2:
Kubernetes APIの/configzエンドポイントを通じて、Kubeletの実行中の設定を確認することも可能です。kubectlを使用してAPIへのリクエストをプロキシします。
  1. 次のコマンドを実行して、クラスター内のすべてのノードを検出します。
    kubectl get nodes
  2. kubectlを使用して、任意のローカルポートでプロキシを開始します。例:
    kubectl proxy --port=8080
  3. これを実行した状態で、別のターミナルで各ノードに対して次のコマンドを実行してください。
    export NODE_NAME=my-node-name 
    curl http://localhost:8080/api/v1/nodes/${NODE_NAME}/proxy/configz
    curlコマンドは、Kubelet構成を表すJSON形式の文字列であるAPI対応を返します。
  4. API対応で"authentication": { "webhook": { "enabled": true } }が含まれていることを確認してください。
  5. API対応で"authorization": { "mode": "Webhook" }として、Authorization ModeがWebHookに設定されていることを確認してください。

修復

修復方法1:
Kubelet設定ファイルを使用して設定する場合、まずファイルを見つけます:
  1. 各ノードにSSHで接続し、次のコマンドを実行してkubeletプロセスを見つけます。
    ps -ef | grep kubelet
    上記のコマンドの出力は、アクティブなkubeletプロセスの詳細を提供し、--config引数でkubeletサービスに提供された設定ファイルの場所を確認できます。
  2. ファイルはmorelessのようなコマンドで表示できます。
    sudo less /path/to/kubelet-config.json
  3. 次のパラメータを設定してWebhook認証を有効にします:
    "authentication": { "anonymous": { "enabled": false } }
  4. 次に、以下のパラメータを設定して、認証モードをWebhookに設定します。
    "authorization": { "mode": "Webhook }
    認証と認可フィールドの詳細は、Kubelet Configuration documentationで参照できます。
修復方法2:
  1. 実行可能な引数を使用する場合、各ワーカーノードのkubeletサービスファイルを編集し、以下のパラメータがKUBELET_ARGS変数文字列の一部であることを確認してください。
  2. systemdを使用するシステム、例えばAmazon EKS Optimized Amazon LinuxやBottlerocket AMIでは、このファイルは/etc/systemd/system/kubelet.service.d/10-kubelet-args.confにあります。
  3. それ以外の場合は、選択したOSのドキュメントを参照して、どのサービスマネージャが設定されているかを確認する必要があるかもしれません。
    --authentication-token-webhook
    --authorization-mode=Webhook
両方の修復手順について:
お使いのシステムに基づいて、kubeletサービスを再起動し、サービスのステータスを確認してください。以下の例は、Amazon EKS Optimised Amazon LinuxやBottlerocket AMIなど、systemdを使用するOS向けであり、systemctlコマンドを呼び出します。systemctlが利用できない場合は、選択したOSにどのサービスマネージャが設定されているかを確認するためのドキュメントを参照する必要があります。
systemctl daemon-reload 
systemctl restart kubelet.service 
systemctl status kubelet -l