説明
Tiller は Helm 2 のサーバーコンポーネントで、自身のサービスアカウントの権限を使って Kubernetes リソースを管理します。到達可能なエンドポイントに適切な認証がなければ、他のワークロードがその権限で操作を要求できる可能性があります。
Helm 2 は 2020 年 11 月以降、セキュリティ更新を受けていません。Tiller を使わない、サポートされる Helm バージョンに移行してください。
想定される影響
- 未承認の要求によって、Tiller に与えられた権限の範囲でデプロイや他のリソースが変更される可能性があります。
- 侵害された Pod が、到達可能な管理エンドポイントを通じて他のワークロードに影響を与える可能性があります。
対処方法
- リリース情報とデプロイ手順を検証し、Tiller を使わない方式に移行してから Tiller を削除してください。
- すぐに削除できない場合は、ループバックへのバインドや認証付き TLS 接続でアクセスを制限し、サービスアカウントの権限を最小化してください。
- 同じ Pod のコンテナーとポート転送の権限も確認してください。ループバックへのバインドだけでは、すべての管理アクセスを遮断できません。
例
以下は過去の Tiller Deployment の待ち受けアドレスを比較した抜粋です。実際のイメージ、selector、サービスアカウントの設定は別途必要です。Tiller の新規導入を勧める例ではありません。
変更前
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: tiller-bad-args
labels:
app: helm
name: tiller
spec:
template:
metadata:
labels:
app: helm
name: tiller
spec:
containers:
- name: tiller-v2
image: tiller-image
args:
- "--listen=10.7.2.8:44134"
Tiller がこのアドレスを持つ環境では、ループバック以外のインターフェイスから要求を受け付けられます。実際の到達可能性と TLS 認証を確認してください。
変更後
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: tiller-deploy
labels:
app: helm
name: tiller
spec:
template:
metadata:
labels:
app: helm
name: tiller
spec:
containers:
- name: tiller
image: tiller-image
args:
- "--listen=127.0.0.1:44134"
待ち受けアドレスを 127.0.0.1 に制限しています。同じ Pod 内のプロセスや許可されたポート転送からは到達できるため、権限を制限しながら移行を進めてください。