検証した時のメモです。
環境
alias | grep kubectl
k=kubectl
k version
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.8", GitCommit:"9f2892aab98fe339f3bd70e3c470144299398ace", GitTreeState:"clean", BuildDate:"2020-08-13T16:12:48Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"16+", GitVersion:"v1.16.13-eks-2ba888", GitCommit:"2ba888155c7f8093a1bc06e3336333fbdb27b3da", GitTreeState:"clean", BuildDate:"2020-07-17T18:48:53Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
確認方法
kubectl auth can-i
コマンドを使って権限のチェックを行う。
また、--as
オプションを指定することで確認したい ServiceAccount や User の指定が出来るのでこれも使ってみる。
ServiceAccount を作ってテストする時
以下では sa-pod-reader
という ServiceAccount を作り、確認をする
--as
で指定する時は system:serviceaccount:<namespace><service_account_name>
という形式で指定する。
system:serviceaccount: (singular) is the prefix for service account usernames.
# service account 作成
k create sa sa-pod-reader
# role 作成
kubectl create role pod-reader --verb=get --verb=list --resource=pods
# rolebinding 作成
kubectl create rolebinding binding-sa-pod-reader --role=pod-reader --serviceaccount=default:sa-pod-reader
# pod の get は可能
k auth can-i get po --as system:serviceaccount:default:sa-pod-reader
yes
# pod の作成は不可
k auth can-i create po --as system:serviceaccount:default:sa-pod-reader
no
User を作ってテストする時
以下では john
という ユーザーを作り、確認をする。
作成する Role などの情報は以下から抜粋
kubectl create role developer --verb=create --verb=get --verb=list --verb=update --verb=delete --resource=pods
kubectl create rolebinding developer-binding-john --role=developer --user=john
確認。
# pod の get は出来る
k auth can-i get po --as john
yes
# deployment の権限はない
k auth can-i get deployment --as john
no