ServiceAccountトークンの署名鍵設定の確認

レガシーなSecretベースのサービスアカウントトークンを発行する場合は、kube-controller-managerの署名鍵を確認してください。

説明

--service-account-private-key-fileは、kube-controller-managerによるレガシーなSecretベースのサービスアカウントトークンの生成を有効にし、署名用の秘密鍵を指定します。現在のTokenRequestによる発行はkube-apiserverの署名設定を使うため、このコントローラーのオプションを省略しても、すべてのトークン発行が停止するわけではありません。

サービスアカウントトークンはクラスター内の認証によく使われます。実際に使用するトークン発行方式に合わせて鍵を設定してください。

想定される影響

  • レガシーなトークンが必要な構成で鍵がないか誤っていると、生成や認証に問題が生じるおそれがあります。
  • 署名用の秘密鍵が漏えいすると、トークンの偽造に使われる危険があります。

対処方法

  • 可能な場合は有効期間の短いTokenRequestベースのトークンを使用してください。レガシーなSecretベースのトークンが必要な場合に限り、kube-controller-managerの--service-account-private-key-fileを設定してください。
  • 秘密鍵ファイルのアクセス権と保存先を保護してください。
  • kube-apiserverに対応する検証鍵が設定されていることを確認してください。このオプションを埋めるために、不要な長期トークンを有効にしないでください。

例

以下はKubernetes 1.6時代のレガシートークン設定の抜粋です。本番環境ではサポート中のバージョンを使い、鍵ファイルのマウントとその他の制御プレーン設定を別途構成してください。

変更前

yaml
apiVersion: v1
kind: Pod
metadata:
  name: command-demo
spec:
  containers:
    - name: command-demo-container
      image: gcr.io/google_containers/kube-controller-manager-amd64:v1.6.0
      command: ["kube-controller-manager"]
      args: []

変更後

yaml
apiVersion: v1
kind: Pod
metadata:
  name: command-demo
spec:
  containers:
    - name: command-demo-container
      image: gcr.io/google_containers/kube-controller-manager-amd64:v1.6.0
      command: ["kube-controller-manager"]
      args: ["--service-account-private-key-file=/path/to/key/file.pem"]

説明:

  • 変更前: レガシートークンの署名用秘密鍵を指定していません。実際の発行方式と要件を確認してください。
  • 変更後: レガシートークン用の署名鍵を明示しています。有効な秘密鍵と、それに対応する検証鍵が必要です。

参考資料