Feb 10, 2025
Feb 10, 2025
N/A Views
MD

MicroK8sのOIDC連携にCognitoを使う。

MicroK8sのインストールはこちらを参照。

CognitoのUser Poolは作成済みの前提で、クライアントを作成する。

"Create app client"をクリック。

image

"Application Type"は"Traditional web application"で"Name your application"にmicrok8sを入力。"Return URL"にhttp://localhost:8000 (kubeloginのコールバックURL) を設定して、"Create app client"ボタンをクリック。
(スクリーンショットはhttp://localhost:18000になっているが、http://localhost:8000の間違い。)
image

必須ではないが、ローカルで8000ポートが使用済みの場合ののフォールバックポートとして18000が使われるので、Callback URLにhttp://localhost:18000を追加しておいた方が無難。

image

"App client information"パネルから"Client ID"と"Client secret"をコピー。

image

User Poolの"Overview"パネルから"Token signing key URL"の/.well-known/jwks.jsonの前までのパスをコピー。

image

MicroK8sのControlplaneをインストールしてあるサーバーにログインして、/var/snap/microk8s/current/args/kube-apiserverを修正する。

変数は環境に合わせて修正し、次のコマンドを実行。

OIDC_ISSUER_URL=https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_tv3NHZAKO
OIDC_CLIENT_ID=3ftgo86lgdb2mb0fr0jho761q9
OIDC_USERNAME_CLAIM=email
OIDC_GROUPS_CLAIM=cognito:groups

cat <<EOF | sudo tee -a /var/snap/microk8s/current/args/kube-apiserver
--oidc-issuer-url=${OIDC_ISSUER_URL}
--oidc-client-id=${OIDC_CLIENT_ID}
--oidc-username-claim=${OIDC_USERNAME_CLAIM}
--oidc-username-prefix=oidc:
--oidc-groups-claim=${OIDC_GROUPS_CLAIM}
--oidc-groups-prefix=oidc:
EOF

MicroK8sを再起動。

sudo snap restart microk8s

Cognito上のユーザーが属している管理ユーザー用のグループがplatform-engineerとする。このグループにcluster-adminのClusterRoleを割り当てるために、次のコマンドを実行。

kubectl create clusterrolebinding cluster-admin-platform-engineer --clusterrole=cluster-admin --group=oidc:platform-engineer

https://github.com/int128/kubelogin#getting-started より、kubeloginをインストールして、次のコマンドで現在のkubectlのコンテキストにcongnitoのユーザーを追加する。

OIDC_ISSUER_URL=https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_tv3NHZAKO
OIDC_CLIENT_ID=3ftgo86lgdb2mb0fr0jho761q9
OIDC_CLIENT_SECRET=********

kubectl config set-credentials cognito \
  --exec-api-version=client.authentication.k8s.io/v1beta1 \
  --exec-command=kubectl \
  --exec-arg=oidc-login \
  --exec-arg=get-token \
  --exec-arg=--oidc-issuer-url=${OIDC_ISSUER_URL} \
  --exec-arg=--oidc-client-id=${OIDC_CLIENT_ID} \
  --exec-arg=--oidc-client-secret=${OIDC_CLIENT_SECRET}
 
kubectl config set-context --current --user=cognito

次のコマンドを実行。

kubectl auth whoami

Cognitoのログイン画面が立ち上がるので、ログインする。

image

ログインが成功すると、

image

次のようにUsernameとGroupsがマッピングされる。

$ kubectl auth whoami
ATTRIBUTE   VALUE
Username    oidc:makingx@gmail.com
Groups      [oidc:platform-engineer system:authenticated]
Found a mistake? Update the entry.
Share this article: