コントローラーごとのServiceAccount認証情報が無効

kube-controller-managerが個別のサービスアカウント認証情報を使わない場合、コントローラーに必要以上の権限が適用されるおそれがあります。

説明

--use-service-account-credentials=trueは、コントローラーごとに別のサービスアカウント認証情報を使う設定です。無効にすると、各コントローラーが必要以上の権限を持つ共通の認証情報を使う場合があります。同じプロセスで動くコントローラーを隔離する機能ではありません。

コントローラーごとに必要な権限だけを使うことは、制御プレーンの保護に役立ちます。運用環境ではこのオプションを有効にしてください。

想定される影響

  • コントローラーが必要以上に広い共通権限を使うおそれがあります。
  • コントローラーの誤ったAPIリクエストが、より強い権限で実行される可能性があります。
  • コントローラーごとに最小権限を適用しにくくなります。

対処方法

  • kube-controller-managerに--use-service-account-credentials=trueを設定してください。
  • 各コントローラーのサービスアカウントと権限を確認してください。
  • controller-managerのセキュリティ確認項目に、このオプションを含めてください。

例

以下は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", "--use-service-account-credentials=false"]
      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: ["--use-service-account-credentials=true"]

説明:

  • 変更前: 個別のサービスアカウント認証情報を使わないと、コントローラー間の権限分離が弱まるおそれがあります。
  • 変更後: 個別のサービスアカウント認証情報によって、コントローラーごとの権限分離を強化します。

参考資料