プロファイル適用性: レベル1
証明書を使用したKubelet認証の有効化
apiserverからkubeletへの接続は、ポッドのログを取得したり、実行中のポッドに (kubectlを通じて) アタッチしたり、kubeletのポートフォワーディング機能を使用するために利用されます。これらの接続はkubeletのHTTPSエンドポイントで終了します。デフォルトでは、apiserverはkubeletのサービング証明書を検証しないため、接続が中間者攻撃の対象となり、不信頼または公共のネットワーク上での実行が安全ではありません。Kubelet証明書認証を有効にすることで、apiserverがリクエストを送信する前にKubeletを認証できるようになります。
注意Azure AKS のドキュメントでデフォルト値を確認してください。
|
影響
apiserverおよびkubeletにTLSを設定する必要があります。
監査
Audit Method 1Kubelet構成ファイルを使用する場合、
"x509": {"clientCAFile:"にクライアント認証局ファイルの場所が設定されていることを確認してください。-
関連ノードにSSH接続してください。
-
各ノードで次のコマンドを実行して、適切なKubelet設定ファイルを見つけてください。
ps -ef | grep kubelet
出力は、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:"をクライアント認証局ファイルの場所に設定していることを確認してください。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" from the output of "kubectl get nodes"kubectl proxy --port=8001 & export HOSTNAME_PORT=localhost:8001 export NODE_NAME=ip-192.168.31.226.aks.internal curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"
修復
Remediation Method 1Kubelet設定ファイルを変更する場合、
kubelet-config.jsonファイル/etc/kubernetes/kubelet/kubelet-config.jsonを編集し、以下のパラメータを設定してください。"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"のステータスを検索してください。詳細な手順ごとのconfigmap手順については、ライブクラスターでノードのKubeletを再構成するを参照し、監査プロセスからcurlステートメントを再実行してkubelet構成の変更を確認してください。
kubectl proxy --port=8001 &
export HOSTNAME_PORT=localhost:8001
export NODE_NAME=ip-192.168.31.226.aks.internal
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
