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