プロファイルの適用範囲:レベル1 - ワーカーノード
Kubelet認証に証明書を使用してセキュリティを強化するために、クライアントCAファイルが構成されていることを確認してください。この構成は重要であり、ポッドのログを取得したり、kubectlを使用して実行中のポッドにアタッチしたり、kubeletのポートフォワーディング機能を有効にするなどのアクティビティに使用されるapiserverからkubeletへの接続は、kubeletのHTTPSエンドポイントで終了します。デフォルトでは、apiserverはkubeletのサービング証明書を検証しないため、これらの接続は中間者攻撃に対して脆弱であり、信頼できないまたは公共のネットワーク上では安全ではありません。Kubelet証明書認証を構成することで、apiserverはリクエストを処理する前にKubeletを認証できるため、これらの相互作用を保護できます。このセットアップには、安全な通信を確保するために、apiserverとkubeletの両方でTLSが構成されている必要があります。
影響
apiserverおよびkubeletにTLSを構成する必要があります。
監査
監査方法1:
注意Kubeletは、設定ファイルまたはコマンドライン引数を介して構成できます。コマンドライン引数が優先されます。Kubeletの構成を監査する際には、コマンドライン引数と構成ファイルのエントリの両方を確認してください。
|
-
各ノードにSSH接続し、アクティブなKubeletプロセスの詳細を表示するには、次のコマンドを実行してください
ps -ef | grep kubelet
-
--config引数から設定ファイルの場所を特定し、出力からファイルを表示します
sudo less /path/to/kubelet-config.json
-
クライアント証明書認証局ファイルが設定されていることを確認してください
-
Kubeletサービスへのコマンドライン引数:
--client-ca-file=/path/to/client-ca-file
-
Kubelet設定ファイルで:
{ "authentication": { "x509": { "clientCAFile": "/path/to/client-ca-file" } } }
-
監査方法2:
kubectlを使用して、Kubernetes APIの"/configz"エンドポイントを介してKubeletの実行構成を確認してください
-
クラスター内のすべてのノードを検出します:
kubectl get nodes
-
ローカルポート(例:8080)でkubectlを使用してプロキシを開始します
kubectl proxy --port=8080
-
別のターミナルで、各ノードに対して以下のコマンドを実行してください
export NODE_NAME=my-node-name curl http://localhost:8080/api/v1/nodes/${NODE_NAME}/proxy/configz
-
API 対応を確認するために、クライアント証明書認証局ファイルが設定されていることを確認してください
{ "authentication": { "x509": { "clientCAFile": "/path/to/client-ca-file" } } }
修復
方法1:
-
各ノードにSSH接続してください。
-
Kubeletの設定ファイルを検索してください:
ps -ef | grep kubelet
-
設定ファイルを表示するには、次を使用してください:
sudo less /path/to/kubelet-config.json
-
以下のパラメータを設定して、クライアント証明書認証局ファイルを構成します
{ "authentication": { "x509": { "clientCAFile": "/path/to/client-ca-file" } } }
-
kubeletサービスを再起動し、そのステータスを確認してください(systemdを使用するシステムの例):
systemctl daemon-reload systemctl restart kubelet.service systemctl status kubelet -l
メソッド2:
-
コマンドライン引数を使用する場合は、kubeletサービスファイルを編集して、以下のパラメータを含めてください
--client-ca-file=/path/to/client-ca-file
-
systemdを使用するシステムの場合、/ etc/systemd/system/kubelet .service.d / 10-kubelet-args.confにあるファイルを編集してください。
-
kubeletサービスを再起動し、そのステータスを確認してください(systemdを使用するシステムの例):
systemctl daemon-reload systemctl restart kubelet.service systemctl status kubelet -l