一般の Kubernetes ワークロードにおける hostPath 使用の確認

一般のワークロードで hostPath の使用を制限し、ノードのファイルシステムへのアクセスを減らしてください。

説明

hostPath はノードのファイルシステムの一部をコンテナーに接続します。実際のマウントとファイル権限によっては、アプリケーションがホストのファイルを読み取り、変更できるため、コンテナーとノードの境界が弱まります。

特定の運用上の必要性がない一般のワークロードでは使用を避けてください。Pod を kube-system に移すだけでは、ホストアクセスが安全になるわけではありません。

想定される影響

  • ホストのログや設定に含まれる機密情報が漏れる可能性があります。
  • 書き込みも許可されると、ノードのファイルやほかのワークロードに影響する可能性があります。

対処方法

  • 不要な hostPath マウントを削除し、適切な CSI やマネージドストレージに置き換えてください。PVC を使う場合も、実体のボリュームが hostPath でないか確認してください。
  • ホストアクセスが必須なら、最小限のパスと読み取り専用権限に限定し、専用ノードでの隔離を検討してください。
  • ワークロードの作成・変更権限も制限し、ホストアクセスが再び拡大されないようにしてください。

例

hostPath 宣言を比較する部分例です。最初の例はボリューム名やコンテナーへのマウント設定などを省略しているため、そのままではデプロイできません。実際のデプロイにはサポートされるイメージのバージョンを使用してください。

変更前

hcl
resource "kubernetes_pod" "app_pod" {
  metadata {
    name      = "terraform-example"
    namespace = "default"
  }

  spec {
    volume {
      host_path {
        path = "/var/log"
      }
    }
  }
}

ノードの /var/log をボリュームのソースとして宣言しています。コンテナーで使うには、そのボリュームを接続するマウント設定も必要です。

変更後

hcl
resource "kubernetes_pod" "app_pod" {
  metadata {
    name      = "terraform-example"
    namespace = "default"
  }

  spec {
    container {
      image = "nginx:1.7.9"
      name  = "app-container"
    }
  }
}

hostPath 宣言を削除しています。ほかのボリュームや権限にホストアクセスが残っていないか確認してください。

参考資料