LoginSignup
8
4

More than 5 years have passed since last update.

kubectl で OpenID Connect ID トークンをリフレッシュする

Last updated at Posted at 2016-11-02

はじめに

Kubernetes クラスタの認証に OpenID Connect ID トークンを利用するとき、kubectl からクラスタを操作するには、ID トークンを kubeconfig ファイルのユーザエントリ token として設定します。

kubectl config set-credentials admin --token=bearer_token

このとき、設定した ID トークンの有効期限が切れると認証に失敗してしまいます。一般的に ID トークンの有効期限が切れたら、リフレッシュトークンを使い ID トークンをリフレッシュする必要があり、ユーザエントリで token を使っているとリフレッシュした ID トークンを改めて kubeconfig ファイルに設定し直す必要がありました。
この問題は、kubeconfig ファイルのユーザエントリに token ではなく、OpenID Connect のトークンリフレッシュのフローを実行してくれる auth-provider=oidc を利用することで解決します。

--auth-provider=oidc

kubectl config set-credentials のヘルプにちょろっとしか記述されていませんが、kubeconfig ファイルのユーザエントリに auth-provider という機能が存在します。auth-provider はクラスタへリクエストするときに、認証部分の処理を認証プロバイダに委譲できる機能です。v1.4.4 時点で Google Cloud Platform と OpenID Connect が提供されており、OpenID Connect の場合は以下のように設定します。

# Enable the OpenID Connect auth provider for the "cluster-admin" entry with additional args
kubectl config set-credentials cluster-admin --auth-provider=oidc --auth-provider-arg=client-id=foo --auth-provider-arg=client-secret=bar

上記の例は kubectl config set-credentials のヘルプの出力なんですが、必須のパラメータであろう Issuer URL などの値を設定する方法はドキュメントに存在しないので今のところソースコードをみるしかありません。

キー名 概要
idp-issuer-url Identity Provider Issuer URL
client-id クライアント ID
client-secret クライアントシークレット
idp-certificate-authority Identity Provider の CA 証明書ファイルのパス
idp-certificate-authority-data base64 エンコードされた Identity Provider の CA 証明書のデータ
extra-scopes 追加で取得する属性情報 (デフォルト: openid, email, profile)
id-token ID トークン
refresh-token リフレッシュトークン

これらのキーを --auth-provider-arg に適切に設定することで ID トークンの有効期限が切れていても kubectl がリフレッシュトークンを使い ID トークンをリフレッシュしてくれます。

まとめ

Kubernetes の認証に OpenID Connect ID トークンを使っているなら、ID トークンをリフレッシュするために --auth-provider=oidc を使いましょう。

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4