KubernetesnのNode Authorization
KubernetesのNode Authorizationについて調べただけの、ただのメモです
(kubeadmのドキュメント見てて利用を推奨みたいなことが書いてあったので調べてみた)
- 公式ドキュメント: https://kubernetes.io/docs/reference/access-authn-authz/node/
- 関連しそうな公式ドキュメント: https://kubernetes.io/docs/reference/access-authn-authz/authorization/
- Design Proposal: https://github.com/kubernetes/community/blob/master/contributors/design-proposals/node/kubelet-authorizer.md
- 参考記事: https://qiita.com/tkusumi/items/f6a4f9150aa77d8f9822
Node Autorizationの概要
基本は参考記事で上げた
に紹介されている通りNode (Kubelet) の権限管理をより厳密に行う機能よう
Node Authorizationを有効にしていない場合はどうなってるのかというとDesign Proposalを見ると以下のようになってる
1.6以降、kubeletにはすべてのNodeオブジェクトとPodオブジェクトへの読み取り/書き込みアクセス権があり、すべてのSecret、ConfigMap、PersistentVolumeClaim、PersistentVolumeオブジェクトへの読み取りアクセス権があります。つまり、ノードを危険にさらすと、他のノード、他のノードに属するポッドの変更、およびノードのポッドに関係のない機密データへのアクセスを許可する認証情報にアクセスできるようになります。
(Design Proposalの内容をGoogle翻訳にかけただけ)
有効にした場合は参考記事でも紹介していただいてる通り
ノードオーソライザー
- デフォルトのRBAC
system:node
クラスターの役割と同じ固定ポリシーを使用して、識別可能なノードからのリクエストを承認します - シークレット、configmap、persistentvolumeclaim、およびpersistentvolumeアクセスをさらに制限して、リクエストを行うノードにバインドされたポッドが参照するオブジェクトの読み取りのみを許可する
ノード入場
- 識別可能なノードを、自身のノードAPIオブジェクトのみを変更できるように制限する
- 識別可能なノードを、自分自身にバインドされたミラーポッドを作成できるように制限する
- 識別可能なノードを、自身にバインドされたミラーポッドのみを変更できるように制限する
- 識別可能なノードが、APIオブジェクト(シークレット、configmaps、サービスアカウント、永続的なボリュームクレーム)を参照するミラーポッドを作成できないように制限する
追加のAPI検証
- ノードにバインドされていないミラーポッドを拒否する
- ミラーポッドアノテーションを削除するポッドの更新を拒否する
となっている(↑もDesign ProposalをGoogle翻訳にかけただけ)
API ServerのデフォルトAuthorization Mode
調べた限りkube-apiserver側でのAuthorization Modeのデフォルト値というのはなさそうな印象(多分)
じゃあkubeadmだとどういうふうに設定されるのかと思って見た所
- RBAC
- Node
つまりkubeadmでKubernetesクラスターを構築した際、手動でAuthorization Modeの設定値を変えない限りはデフォルトでNode Autorizationが有効になるよう
(kubeadmでデフォルト有効にしてるということはいろんなクラウドプロバイダーでも普通は有効になってる気がする)