9.1 Dockerネットワークセキュリティの主要側面
この講義では、Dockerネットワークセキュリティの主要側面、推奨事項、そしてコンテナやデータを保護するためのベストプラクティスについて学びます。
Dockerネットワークセキュリティの主要側面
- コンテナの分離
- アクセス制御
- データの暗号化
- モニタリングと監査
- 更新とパッチ
9.2 コンテナの分離
コンテナの分離は、Dockerネットワークのセキュリティを確保するための最初のステップだよ。これによって、潜在的な脆弱性の影響を最小限に抑えたり、コンテナ間の無許可アクセスを防ぐことができる。
カスタムネットワークの使用
コンテナを分離するためにはカスタムネットワークを作成し、必要なサービスだけとやり取りするように制限しよう。
docker network create --driver bridge my_secure_network
Docker Composeでは、各サービスごとにカスタムネットワークを定義できるよ。
version: '3.8'
services:
web:
image: nginx:latest
networks:
- my_secure_network
app:
image: myapp:latest
networks:
- my_secure_network
networks:
my_secure_network:
driver: bridge
コンテナ間ルールの使用
Dockerではネットワークレベルでコンテナ間のやり取りを管理するためのルールを設定できるんだ。
docker network connect --link <source_container>:<alias> <target_network> <container_name>
例:
docker network connect --link container1:c1 multi-host-network container2
9.3 アクセス制御
アクセス制御は、コンテナやネットワークへの不正アクセスを防ぐために重要だよ。
ポートへのアクセス制限
IPアドレスやファイアウォールルールを使って、公開されているポートへのアクセスを制限しよう。
docker run -d -p 127.0.0.1:8080:80 --name my_secure_container nginx
ロールとポリシーの利用
コンテナやネットワークを管理するユーザーの権限を制限するために、ロールやアクセスポリシーを活用してね。
docker run -d --user <uid>:<gid> my_secure_container
9.4 データ暗号化
データ暗号化は、静止中と転送中の機密データを保護するのに役立つよ。
静止中のデータ暗号化
コンテナが使用するボリュームにファイルシステム暗号化を適用しよう。
docker run -d --name my_secure_container --mount
type=volume,source=my_volume,destination=/data,volume-driver=local,volume-opt=o=bind,volume-opt=device=/mnt/secure_data nginx
転送中のデータ暗号化
コンテナと外部サービス間のデータ送信を暗号化するためにTLSを使用しよう。
docker run -d -p 443:443 --name my_secure_container -v /path/to/cert.pem:/etc/nginx/cert.pem -v
/path/to/key.pem:/etc/nginx/key.pem nginx
9.5 監視と監査
監視と監査を通じて、コンテナやネットワークのアクティビティを追跡し、潜在的な脅威を識別して対応できるようになるよ。
ログとメトリクス
コンテナのログとメトリクスを収集して分析・監視しよう。
docker logs <container_name>
Prometheus や Grafana みたいな監視ツールを使って、コンテナやネットワークの状態を追跡しよう。
監査
ユーザーの操作やコンテナ、ネットワークの設定変更を追跡するために監査を有効にしてね。
docker events
9.6 アップデートとパッチ
定期的なアップデートとパッチは、既知の脆弱性からコンテナやネットワークを保護するのに役立つよ。
Dockerのアップデート
Dockerのアップデートをチェックして、新しいバージョンをタイムリーにインストールしてね。
sudo apt-get update
sudo apt-get install docker-ce
イメージのアップデート
セキュリティ修正を含む最新バージョンにコンテナイメージを定期的にアップデートしてね。
docker pull nginx:latest
9.7 ベストプラクティスの例
例 1: 分離されたネットワークの作成
アプリケーションの各コンポーネント用に分離されたネットワークを作成してください。
docker network create --driver bridge frontend_network
docker network create --driver bridge backend_network
対応するネットワークでコンテナを起動します。
docker run -d --name frontend --network frontend_network nginx
docker run -d --name backend --network backend_network myapp
例 2: ポートへのアクセス制限
コンテナのポートへのアクセスを必要なIPアドレスやホストのみに制限してください。
docker run -d -p 192.168.1.100:8080:80 --name restricted_container nginx
例 3: 暗号化のためのTLSの使用
データ転送を保護するため、コンテナでTLSの使用を設定してください。
docker run -d -p 443:443 --name tls_container -v /path/to/cert.pem:/etc/nginx/cert.pem -v
/path/to/key.pem:/etc/nginx/key.pem nginx
GO TO FULL VERSION