(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Kubernetes】ユーザが属しているClusterRole/Roleを確認する

スポンサーリンク

はじめに

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上で設定することが多いですが、コマンドでも確認ができます。