説明
コンテナーのルートファイルシステムが書き込み可能な場合、プロセスはファイル権限の範囲でイメージ由来のファイルを変更できます。アプリケーションの不具合や侵害により、実行環境に意図しないファイルが残る場合があります。
読み取り専用にすると変更可能な範囲は減りますが、別途マウントしたボリュームまで読み取り専用になるわけではなく、すべての悪意ある動作を防ぐものでもありません。
想定される影響
- 侵害されたプロセスがファイルを残したり、実行中の設定を変更したりする場合があります。
- 必要な書き込み先がないと、読み取り専用への変更で起動や動作に失敗する場合があります。
対処方法
- コンテナーの 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
}
}
}
}
補足:
- 変更前: この設定ではルートファイルシステムへの書き込みを制限しません。実際の変更はプロセスの権限に依存します。
- 変更後: ルートファイルシステムを読み取り専用にし、権限昇格を制限します。必要な書き込み先は別途提供する必要があります。