Mímisbrunnr知恵の泉

← サイバーセキュリティ 一覧

🎓 レベル:標準 | 重要度:B(推奨) 📎 前提:クラウドの責任共有とIAM

要点(BLUF)

概念:軽量さの裏にある分離の弱さ

コンテナは OS の機能(名前空間・cgroups)でプロセスを隔離します。仮想マシンが OS ごと分けるのに対し、コンテナは1つのカーネルを共有します。起動が速く密度が高い反面、カーネルの脆弱性を突かれるとホストや他コンテナへ影響が及びうる――この分離の弱さが前提です。だから「コンテナだから安全」ではなく、層を重ねて守ります。

仕組み:守るべき2つの時点

ビルド時(イメージを作るとき)

実行時(コンテナを動かすとき)

flowchart LR
    BASE["信頼できる最小ベースイメージ"] --> BUILD["ビルド:依存を最小化"]
    BUILD --> SCAN{"脆弱性スキャン・シークレット検出"}
    SCAN -->|"合格"| REG["レジストリ(署名つき)"]
    SCAN -->|"不合格"| FIX["作り直し(パッチでなく置換)"]
    REG --> RUN["実行:非root・権限制限・読み取り専用"]

仕組み:イメージは不変の成果物

コンテナイメージはビルドした時点で中身が固定される不変物です。脆弱性が見つかったとき、動いているコンテナにパッチを当てるのではなく、修正したイメージを作り直してデプロイで入れ替えるのが正しい運用です(イミュータブルインフラ)。これにより「どのバージョンに何が入っているか」が常に明確になり、来歴(サプライチェーンセキュリティ)も追えます。

防御側の使い方/設定

なぜ安全か:母数を減らし、被害を閉じ込める

コンテナの守りが効くのは2方向です。(1) 最小イメージと信頼できる元イメージで、そもそも含まれる脆弱性とツールを減らす(攻撃面と母数の削減)。(2) 非 root・権限制限・分離で、万一侵害されてもコンテナの外へ広がりにくくする(封じ込め)。分離が弱い前提を、最小化と権限制限という別原理で補うのが多層防御の形です。

仕組みの直観

コンテナは集合住宅の一室で、壁(カーネル)を全戸で共有しています。だから壁に穴(カーネル脆弱性)があると隣に響く。守りは「部屋に余計な物を置かない(最小イメージ)」「合鍵を部屋に隠さない(シークレットを焼き込まない)」「住人に管理人権限を与えない(非 root)」「各戸の電気・水道に上限を付ける(リソース制限)」。改装はその場の継ぎ接ぎ(パッチ)でなく、きれいな部屋に引っ越す(イメージ置換)方式です。

⚠️ よくある誤解・設定ミス

対応 lab

コンテナランタイム実環境が前提のため lab は置きません。イメージ署名の検証原理は security-study/labs/digital_signature_demo.py が対応します。

関連