Dockerセキュリティのベストプラクティス:rootlessモードと実践的な対策

Dockerコンテナのセキュリティを強化するためのベストプラクティスを解説。rootlessモードの導入方法や実践的な対策を具体的に紹介します。

Dockerセキュリティrootlessベストプラクティスコンテナ2026/5/25

はじめに

Dockerはコンテナ技術として広く普及していますが、セキュリティ上のリスクも存在します。特に、デフォルトの設定ではコンテナがroot権限で実行されるため、ホストへの影響が懸念されます。本記事では、Dockerのセキュリティを強化するためのベストプラクティスを、rootlessモードを中心に解説します。

Dockerのセキュリティリスク

Dockerコンテナはカーネルを共有するため、コンテナ内からの攻撃がホストに影響を及ぼす可能性があります。主なリスクとして以下が挙げられます。

  • 特権昇格: コンテナ内でroot権限を取得されると、ホストへのアクセスが可能になる
  • コンテナ間の分離不足: 同一ホスト上のコンテナ同士が互いに影響を与える
  • イメージの脆弱性: ベースイメージに既知の脆弱性が含まれている
  • rootlessモードとは

    rootlessモードは、Dockerデーモンとコンテナを非rootユーザーとして実行する機能です。これにより、コンテナ内のroot権限がホストのroot権限と同等ではなくなり、セキュリティが向上します。

    rootlessモードのメリット

  • 権限昇格の防止: コンテナ内でrootになってもホストへの影響が限定される
  • 攻撃表面の減少: デーモンが非rootで動作するため、脆弱性の悪用リスクが低下
  • 既存の権限モデルとの互換性: ユーザー名前空間を利用して、ホストの権限をマッピング
  • rootlessモードのデメリット

  • パフォーマンスの低下: ユーザー名前空間のマッピングによるオーバーヘッド
  • 一部機能の制限: 特権ポート(1024未満)の使用不可、一部のストレージドライバの非対応
  • 複雑な設定: インストールや運用が通常モードより複雑
  • rootlessモードの導入方法

    前提条件

  • Linuxカーネルがユーザー名前空間をサポートしていること(3.8以降)
  • newuidmapnewgidmapがインストールされていること
  • slirp4netnsまたはvpnkit(ネットワーク用)
  • インストール手順(Ubuntu 20.04の場合)

  • Docker Engineのインストール(通常版)
  •    curl -fsSL https://get.docker.com -o get-docker.sh
       sudo sh get-docker.sh
       
  • rootlessモード用のバイナリをインストール
  •    dockerd-rootless-setuptool.sh install
       
  • 環境変数の設定
  •    export PATH=/usr/bin:$PATH
       export DOCKER_HOST=unix:///run/user/1000/docker.sock
       
  • サービス開始
  •    systemctl --user start docker
       systemctl --user enable docker
       
  • 動作確認
  •    docker run hello-world
       

    注意点

  • rootlessモードでは、docker.sockがユーザーのディレクトリに作成されるため、パーミッションに注意
  • 特権ポートを使用する場合は、CAP_NET_BIND_SERVICEを付与するか、ポートフォワーディングを利用
  • その他のセキュリティベストプラクティス

    1. イメージのセキュリティ

  • 公式イメージの使用: Docker Hubの公式イメージや検証済みイメージを利用
  • イメージのスキャン: docker scanやTrivyなどのツールで脆弱性スキャン
  • 最小限のベースイメージ: Alpine Linuxなど、攻撃表面が小さいイメージを選択
  • 2. コンテナの実行時設定

  • 非rootユーザーでの実行: DockerfileでUSER命令を使用
  • 読み取り専用ファイルシステム: --read-onlyフラグでコンテナのファイルシステムを読み取り専用に
  • リソース制限: --memory--cpusでリソースを制限
  • ケーパビリティの削除: --cap-drop=ALLで不要なケーパビリティを削除し、必要なものだけ追加
  • 3. ネットワークセキュリティ

  • ユーザー定義ネットワーク: デフォルトのブリッジネットワークではなく、ユーザー定義ネットワークを使用
  • ポート公開の制限: 必要なポートのみ公開
  • TLSの使用: Dockerデーモンへの通信を暗号化
  • 4. シークレット管理

  • Docker Secretsの使用: パスワードやAPIキーなどの機密情報は環境変数ではなく、Docker Secretsで管理
  • BuildKitの利用: ビルド時のシークレットを安全に扱う
  • 5. 監査とモニタリング

  • ログの収集: Dockerログを外部のログ管理システムに送信
  • セキュリティイベントの監視: Falcoなどのツールでコンテナの挙動を監視
  • 定期スキャン: イメージとコンテナの定期的な脆弱性スキャン
  • まとめ

    Dockerのセキュリティを強化するには、rootlessモードの導入が効果的です。ただし、すべての環境でrootlessモードが適しているわけではないため、要件に応じて通常モードと使い分けることが重要です。また、イメージの管理や実行時設定など、基本的なベストプラクティスを徹底することで、セキュリティリスクを大幅に低減できます。

    Dockerを安全に運用するためには、常に最新のセキュリティ情報を収集し、適切な対策を継続的に実施してください。