プロファイル適用性: レベル1 - ワーカーノード
Kubeletsの
--authorization-mode引数がAlwaysAllowに設定されていないことを確認し、明示的な認可を有効にすることでセキュリティを強化してください。apiserverからの明示的な認可チェックなしに、匿名を含むすべての認証済みリクエストを許可するように設定されたKubeletsは、セキュリティリスクを引き起こす可能性があります。この動作を制限し、明示的に認可されたリクエストのみが許可されるようにすることが重要です。--authorization-modeをより制限的な設定にすることで、認可されていないリクエストが体系的に拒否され、Kubernetes環境のセキュリティが強化されます。影響
不正なリクエストは拒否されます。
監査
監査方法1:
注意Kubeletは設定ファイルまたはコマンドライン引数で構成できます。コマンドライン引数が優先されます。Kubeletの設定を監査する際には、コマンドライン引数と設定ファイルのエントリの両方を確認してください。
|
-
各ノードにSSHで接続し、次のコマンドを実行してアクティブなKubeletプロセスの詳細を表示します。
ps -ef | grep kubelet
-
出力の --config 引数から設定ファイルの場所を特定します。次のコマンドを使用してファイルを表示します:
sudo less /path/to/kubelet-config.json
-
Webhook認証が有効になっていることを確認してください:
-
Kubeletサービスへのコマンドライン引数:
--authentication-token-webhook
-
In the Kubelet configuration file:
{ "authentication": { "webhook": { "enabled": true } } }
-
-
認証モードがWebHookに設定されていることを確認してください。
-
Kubeletサービスへのコマンドライン引数:
--authorization-mode=Webhook
-
In the Kubelet configuration file:
{ "authorization": { "mode": "Webhook" } }
-
監査方法2:
kubectlを使用してKubernetes APIの"/configz"エンドポイントを介してKubeletの実行中の構成を確認します。
-
クラスター内のすべてのノードを検出する:
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/configz -
API対応を確認してWebhook認証が有効になっていることを確認してください。
{ "authentication": { "webhook": { "enabled": true } } } -
API対応を確認して、認証モードがWebHookに設定されていることを確認してください。
{ "authorization": { "mode": "Webhook" } }
修復
方法 1:
-
各ノードにSSHで接続してください。
-
Kubeletの設定ファイルを見つける:
ps -ef | grep kubelet
-
次のコマンドで設定ファイルを表示します:
sudo less /path/to/kubelet-config.json
-
次のパラメータを設定してWebhook認証を有効にします:
{ "authentication": { "webhook": { "enabled": true } }, "authorization": { "mode": "Webhook" } } -
kubeletサービスを再起動し、そのステータスを確認します (systemdを使用しているシステムの例):
systemctl daemon-reload systemctl restart kubelet.service systemctl status kubelet -l
方法2:
-
コマンドライン引数を使用する場合、次のパラメータを含めるようにkubeletサービスファイルを編集してください。
--authentication-token-webhook --authorization-mode=Webhook -
systemdを使用しているシステムの場合、/etc/systemd/system/kubelet.service.d/10-kubelet-args.confにあるファイルを編集してください。
-
kubeletサービスを再起動し、そのステータスを確認します (systemdを使用しているシステムの例):
systemctl daemon-reload systemctl restart kubelet.service systemctl status kubelet -l
