KubernetesのRBACを可視化して概観する
Motivation
CKAやCKADを受験し、RBACの基礎は理解したが活用するためには理解が足りていない。
CKS受験を機に、Kubernetesが保持しているRBAC関連リソースを可視化して概観する方法をまとめる。
ここで紹介する2つのツールは下記のKubeWeeklyまとめ記事にて一言で紹介されている。
一方で、実際に動かしてみた話などは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可視化ツール
rback
とrbac-view
という2つの可視化ツールを順に紹介する。
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
こちらはRole(Subject)とリソース(Object)の対応関係をマトリクス形式で表し、各セルにVerbが記載される形式のWeb UIを提供していくれるツールです。
rbackと違い、リソース軸でみることもできるため、このリソースを操作できるのは誰か
という監査時には便利そうです。
また、Subjectに対応する人が隠されており、Role下のSubjectボタン
を押すと、下記のように対応するServiceAccountなどのSubjectが表示されるようになっています。
表形式で整理されてるので、網羅性なども概観できる点はrbackより堅実な感じに見えます。
一方で空きセルが多いと概観するには少し辛くなるので、ユースケースに応じて使い分けるのが良さそうです。
まとめ
KubernetesのRBACリソースを概観するために、rback
とrbac-view
という2つの可視化ツールを試した。
いずれのツールも、RBACのどこに注目したいかという目的ごとに使い分けるのが良さそうなことがわかった。
rback: NamespaceごとのRBACリソースや、ServiceAccount-(Cluster)Role-(Cluster)RoleBindingの関係性が矢印を用いて視覚的に確認できる。
rback-view: 表形式でRoleとKubernetesリソースの対応関係を確認できる。CRDが増えた時の網羅性にも期待できる。
Discussion