2026年8月20日
2026年8月20日
Dockerのsocket(/var/run/docker.sock)を安全に使う方法
はじめに
Dockerのsocket(/var/run/docker.sock)は、ホストからDockerコンテナに対してAPIアクセスを行うために使用されます。このsocketを適切に管理することで、ホストとコンテナ間での通信が効率的になります。しかし、その一方で不正なアクセスがあるとシステム全体のセキュリティリスクとなります。本記事では、/var/run/docker.sockを安全に利用する方法について解説します。
症状・背景
このテーマが必要になる主な場面は以下の通りです:
- ホスト側からDockerコンテナに対してAPIアクセスを行う場合
- Docker SwarmやKubernetesなどのクラスタ管理環境で使用する場合
- Docker Composeを使用して複数のサービスを一括管理する場合
手順・設定方法
ステップ1: SELinuxやAppArmorの設定
# SELinuxが有効の場合、docker socketへのアクセスを制限するための規則を作成します。
semanage fcontext -a -t docker_runtime_t '/var/run/docker.sock'
# アプリケーションのセキュリティポリシーを更新します。
restorecon -v /var/run/docker.sock
ステップ2: ユーザー権限の制御
# Docker socketへのアクセスは、通常のユーザーではなく特定のユーザーグループに限定するべきです。
usermod -aG docker $USER
# 新しいグループに追加されたユーザーがDocker APIを適切に利用できるようにします。
newgrp docker
ステップ3: SELinuxやAppArmorの再度設定(オプション)
# AppArmorを使用している場合、docker.serviceのプロファイルを更新してsocketへのアクセスを許可します。
sudo aa-edit /etc/apparmor.d/docker
# SELinuxを使用している場合、必要なポリシールールを適用します。
setsebool -P docker_can_network=1
ステップ4: 実践/トラブルシュート/監視
# Dockerのsocketを確認し、適切にアクセス制御が実施されていることを検証します。
ls -lZ /var/run/docker.sock
# SELinuxやAppArmorのログから不正なアクセスを監視します。
sudo grep docker /var/log/audit/audit.log
注意事項
- Docker socketへのアクセスは、セキュリティ上の理由で特定のユーザーグループに限定すること。
- SELinuxやAppArmorを使用している場合は、その設定も適切に行う必要がある。
- 操作履歴を定期的に確認し、不正なアクセスを監視する。
まとめ
1. SELinuxやAppArmorの設定: Docker socketへのアクセスを制限するために必要なセキュリティポリシーを設定します。
2. ユーザー権限の制御: ホスト側からDocker APIを利用するためのグループにユーザーアカウントを追加します。
3. 再度SELinuxやAppArmorの設定(オプション): SELinuxやAppArmorを使用している場合、必要に応じて設定ファイルを更新します。
4. 実践/トラブルシュート/監視: セキュリティ設定が正しく適用されていることを確認し、不正アクセスを監視します。
関連記事:
- [Dockerの基本操作とコンテナ管理]
- [KubernetesでDockerを使用する方法]
- [セキュリティ対策とDockerの使用]