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