🍣

KubernetesのRBACを可視化して概観する

2021/01/08に公開

Motivation

CKAやCKADを受験し、RBACの基礎は理解したが活用するためには理解が足りていない。
CKS受験を機に、Kubernetesが保持しているRBAC関連リソースを可視化して概観する方法をまとめる。

ここで紹介する2つのツールは下記のKubeWeeklyまとめ記事にて一言で紹介されている。
https://qiita.com/inajob/items/95c5bb1af83282f3e934
一方で、実際に動かしてみた話などはQiitaを探してもなかったため、記事としてまとめることにした。

RBACの概要

誰(Subject)が、何(Object)を、どうする(Verb)というSVOの形で権限管理する手法のこと。
Subjectの部分をRoleとすることで、「特定のRoleを持つ人々が、何かを、どうする」という形式で、人が直観的に理解しやすい形の権限管理を行うことができる。

RBACはSVOの3つの要素で権限管理できるため、REST APIと相性がいい。
RESTで行っている操作は「あるクライアントPCが、URL内の/versionを、取得(HTTP GET)する」などと表現できるため、APIアクセスのタイミングで顕現管理を行うことができる。

KubernetesのRBAC

Kubernetesが提供するAPIもREST APIとして提供され、通常はkubectlなどのクライアントの裏で意識せずにREST APIを発行している。
つまり「devloper Roleを持つ人が、Podを、作成(create)できる」のようにRBACを適用することができる。

Kubernetes APIをcurlで見てみるなどの詳細は別記事でまとめている。

ここでRBACに関連するKubernetesリソースはKubernetesのドキュメントにある下記のリソースを指す。

  • Role
  • ClusterRole
  • RoleBinding
  • ClusterRoleBinding
  • ServiceAccount

これらをkubectlを叩いて確認することは可能だが、このままでは誰が何をできるのか直観的に把握しづらいことがわかる。
そこで、KubernetesのRBACを可視化するツールを動かして、RBACの概観を掴んでみる。

❯ k get sa
NAME                                 SECRETS   AGE
attachdetach-controller              1         53m
bootstrap-signer                     1         53m
certificate-controller               1         53m
clusterrole-aggregation-controller   1         53m
coredns                              1         53m
cronjob-controller                   1         53m
daemon-set-controller                1         53m
default                              1         53m
deployment-controller                1         53m
disruption-controller                1         53m
endpoint-controller                  1         53m
endpointslice-controller             1         53m
endpointslicemirroring-controller    1         53m
expand-controller                    1         53m
generic-garbage-collector            1         53m
horizontal-pod-autoscaler            1         53m
job-controller                       1         53m
kindnet                              1         53m
kube-proxy                           1         53m
namespace-controller                 1         53m
node-controller                      1         53m
persistent-volume-binder             1         53m
pod-garbage-collector                1         53m
pv-protection-controller             1         53m
pvc-protection-controller            1         53m
replicaset-controller                1         53m
replication-controller               1         53m
resourcequota-controller             1         53m
service-account-controller           1         53m
service-controller                   1         53m
statefulset-controller               1         53m
token-cleaner                        1         53m
ttl-controller                       1         53m

❯ k get role
NAME                                             CREATED AT
extension-apiserver-authentication-reader        2021-01-08T01:04:08Z
kube-proxy                                       2021-01-08T01:04:10Z
kubeadm:kubelet-config-1.19                      2021-01-08T01:04:08Z
kubeadm:nodes-kubeadm-config                     2021-01-08T01:04:08Z
system::leader-locking-kube-controller-manager   2021-01-08T01:04:08Z
system::leader-locking-kube-scheduler            2021-01-08T01:04:08Z
system:controller:bootstrap-signer               2021-01-08T01:04:08Z
system:controller:cloud-provider                 2021-01-08T01:04:08Z
system:controller:token-cleaner                  2021-01-08T01:04:08Z

KubernetesのRBAC可視化ツール

rbackrbac-viewという2つの可視化ツールを順に紹介する。

rback

https://github.com/team-soteria/rback

Kubernetes上のRBACリソースを下記のような図として出力してくれるツール(横長なので拡大必須)。Namespaceごとに分割して記載されていたりするため、興味の範囲を絞って確認することができ優秀そう。


ServiceAccountと(Cluster)Role, (Cluster)RoleBindingとの関係性が一目で確認でき良い感じです。
特に、デフォルトで存在する汎用Role(cluster-admin, admin, edit, view)がどれくらい多くの権限を持っているかを概観でき、汎用ロールへの理解も深まりそうです。


また、特定のconfigmapのみをgetしかできないRoleなどもあり、細かく権限設定している部分などを参考にすることができそうです。
別組織のクラスタやカスタムしたRoleなどがある場合は、ざっくりとどのようなRoleがありどのRoleが重要そうか、保護したい特定のリソースがあるのかという観点で役に立ちそうです。


rbackの使い方

macであれば下記のインストール方法でインストールできます。
Linux, windowsはこちら

$ curl -sL https://github.com/team-soteria/rback/releases/download/v0.4.0/macos_rback -o rback
$ chmod +x rback && sudo mv rback /usr/local/bin

rbackの実行

描画したいクラスタのRBAC関連リソースを取得し、dot形式のファイルとして出力します。
このdotファイルをGraphvizOnlineに貼り付けると画像としてみることができます。
もちろん、ローカルにgraphvizを導入してみることも可能です。

kubectl get sa,roles,rolebindings,clusterroles,clusterrolebindings --all-namespaces -o json | rback > result.dot

rbac-view

https://github.com/jasonrichardsmith/rbac-view

こちらはRole(Subject)とリソース(Object)の対応関係をマトリクス形式で表し、各セルにVerbが記載される形式のWeb UIを提供していくれるツールです。

rbackと違い、リソース軸でみることもできるため、このリソースを操作できるのは誰かという監査時には便利そうです。

また、Subjectに対応する人が隠されており、Role下のSubjectボタンを押すと、下記のように対応するServiceAccountなどのSubjectが表示されるようになっています。

表形式で整理されてるので、網羅性なども概観できる点はrbackより堅実な感じに見えます。
一方で空きセルが多いと概観するには少し辛くなるので、ユースケースに応じて使い分けるのが良さそうです。

まとめ

KubernetesのRBACリソースを概観するために、rbackrbac-viewという2つの可視化ツールを試した。
いずれのツールも、RBACのどこに注目したいかという目的ごとに使い分けるのが良さそうなことがわかった。

rback: NamespaceごとのRBACリソースや、ServiceAccount-(Cluster)Role-(Cluster)RoleBindingの関係性が矢印を用いて視覚的に確認できる。
rback-view: 表形式でRoleとKubernetesリソースの対応関係を確認できる。CRDが増えた時の網羅性にも期待できる。

Discussion