プロファイル適用性: レベル1
証明書を使用したKubelet認証の有効化
apiserverからkubeletへの接続は、ポッドのログを取得したり、実行中のポッドに (kubectlを通じて) アタッチしたり、kubeletのポートフォワーディング機能を使用するために使用されます。これらの接続はkubeletのHTTPSエンドポイントで終了します。デフォルトでは、apiserverはkubeletのサービング証明書を検証しないため、接続が中間者攻撃の対象となり、不信頼または公共のネットワーク上での実行が安全ではありません。Kubelet証明書認証を有効にすることで、apiserverがリクエストを送信する前にKubeletを認証できるようになります。
注意デフォルト値についてはEKSのドキュメントを参照してください。
|
影響
apiserverおよびkubeletにTLSを設定する必要があります。
監査
監査方法1:
Kubeletsは設定ファイルを介して設定を受け入れることができ、場合によってはCommand Line引数を介して設定を受け入れることもできます。Command
Line引数として提供されたパラメータは、設定ファイル内の対応するパラメータを上書きすることに注意してください。詳細については、Kubelet CLIレファレンス/参照情報の
-- configの詳細を参照してください。どの設定パラメータがCommand Line引数として提供できるかも確認できます。これを念頭に置いて、Kubeletの設定を監査する際には、Command Line引数の存在と設定ファイルのエントリを確認することが重要です。
-
各ノードにSSHで接続し、次のコマンドを実行してKubeletプロセスを見つけてください。
ps -ef | grep kubelet
上記のコマンドの出力は、アクティブなKubeletプロセスの詳細を提供します。これにより、プロセスに提供されたCommand Line引数を確認できます。また、--config引数で指定された設定ファイルの場所にも注意してください。これは設定を確認するために必要です。 -
ファイルは
moreやlessのようなコマンドで表示できます。sudo less /path/to/kubelet-config.json
-
クライアント認証局ファイルが設定されていることを確認してください。これは
--client-ca-fileのCommand Line引数を使用するか、kubelet設定ファイルで"authentication": { "x509": {"clientCAFile": <path/to/client-ca-file> } }を通じて設定できます。
監査方法2:
Kubernetes APIの/configzエンドポイントを通じて、Kubeletの実行中の設定を確認することも可能です。これは
kubectlを使用してAPIへのリクエストをプロキシすることで達成できます。-
クラスター内のすべてのノードを検出する:
kubectl get nodes
-
お好みのローカルポートで
kubectlを使用してプロキシを開始します。この例では8080を使用します。kubectl proxy --port=8080
-
別のターミナルで各ノードに対して次のコマンドを実行してください。
export NODE_NAME=my-node-name curl http://localhost:8080/api/v1/nodes/${NODE_NAME}/proxy/configzcurlコマンドは、Kubelet構成を表すJSON形式の文字列であるAPI対応を返します。 -
API対応で
"authentication": { "x509": {"clientCAFile": <path/to/client-ca-file> } }としてクライアント認証局ファイルが設定されていることを確認してください。
修復
修復方法1:
-
Kubelet設定ファイルを介して設定する場合は、各ノードにSSHで接続し、kubeletプロセスを見つけてください。
ps -ef | grep kubelet
上記のコマンドの出力は、アクティブなkubeletプロセスの詳細を提供し、--config引数でkubeletサービスに提供された設定ファイルの場所を確認できます。 -
ファイルは
moreやlessのようなコマンドで表示できます。sudo less /path/to/kubelet-config.json
-
次のパラメータを適切に設定して、クライアント認証局ファイルを構成してください。
"authentication": { "x509": {"clientCAFile": <path/to/client-ca-file> } }
修復方法2:
実行可能な引数を使用する場合、各ワーカーノードのkubeletサービスファイルを編集し、以下のパラメータが
KUBELET_ARGS変数文字列の一部であることを確認してください。systemdを使用しているシステムの場合、このファイルは
/etc/systemd/system/kubelet.service.d/10-kubelet-args.confにあります。それ以外の場合は、選択したOSにどのサービスマネージャが設定されているかを確認するために、ドキュメントを調べる必要があります。--client-ca-file=<path/to/client-ca-file>
両方の修復手順について:
お使いのシステムに基づいて、
kubeletサービスを再起動し、サービスのステータスを確認してください。以下の例は、Amazon EKS最適化Amazon LinuxまたはBottlerocket AMIのような
systemdを使用するOS向けであり、systemctlコマンドを呼び出します。systemctlが利用できない場合は、選択したOSのドキュメントを参照して、どのサービスマネージャが設定されているかを確認する必要があります。systemctl daemon-reload systemctl restart kubelet.service systemctl status kubelet -l
