機密性のあるホストディレクトリを使用する Kubernetes ワークロード

機密性のあるホストディレクトリのマウントを制限し、ノードの情報とファイルを保護してください。

説明

hostPath でホストのログ、設定、システムディレクトリをコンテナーに接続すると、ノード内部の情報やファイルにアクセスできる場合があります。実際の範囲は、マウントの接続、ファイル権限、ほかのセキュリティ設定によって異なります。

運用上必要な収集処理と一般のアプリケーションの要件を区別し、必要な場合でもホスト全体や広い親ディレクトリを公開しないでください。

想定される影響

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

対処方法

  • 不要な機密パスの host_path マウントを削除してください。設定は ConfigMap や Secret、アプリケーションのデータは適切な CSI やマネージドストレージで提供してください。
  • PVC の実体が hostPath なら同じリスクが残るため、ストレージの実際のソースを確認してください。
  • 必須のマウントは最小限のパスと読み取り専用に限定してください。読み取り専用でも情報が漏れる可能性があるため、アクセス主体とワークロードの変更権限も制限してください。

例

ホストボリュームの宣言を比較する部分例です。最初の例はボリューム名とコンテナーへのマウント設定を省略しています。デプロイには完全な構成とサポートされるイメージが必要です。

変更前

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

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

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

ノードの /var/log をボリュームソースとして宣言しています。この宣言だけでコンテナーにマウントが接続されるわけではありません。

変更後

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

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

hostPath 宣言を削除しています。ほかのボリュームや権限で機密性のあるホストファイルにアクセスできないかも確認してください。

参考資料