コンテナーのルートファイルシステム書き込み保護の確認

ルートファイルシステムを読み取り専用にし、必要な書き込み先だけを別ボリュームで提供してください。

説明

コンテナーのルートファイルシステムが書き込み可能な場合、プロセスはファイル権限の範囲でイメージ由来のファイルを変更できます。アプリケーションの不具合や侵害により、実行環境に意図しないファイルが残る場合があります。

読み取り専用にすると変更可能な範囲は減りますが、別途マウントしたボリュームまで読み取り専用になるわけではなく、すべての悪意ある動作を防ぐものでもありません。

想定される影響

  • 侵害されたプロセスがファイルを残したり、実行中の設定を変更したりする場合があります。
  • 必要な書き込み先がないと、読み取り専用への変更で起動や動作に失敗する場合があります。

対処方法

  • コンテナーの security_context に read_only_root_filesystem = true を設定してください。
  • ログや一時ファイルなど、必要な書き込み先だけを emptyDir または PVC で分離し、ボリュームの権限を制限してください。
  • allow_privilege_escalation = false などの保護も適用し、正常動作をテストしてください。

例

保護設定だけを比較する抜粋です。既存の nginx:1.7.9 は現在のデプロイに推奨する版ではありません。保守されているイメージを使い、nginx のキャッシュや実行時ディレクトリに必要なボリューム・設定を別途用意してください。

変更前

hcl
resource "kubernetes_pod" "example" {
  metadata {
    name = "app"
  }

  spec {
    container {
      name  = "web"
      image = "nginx:1.7.9"

      security_context {
        read_only_root_filesystem = false
      }
    }
  }
}

変更後

hcl
resource "kubernetes_pod" "example" {
  metadata {
    name = "app"
  }

  spec {
    container {
      name  = "web"
      image = "nginx:1.7.9"

      security_context {
        read_only_root_filesystem  = true
        allow_privilege_escalation = false
      }
    }
  }
}

補足:

  • 変更前: この設定ではルートファイルシステムへの書き込みを制限しません。実際の変更はプロセスの権限に依存します。
  • 変更後: ルートファイルシステムを読み取り専用にし、権限昇格を制限します。必要な書き込み先は別途提供する必要があります。

参考資料