説明
--service-account-lookup は、サービスアカウントトークンの認証時に保存された状態も確認するオプションで、既定値は true です。特に長期間使う Secret ベースのトークンでは、この確認を無効にすると、トークンやサービスアカウントを削除した結果が認証に反映されないおそれがあります。
状態確認はトークンの署名検証とは別です。有効にしていても、サービスアカウントの権限を最小限にし、トークンの有効期間を管理する必要があります。
想定される影響
漏えいした、または失効させたトークンで認証できると、サービスアカウントの権限でデータにアクセスしたり、ワークロードを変更したりするおそれがあります。実際の被害範囲は、そのアカウントに付与した権限にも依存します。
対処方法
--service-account-lookup=trueまたは既定の動作を維持してください。- 可能な場合は TokenRequest と投影ボリュームによる短期間のサービスアカウントトークンを使用し、必要な RBAC 権限だけを付与してください。
- 通常のワークロードが動作し、削除・失効させたトークンが拒否されることを検証してください。不要な長期トークンと配布済みのコピーも削除してください。
例
Kubernetes 1.6 の過去の起動オプションを比較する抜粋です。現在の環境では、サポートされるバージョンとトークン管理方式を使用してください。
変更前
yaml
apiVersion: v1
kind: Pod
metadata:
name: api-server
spec:
containers:
- name: kube-apiserver
image: gcr.io/google_containers/kube-apiserver-amd64:v1.6.0
command:
- "kube-apiserver"
args:
- "--service-account-lookup=false"
サービスアカウントトークンの状態確認を無効にしています。署名検証とは別の設定であり、失効させたトークンの拒否を弱めるおそれがあります。
変更後
yaml
apiVersion: v1
kind: Pod
metadata:
name: api-server
spec:
containers:
- name: kube-apiserver
image: gcr.io/google_containers/kube-apiserver-amd64:v1.6.0
command:
- "kube-apiserver"
args:
- "--service-account-lookup=true"
トークンの状態確認を有効にしています。トークンの有効期間とサービスアカウントの権限も併せて管理してください。