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
コマンドを実行する環境にインストールしておこう!