Kubernetes には RBAC (Role Based Access Control) という仕組みとして,Role / ClusterRole / RoleBinding / ClusterRoleBinding という「計4種類」の Kubernetes オブジェクトがある.Role と ClusterRole ではアクセス権限を宣言して(Namespace を指定するかどうかの違い),RoleBinding と ClusterRoleBinding ではサブジェクト (User / Group / ServiceAccount) との紐付けを宣言する.
RBAC Lookup(rbac-lookup コマンド)
RBAC に関連するオブジェクトを確認する場合,普通に kubectl get や kubectl describe を使えば良いけど,RBAC Lookup(rbac-lookup コマンド)を使えば,RBAC に関連するオブジェクトを検索したり,関係をシンプルに表示できる.サッと確認するときに便利!
RBAC Lookup をインストールする
RBAC Lookup には「2種類」のインストール方法がある.Krew を使う場合は kubectl のサブコマンドとして使えるようになる.Homebrew を使う場合は rbac-lookup コマンドとして使えるようになる.実際に試したところ Krew だと古めの v0.3.0 になってしまうため,今回は Homebrew を使って最新の v0.6.2 にした.Krew の index は以下で確認できるけど,更新されてなさそう...
1. Krew : kubectl rbac-lookup
$ kubectl krew install rbac-lookup $ kubectl rbac-lookup version rbac-lookup version 0.3.0
2. Homebrew : rbac-lookup
$ brew install FairwindsOps/tap/rbac-lookup $ rbac-lookup version Version:0.6.2 Commit:030e2484220cd353fa2026b808f5ff0ee1094876
検証環境
今回は Docker Desktop for Mac の Kubernetes 1.19.3 を検証環境として使う.Role / ClusterRole / RoleBinding / ClusterRoleBinding のマニフェストを作った(GitHub に置いてある).関係性を簡単に図解すると以下のようになる.

RBAC Lookup を試す
さっそく RBAC Lookup を試す.rbac-lookup コマンドを実行すると,Kubernetes クラスター全体を検索する.今回は rbac-lookup コマンドに検索キーワードを指定して,サブジェクト (User / Group / ServiceAccount) に部分一致検索をすると,以下のように SUBJECT と SCOPE と ROLE が表示される.そして -o wide オプションを追加すると SOURCE も表示される.
SUBJECT: サブジェクト (User / Group / ServiceAccount)SCOPE: Namespace or Kubernetes クラスター (cluster-wide)ROLE: Role or ClusterRoleSOURCE: RoleBinding or ClusterRoleBinding
$ rbac-lookup kakakakakku
SUBJECT SCOPE ROLE
kakakakakku-group kakakakakku-ns Role/role-pod-only
kakakakakku-group cluster-wide ClusterRole/cluster-role-pod-only
kakakakakku-ns:kakakakakku-sa kakakakakku-ns Role/role-pod-only
kakakakakku-ns:kakakakakku-sa cluster-wide ClusterRole/cluster-role-pod-only
kakakakakku-user kakakakakku-ns Role/role-pod-only
kakakakakku-user cluster-wide ClusterRole/cluster-role-pod-only
$ rbac-lookup kakakakakku -o wide
SUBJECT SCOPE ROLE SOURCE
Group/kakakakakku-group kakakakakku-ns Role/role-pod-only RoleBinding/role-binding-pod-only
Group/kakakakakku-group cluster-wide ClusterRole/cluster-role-pod-only ClusterRoleBinding/culster-role-binding-pod-only
ServiceAccount/kakakakakku-ns:kakakakakku-sa kakakakakku-ns Role/role-pod-only RoleBinding/role-binding-pod-only
ServiceAccount/kakakakakku-ns:kakakakakku-sa cluster-wide ClusterRole/cluster-role-pod-only ClusterRoleBinding/culster-role-binding-pod-only
User/kakakakakku-user kakakakakku-ns Role/role-pod-only RoleBinding/role-binding-pod-only
User/kakakakakku-user cluster-wide ClusterRole/cluster-role-pod-only ClusterRoleBinding/culster-role-binding-pod-only
同じように検索キーワード system:master に関連するオブジェクトを検索することもできる.RBAC に関連するオブジェクトを個別に調べる必要はなく,便利だと思う.
$ rbac-lookup system:master
SUBJECT SCOPE ROLE
system:masters cluster-wide ClusterRole/cluster-admin
$ rbac-lookup system:master -o wide
SUBJECT SCOPE ROLE SOURCE
Group/system:masters cluster-wide ClusterRole/cluster-admin ClusterRoleBinding/cluster-admin
--kind オプションを使う
--kind オプションを使うと,サブジェクト (User / Group / ServiceAccount) を指定して絞り込むことができる.
$ rbac-lookup kakakakakku -o wide --kind user SUBJECT SCOPE ROLE SOURCE User/kakakakakku-user kakakakakku-ns Role/role-pod-only RoleBinding/role-binding-pod-only User/kakakakakku-user cluster-wide ClusterRole/cluster-role-pod-only ClusterRoleBinding/culster-role-binding-pod-only $ rbac-lookup kakakakakku -o wide --kind group SUBJECT SCOPE ROLE SOURCE Group/kakakakakku-group kakakakakku-ns Role/role-pod-only RoleBinding/role-binding-pod-only Group/kakakakakku-group cluster-wide ClusterRole/cluster-role-pod-only ClusterRoleBinding/culster-role-binding-pod-only $ rbac-lookup kakakakakku -o wide --kind serviceaccount SUBJECT SCOPE ROLE SOURCE ServiceAccount/kakakakakku-ns:kakakakakku-sa kakakakakku-ns Role/role-pod-only RoleBinding/role-binding-pod-only ServiceAccount/kakakakakku-ns:kakakakakku-sa cluster-wide ClusterRole/cluster-role-pod-only ClusterRoleBinding/culster-role-binding-pod-only
まとめ
RBAC に関連するオブジェクトを検索したり,関係をシンプルに表示できる RBAC Lookup(rbac-lookup コマンド) を試した.サッと確認するときに便利!kubectl コマンドを実行する環境にインストールしておこう!