説明
Tiller は Helm 2 のサーバー側コンポーネントです。自身のサービスアカウント権限でリソースを変更するため、アクセス制御が不適切だったり権限が過剰だったりすると、悪用時の影響が大きくなります。
Helm 2 は 2020 年 11 月以降、セキュリティ更新を受けていません。Tiller を使わない、サポートされる Helm バージョンへ移行してください。
想定される影響
- 侵害や不適切な利用によって、Tiller に与えられた権限の範囲でワークロードやリソースが変更される可能性があります。
- サポート終了済みのコンポーネントには、新たに判明したセキュリティ問題の修正が提供されません。
対処方法
- 既存のリリース情報と必要な値を保存し、新しいデプロイ手順をテストしてください。
- 移行後に Tiller の Deployment と Service を削除し、専用サービスアカウントと権限バインディングも整理してください。
- 必要なアプリケーションを維持しつつ、Tiller が実行されておらず、その管理アクセス経路も残っていないことを確認してください。
例
最初の例は過去の Tiller デプロイの構造を示します。イメージ値はプレースホルダーであり、新規導入の推奨設定ではありません。二つ目は別の通常の Pod の例です。
変更前
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: tiller-deploy
labels:
app: helm
name: tiller
spec:
selector:
matchLabels:
app: helm
name: tiller
template:
metadata:
labels:
app: helm
name: tiller
spec:
containers:
- name: tiller-v2
image: tiller-image
Tiller コンテナーを実行する Deployment です。実際の到達可能性と権限は、Service とサービスアカウントの設定によって異なります。
変更後
yaml
apiVersion: v1
kind: Pod
metadata:
name: security-context-demo
spec:
containers:
- name: sec-ctx-demo
image: busybox
securityContext:
allowPrivilegeEscalation: false
この Pod は Tiller を実行せず、コンテナーの権限昇格を制限します。この Pod の追加やリソース名の変更だけでは、既存の Tiller は削除されません。