Helm 2 の Tiller を実行する Kubernetes ワークロード

サポートが終了した Helm 2 の Tiller を廃止し、保守されるデプロイ方式に移行してください。

説明

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 は削除されません。

参考資料