(O+P)ut

アウトプット



(O+P)ut

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

【Kubernetes】docker-desktopが所属しているグループや証明書の期限を確認する

スポンサーリンク

はじめに

KubernetesではRBAC(Role Based Access Control)という機構で権限を制御しています。

本記事では、DockerDesktopでデフォルトで用意されるdocker-desktopの証明書情報を確認することでdocker-desktopユーザがなぜadmin権限を持っているのか?についても解説します。

環境情報
  • Docker Desktop 2.4(DE 19.03, K8s 1.18)


kubeconfigを作成する流れ

事前知識としてKubenetesを手動でインストールするKubernetesHardwayの手順にもあるようにadmin権限でクラスターを接続するために下記の情報を入れたadminユーザ用のcsr/key/pemを作成し

  "names": [
    {
      "C": "US",
      "L": "Portland",
      "O": "system:masters",
      "OU": "Kubernetes The Hard Way",
      "ST": "Oregon"
    }

下記でconfigファイルを作成して

  kubectl config set-credentials admin \
    --client-certificate=admin.pem \
    --client-key=admin-key.pem \
    --embed-certs=true \
    --kubeconfig=admin.kubeconfig

操作する端末の.kube/configに配置します。

それによってユーザはsystem:mastersというグループに属しているという情報を持つのでそれに対応した権限を持つわけです。

DockerDesktopの場合

インストールが行われると自動的に.kube/configには以下のように証明書情報が作成されclient-certificate-dataに文字列として格納されています。

users:
- name: docker-desktop
  user:
    client-certificate-data: LS0....
    client-key-data: LS0...

この文字列をbase64でデコードすれば改行付きの以下のような形式となるので

-----BEGIN CERTIFICATE-----
MIIC9D..
...
I+Aobq..
-----END CERTIFICATE-----

このファイルをopensslコマンドで表示させると

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: ...
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN = kubernetes
        Validity
            Not Before: xx
            Not After : xx
        Subject: O = system:masters, CN = docker-for-desktop
...

とsystem:mastersに所属していることや証明書の期限(Not After)が分かります。

尚、デコードする前に改行なしの文字列を読み込むと以下のエラーとなりますのでご注意ください。

$ openssl x509 -text < hoge.crt
unable to load certificate
34359969584:error:0909006C:PEM routines:get_name:no start line:crypto/pem/pem_lib.c:745:Expecting: TRUSTED CERTIFICATE

終わりに

system:mastersグループに属しているため、以下記事にあるようにdocker-desktopはcluster-admin権限を持ちます。

cluster-adminは以下の権限があるためdocker-desktopでは全操作が可能となっています。

PolicyRule:
  Resources  Non-Resource URLs  Resource Names  Verbs
  ---------  -----------------  --------------  -----
  *.*        []                 []              [*]
             [*]                []              [*]

以上、ご参考になれば幸いです。