ServiceAccountトークンの検証鍵設定の確認

kube-apiserverがサービスアカウントトークンの検証に使う鍵と信頼設定を確認してください。

説明

--service-account-key-fileは、サービスアカウントトークンの署名を検証するPEM鍵ファイルを指定します。省略すると--tls-private-key-fileの鍵を使うため、このオプションがないだけでトークンの検証が無効になるわけではありません。

サービスアカウントトークンはクラスターへのアクセスによく使われます。トークンの署名設定に対応する検証鍵が必要です。

想定される影響

  • 署名鍵と検証鍵が一致しないと、正当なトークンで認証できなくなるおそれがあります。
  • 不要な鍵を信頼すると、意図しない発行元のトークンを受け入れる危険があります。

対処方法

  • ローカルの署名鍵を使う場合は、対応する検証鍵を--service-account-key-fileで設定してください。--service-account-signing-key-fileを使う場合にも、この検証鍵オプションが必要です。
  • 鍵の管理手順を文書化し、署名鍵と検証鍵を整合性のある状態で配布してください。
  • ファイルのパスと権限を確認してください。外部署名機能を使うバージョンと構成では、その検証設定に従い、相互に排他的なローカル鍵オプションを併用しないでください。

例

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

変更前

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

変更後

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

説明:

  • 変更前: 検証鍵ファイルを明示していません。実際に使用する代替の鍵や外部署名の設定を確認してください。
  • 変更後: 検証鍵ファイルを明示しています。パスが存在し、実際の署名鍵に対応する鍵が含まれている必要があります。

参考資料