クラウド・インフラセキュリティ

コンテナセキュリティ

約 4 分で読めます

コンテナセキュリティとは

コンテナセキュリティとは、コンテナのビルドからデプロイ、実行までのライフサイクル全体にわたってセキュリティを確保する取り組みです。コンテナはホスト OS のカーネルを共有するため、仮想マシンとは異なるセキュリティモデルが必要になります。

コンテナセキュリティは大きく 3 つのフェーズに分かれます。ビルド時 (イメージの安全性)、デプロイ時 (構成の安全性)、ランタイム (実行時の保護) です。いずれかのフェーズだけを対策しても不十分で、全フェーズを通じた多層防御が求められます。IaC でコンテナの構成を管理し、CI/CD パイプラインにセキュリティチェックを組み込むことが実践の出発点です。

イメージセキュリティとサプライチェーン保護

コンテナイメージは攻撃の起点になりやすく、ビルド時のセキュリティが最も重要です。

  • ベースイメージの選定: Alpine や distroless など、最小限のパッケージのみを含むベースイメージを使用する。不要なパッケージが少ないほど攻撃対象面 (アタックサーフェス) が縮小する
  • イメージスキャン: Trivy、Grype、Snyk Container などのツールで、イメージに含まれる OS パッケージやライブラリの脆弱性を検出する。CI/CD パイプラインに組み込み、Critical 脆弱性を含むイメージのデプロイを自動ブロックする
  • イメージ署名: Cosign (Sigstore) でイメージに署名し、デプロイ時に署名を検証する。改ざんされたイメージや未承認のイメージの実行を防止できる
  • プライベートレジストリ: 本番環境で使用するイメージは、アクセス制御されたプライベートレジストリから取得する。Docker Hub の公開イメージを本番で直接使用しない

ランタイムセキュリティと最小権限

コンテナの実行時には、権限の最小化と異常検知が防御の柱になります。

  • 非 root 実行: コンテナプロセスを root 以外のユーザーで実行する。Dockerfile の USER ディレクティブで非特権ユーザーを指定する
  • 読み取り専用ファイルシステム: readOnlyRootFilesystem: true を設定し、コンテナ内のファイル改ざんを防止する。書き込みが必要なディレクトリのみ tmpfs でマウントする
  • Capabilities の制限: Linux Capabilities をすべて削除 (drop: ALL) した上で、必要最小限の Capability のみを追加する
  • ランタイム監視: Falco などのツールでコンテナ内のシステムコールを監視し、シェルの起動、想定外のネットワーク接続、機密ファイルへのアクセスなどの異常を検知する

IAM ロールをコンテナ (Pod) 単位で割り当て、ネットワークセグメンテーションで Pod 間の通信を制限することも重要です。

Kubernetes のセキュリティ設定

Kubernetes 環境では、オーケストレーション層のセキュリティ設定が不可欠です。

  • Pod Security Standards: Kubernetes の Pod Security Admission で Restricted プロファイルを適用し、特権コンテナの実行や hostNetwork の使用を禁止する
  • NetworkPolicy: デフォルトで全 Pod 間通信を拒否し、必要な通信のみをホワイトリストで許可する。マイクロサービス間の不要な通信経路を遮断する
  • RBAC: クラスタ管理者、開発者、CI/CD パイプラインそれぞれに最小権限の Role を定義する。cluster-admin の使用は緊急時に限定する
  • Secrets の管理: Kubernetes Secrets は Base64 エンコードにすぎず暗号化ではない。シークレット管理サービス (AWS Secrets Manager、HashiCorp Vault) と連携し、Secrets を外部から注入する設計にする

よくある誤解

コンテナは仮想マシンと同じレベルで分離されているので安全
コンテナはホスト OS のカーネルを共有しており、仮想マシンほどの分離レベルはありません。カーネルの脆弱性を突かれるとコンテナからホストに脱出 (コンテナエスケープ) される可能性があります。Seccomp、AppArmor、非 root 実行などの多層防御が必要です。
公式の Docker イメージはそのまま本番環境で使っても安全
公式イメージにも既知の脆弱性が含まれていることは珍しくありません。本番利用前に必ずイメージスキャンを実施し、不要なパッケージを削除したカスタムイメージを作成すべきです。また、イメージのタグではなくダイジェスト (SHA256) で固定し、意図しない更新を防ぎましょう。

コンテナセキュリティと VM セキュリティの違い

コンテナ

ホスト OS のカーネルを共有。起動が高速でイメージが軽量。攻撃対象面はイメージの内容に依存。カーネル脆弱性の影響を受けやすい。イミュータブルな運用が容易。

仮想マシン

ハイパーバイザーで完全に分離。起動に時間がかかりイメージが大きい。OS 全体のパッチ管理が必要。カーネルレベルの分離が強固。状態を持つ運用が一般的。

関連用語

関連記事