OIDC issuer discovery for Kubernetes service accounts
Kubernetes Pods で実行されているアプリケーションは、対応する ServiceAccount トークンで Kubernetes API に対して認証されます。これらの JWT トークンは通常、ファイルとしてコンテナにマウントされます。JWT トークンは Kubernetes クラスタのシークレットキーで署名されており、TokenReview API でのみ検証することができます。このAPIは広く認知されておらず、アクセスするためには、外部システムが最初にKubernetesに対して認証を行い、ServiceAccountsをレビューする必要があります。このコンフィグレーションとアクセスレビューのプロセスは必要以上にかなり複雑で、OIDCのような広く受け入れられている標準を省いていることは言うまでもありません。
KubernetesにはすでにOIDCのインテグレーション、つまりKubernetes APIに対するユーザーのインバウンド認証があります。このブログ記事で紹介している新しいインテグレーションは、OIDCを逆方向に配線しています。Service Account Issuer Discovery機能は、クラスタ(アイデンティティプロバイダ)が発行したKubernetesのサービスアカウントトークンを、OIDC Discovery Specに基づいて外部システム(依存者)とフェデレーションを可能にします。この機能を有効にするためには、Projected Service Account トークンが必要です。Projected service account JWT は「従来の」トークンとは異なり、有効期限や適切な発行者があり、オーディエンス フィールドには適切な JWT のように動作すると記載されています。
今日の記事は、OIDC ssuer discoveryを介して外部システムと Kubernetes アプリケーションの認証について議論するので、かなり技術的な内容になっています。OIDC コンシューマとして Kubernetes 上の Vaultとクラスタ内で実行されているシンプルなクライアントアプリケーションを使用して、projected ServiceAccount tokenを用いて Vault インスタンスにアクセスします。
Preparation
ServiceAccountIssuerDiscovery機能ゲートが有効になっているKubernetesクラスタを作成する必要があります。 Service Account Token Volume Projectionを有効にするために、kubeadmのパッチを追加してテストクラスタを準備するために kind を使用する予定です。
このチュートリアルでは、お使いのマシンにインストールする必要のあるソフトウェアもあります:
- kubectl
- kind
- curl
- jq
- step
- vault