プロファイル適用性: レベル1
証明書を使用したKubelet認証の有効化
apiserverからkubeletへの接続は、ポッドのログを取得したり、実行中のポッドに (kubectlを通じて) アタッチしたり、kubeletのポートフォワーディング機能を使用するために使用されます。これらの接続はkubeletのHTTPSエンドポイントで終了します。デフォルトでは、apiserverはkubeletのサービング証明書を検証しないため、接続が中間者攻撃の対象となり、不信頼または公共のネットワーク上での実行が安全ではありません。Kubelet証明書認証を有効にすることで、apiserverがリクエストを送信する前にKubeletを認証できるようになります。
![]() |
注意デフォルト値についてはAzure AKSのドキュメントを参照してください。
|
影響
apiserverおよびkubeletにTLSを設定する必要があります。
監査
Audit Method 1:
Kubelet構成ファイルを使用している場合、クライアント証明書認証局ファイルの場所に設定された
"x509": {"clientCAFile": "/path/to/ca.crt"}
のエントリがあることを確認してください。-
該当するノードにSSHで接続し、次のコマンドを実行してKubeletの設定ファイルを見つけてください。
ps -ef | grep kubelet
出力は--config /etc/kubernetes/kubelet/kubelet-config.json
に類似したものを返す必要があります。 -
Kubeletの設定ファイルを開く:
sudo more /etc/kubernetes/kubelet/kubelet-config.json
-
"x509": {"clientCAFile:"
が存在し、クライアント証明書認証局ファイルの適切な場所に設定されていることを確認してください。 -
"x509": {"clientCAFile:"
引数が存在しない場合、--config
で指定されたKubelet設定ファイルがあり、そのファイルが"authentication": { "x509": {"clientCAFile:"
をクライアント証明書認証局ファイルの場所に設定していることを確認してください。
Audit Method 2:
APIのconfigzエンドポイントを使用する場合、Kubeletを実行しているノードからライブ構成を抽出して、
"authentication"... "x509": {"clientCAFile": "/etc/kubernetes/pki/ca.crt"}
のステータスを検索することを検討してください。-
ローカルプロキシポートと以下の変数を設定し、プロキシポート番号とノード名を提供してください。
HOSTNAME_PORT="localhost-and-port-number"
NODE_NAME="The-Name-Of-Node-To-Extract-Configuration" を "kubectl get nodes" の出力から取得
kubectl proxy --port=8001 & export HOSTNAME_PORT=localhost:8001 (example host and port number) export NODE_NAME=ip-192.168.31.226.aks.internal (example node name from "kubectl get nodes") curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"
修復
Remediation Method 1:
Kubeletの設定ファイルを変更する場合、
/etc/kubernetes/kubelet/kubelet-config.json
を編集し、以下のパラメータをfalseに設定してください。"authentication": { "x509": {"clientCAFile:" to the location of the client CA file.
Remediation Method 2:
実行可能な引数を使用する場合、各ワーカーノードのKubeletサービスファイル
/etc/systemd/system/kubelet.service.d/10-kubelet-args.conf
を編集し、KUBELET_ARGS
変数文字列に次の内容を追加してください。--client-ca-file=<path/to/client-ca-file>
Remediation Method 3:
APIのconfigzエンドポイントを使用する場合、Kubeletを実行しているノードからライブ構成を抽出して、
"authentication.*x509": {"clientCAFile": "/etc/kubernetes/pki/ca.crt"}
のステータスを検索することを検討してください。Kubernetes ドキュメントで手順を追ったconfigmapの手続きを確認し、監査プロセスからcurlコマンドを再実行してkubeletの設定変更を確認してください。
kubectl proxy --port=8001 & export HOSTNAME_PORT=localhost:8001 (example host and port number) export NODE_NAME=ip-192.168.31.226.aks.internal (example node name from "kubectl get nodes") curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"
For all three remediations:
kubelet
サービスを再起動し、ステータスを確認してください。systemctl daemon-reload systemctl restart kubelet.service systemctl status kubelet -l