kakakakakku blog

Weekly Tech Blog: Keep on Learning!

「RBAC Lookup」を使って RBAC に関連するオブジェクトを検索する

Kubernetes には RBAC (Role Based Access Control) という仕組みとして,Role / ClusterRole / RoleBinding / ClusterRoleBinding という「計4種類」の Kubernetes オブジェクトがある.RoleClusterRole ではアクセス権限を宣言して(Namespace を指定するかどうかの違い),RoleBindingClusterRoleBinding ではサブジェクト (User / Group / ServiceAccount) との紐付けを宣言する.

kubernetes.io

RBAC Lookup(rbac-lookup コマンド)

RBAC に関連するオブジェクトを確認する場合,普通に kubectl getkubectl describe を使えば良いけど,RBAC Lookup(rbac-lookup コマンド)を使えば,RBAC に関連するオブジェクトを検索したり,関係をシンプルに表示できる.サッと確認するときに便利!

github.com

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 MacKubernetes 1.19.3 を検証環境として使う.Role / ClusterRole / RoleBinding / ClusterRoleBinding のマニフェストを作った(GitHub に置いてある).関係性を簡単に図解すると以下のようになる.

f:id:kakku22:20210121224051p:plain

RBAC Lookup を試す

さっそく RBAC Lookup を試す.rbac-lookup コマンドを実行すると,Kubernetes クラスター全体を検索する.今回は rbac-lookup コマンドに検索キーワードを指定して,サブジェクト (User / Group / ServiceAccount) に部分一致検索をすると,以下のように SUBJECTSCOPEROLE が表示される.そして -o wide オプションを追加すると SOURCE も表示される.

  • SUBJECT : サブジェクト (User / Group / ServiceAccount)
  • SCOPE : Namespace or Kubernetes クラスター (cluster-wide)
  • ROLE : Role or ClusterRole
  • SOURCE : 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 コマンドを実行する環境にインストールしておこう!

github.com