はじめに
Kubernetesではクラスター全体もしくはネームスペースに対して行える操作を管理するためにRBAC(Role Based Access Control)という機構があり、具体的には権限を定義したロールとユーザを紐づけることで権限を制御します。
本記事では、自分がどのユーザとしてクラスターに接続していて、そのユーザにはどのような権限があるのかについて確認する流れを説明します。
環境情報
- kubeadm 1.18
利用しているユーザ名を確認する
下記コマンドでコンテキストを一覧化でき、アスタリスクマークの位置で現在どのようなコンテキストを利用しているか分かります。
$ kubectl config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACE * test-context test-cluster test-user default ...
AUTHINFOに記載のあるtest-userがユーザ名です。
同情報は.kube/configでも確認可能です。
- context: cluster: test-cluster namespace: default user: test-user name: test-context
また、ユーザ名ではなくグループ名まで知りたい場合はclient-certificate-dataをopensslコマンドで表示して確認する必要があります。
$ openssl x509 -in hoge.crt -noout -text Certificate: Data: Version: 3 (0x2) Serial Number: ... Signature Algorithm: sha256WithRSAEncryption Issuer: CN = xx Validity Not Before: xx Not After : xx Subject: O = XXXXX:XXXX, CN = test-user
ClusterRole/Roleを確認する
RoleとUserの紐づけはNamespace毎に作成されます。
例えば以下を見ればTekton用に専用のrolebindingができていることが確認できます。
$ kubectl get rolebinding --all-namespaces NAMESPACE NAME ROLE AGE kube-public kubeadm:bootstrap-signer-clusterinfo Role/kubeadm:bootstrap-signer-clusterinfo xx ... tekton-pipelines tekton-pipelines-webhook Role/tekton-pipelines-webhook xx
同じく以下にてClusterRoleとUserの紐づけてあるClusterRoleBindingの一覧が確認できます。
$ kubectl get clusterrolebinding NAME ROLE AGE build-bot ClusterRole/cluster-admin xx cluster-admin ClusterRole/cluster-admin xx ...
自分が属しているRoleの確認
RoleBindingの紐づけ関係は以下で確認できます。
$ kubectl describe clusterrolebinding cluster-admin Name: cluster-admin Labels: kubernetes.io/bootstrapping=rbac-defaults Annotations: rbac.authorization.kubernetes.io/autoupdate: true Role: Kind: ClusterRole Name: cluster-admin Subjects: Kind Name Namespace ---- ---- --------- Group system:masters
上記で system:masters というグループ と cluster-admin というClusterRoleが紐づいていることが分かります。
よって以下のように全Roleで検索をして該当行を確認し
$ kubectl describe clusterrolebinding | cat -n | grep test-user 123 User test-user
該当行前後を見ることでRoleが分かります。
Role: Kind: ClusterRole Name: cluster-test
最後に同Roleを確認すれば
$ kubectl describle clusterrole cluster-test
どんな権限があるか確認ができます。
終わりに
クラウド環境でクラスターを利用している場合はGUI上で設定することが多いですが、コマンドでも確認ができます。