説明
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を有効にします。適切なノード認証主体と最小権限のバインディングも必要です。