Kubernetes のクライアント証明書 CA 設定の確認

クライアント証明書を使用する場合は、信頼する CA と実際の認証動作を確認してください。

説明

クライアント証明書で kube-apiserver や kubelet に接続する場合、信頼する CA を適切に設定する必要があります。--client-ca-file または authentication.x509.clientCAFile は、クライアントの身元を検証する CA 証明書を指定します。ファイルの拡張子だけで証明書の内容や信頼範囲が決まるわけではありません。

他のサポートされる認証方式も使用できるため、この CA 設定の有無だけで匿名アクセスが許可されるとは判断できません。認証とは別に認可ポリシーも確認してください。

想定される影響

  • CA の誤りや利用できないファイルにより、正規のクライアントが認証に失敗する可能性があります。
  • 信頼範囲が広すぎると、意図しない証明書で身元を主張でき、認可設定によってはアクセスのリスクが高まります。

対処方法

  • 証明書認証が必要なら、信頼する CA の PEM 証明書バンドルを指定し、実際のパス、マウント、読み取り権限を確認してください。
  • CA の発行・置き換え権限を制限し、証明書の有効期間と必要なユーザー・グループ権限を確認してください。
  • 承認された証明書が成功し、信頼しない証明書が拒否され、必要な認可ポリシーが適用されることをテストしてください。

例

kubelet の CA パスだけを比較する抜粋です。foo/bar はイメージのプレースホルダーであり、実際の kubelet、設定、ファイルのマウントは別途必要です。

変更前

yaml
apiVersion: v1
kind: Pod
metadata:
  name: kubelet
spec:
  containers:
    - name: kubelet
      image: foo/bar
      command:
        - "kubelet"
      args:
        - "--client-ca-file=/var/lib/ca.txt"

ca.txt という名前でも有効な PEM CA 証明書を格納できます。実際の内容と、信頼する発行元であるかを確認してください。

変更後

yaml
apiVersion: v1
kind: Pod
metadata:
  name: kubelet
spec:
  containers:
    - name: kubelet
      image: foo/bar
      command:
        - "kubelet"
      args:
        - "--client-ca-file=/var/lib/ca.pem"

ca.pem のパスを指定します。名前を変えるだけで正しい認証が保証されるわけではないため、実際の CA 証明書とクライアント認証を検証してください。

参考資料