Node Authorizer 設定の確認

Node authorizer と適切なノード認証主体で kubelet の権限を制限してください。

説明

Node authorizer は、kubelet がノードの処理に必要な API 権限を使えるよう制御します。Secret や ConfigMap などへのアクセスを、そのノードに配置された Pod と関連付け、不要なノード権限を減らします。

本番環境では、一般に Node と RBAC を組み合わせます。一律に許可するモードや不十分な組み合わせは、認可を弱めるおそれがあります。

想定される影響

  • ノードの要求に、意図より広い権限が与えられる場合があります。
  • 他の設定ミスと組み合わさり、不要なリソースアクセスが許可されるおそれがあります。
  • 想定したコントロールプレーンの認可方式と異なると、安全性を確認しにくくなります。

対処方法

  • --authorization-mode または使用中の AuthorizationConfiguration で Node authorizer を有効にしてください。
  • 一般には RBAC,Node を使い、kubelet の認証主体が system:nodes グループに属し、system:node:<nodeName> 形式であることを確認してください。NodeRestriction でノードによる変更も制限してください。
  • API サーバーに AlwaysAllow などの許可範囲が広いモードが残っていないか確認してください。

例

API サーバー引数の抜粋です。イメージは実際のクラスターのバージョンに合わせてください。kubelet の認証情報、RBAC バインディング、その他の API サーバー設定は省略しています。

変更前

yaml
apiVersion: v1
kind: Pod
metadata:
  name: command-demo
spec:
  containers:
    - name: command-demo-container
      image: registry.k8s.io/kube-apiserver:v1.34.0
      command: ["kube-apiserver"]
      args: ["--authorization-mode=AlwaysAllow"]

変更後

yaml
apiVersion: v1
kind: Pod
metadata:
  name: command-demo
spec:
  containers:
    - name: command-demo-container
      image: registry.k8s.io/kube-apiserver:v1.34.0
      command: ["kube-apiserver"]
      args: ["--authorization-mode=RBAC,Node"]

補足:

  • 変更前: AlwaysAllow は要求を一律に許可し、必要な権限範囲を強制しません。
  • 変更後: RBAC,Node を有効にします。適切なノード認証主体と最小権限のバインディングも必要です。

参考資料