プロファイル適用性: レベル1
kubeletサーバ証明書のローテーションを有効にします。
RotateKubeletServerCertificate
は、クライアント認証情報のブートストラップ後にkubeletがサーバー証明書を要求し、既存の認証情報が期限切れになると証明書を更新するようにします。この自動的な定期的な更新により、証明書の期限切れによるダウンタイムが発生せず、CIAセキュリティの三要素における可用性に対処します。この推奨事項は、kubeletがAPIサーバから証明書を取得する場合にのみ適用されます。kubeletの証明書が外部の認証機関/ツール (例: Vault) から発行される場合は、証明書のローテーションを自分で管理する必要があります。
![]() |
注意Azure AKS のドキュメントでデフォルト値を確認してください。
|
監査
Audit Method 1:
Kubeletの設定ファイルを使用している場合、
RotateKubeletServerCertificate
のエントリがtrue
に設定されていることを確認してください。-
関連ノードにSSHで接続し、各ノードで次のコマンドを実行して適切なKubelet設定ファイルを見つけてください。
ps -ef | grep kubelet
上記のコマンドの出力は、Kubeletの設定ファイルの場所である--config /etc/kubernetes/kubelet/kubelet-config.json
に類似したものを返す必要があります。 -
Kubeletの設定ファイルを開く:
cat /etc/kubernetes/kubelet/kubelet-config.json
-
RotateKubeletServerCertificate
引数が存在し、true
に設定されていることを確認してください。
Audit Method 2:
APIのconfigzエンドポイントを使用する場合、Kubeletを実行しているノードからライブ構成を抽出して、
"RotateKubeletServerCertificate":true
のステータスを検索することを検討してください。-
ローカルプロキシポートと以下の変数を設定し、プロキシポート番号とノード名を提供してください。
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
を編集し、以下のパラメータがtrueに設定されていることを確認してください。"RotateKubeletServerCertificate":true
Remediation Method 2:
Kubelet設定ファイルを使用している場合、ファイルを編集して
RotateKubeletServerCertificateをtrueに設定
します。実行可能な引数を使用する場合、各ワーカーノードのkubeletサービスファイル
/etc/systemd/system/kubelet.service.d/10-kubelet-args.conf
を編集し、KUBELET_ARGS
変数文字列の末尾に以下のパラメータを追加してください。--rotate-kubelet-server-certificate=true
Remediation Method 3:
APIのconfigzエンドポイントを使用する場合、kubeletを実行しているノードからライブ構成を抽出して、
"RotateKubeletServerCertificate":
のステータスを検索することを検討してください。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