第2章 コンテナーのホストおよびマルチテナンシー
2.1. RHEL 上でコンテナーのセキュリティーを保護する方法
コンテナーは、複数のアプリケーションを単一ホストにデプロイすることで、マルチテナンシーのデプロイメントを単純化します。 この際、カーネルおよび Docker ランタイムを使用して各コンテナーをスピンアップします。
ホストカーネルのセキュリティーを保護し、コンテナーを相互にセキュアにすることのできるオペレーティングシステム (OS) を使用する必要があります。Linux では、コンテナーは特殊なタイプのプロセスに過ぎないため、コンテナーのセキュリティーを保護することは、実行中のプロセスのセキュリティーを保護することと同じです。コンテナーは非 root ユーザーとして実行される必要があります。権限レベルを下げることや、可能な限り権限レベルを低くした状態でコンテナーを作成することが推奨されます。
OpenShift Container Platform は Red Hat Enterprise Linux (RHEL) および RHEL Atomic Host で実行されるため、デフォルトで以下の概念がデプロイされる OpenShift Container Platform クラスターに適用されます。 また、これらはプラットフォーム上でコンテナーのセキュリティーを保護する上で中核を成す概念になります。
- Linux namespace は特定のグローバルシステムリソースを抽象化し、これを namespace 内の複数のプロセスに対して分離したインスタンスとして表示できます。これにより、複数のコンテナーが競合せずに同じリソースを同時に使用することができます。namespace のタイプ (例: マウント、PID、およびネットワーク) の詳細は、Overview of Containers in Red Hat Systems を参照してください。
- SELinux はセキュリティーの層を追加し、コンテナーを相互に、またホストから分離させます。SELinux により、管理者は、それぞれのユーザー、アプリケーション、プロセスおよびファイルに対して強制アクセス制御 (MAC) を実施できます。
- CGroup (コントロールグループ) はプロセスのコレクションについてのリソースの使用 (CPU、メモリー、ディスク I/O、ネットワークなど) を制限し、設定し、分離します。CGroup は、同じホスト上のコンテナーが相互に影響を与えないようにするために使用されます。
- Secure computing mode (seccomp) プロファイルは、利用可能なシステム呼び出しを制限するためにコンテナーに関連付けることができます。
- RHEL Atomic Host を使用したコンテナーのデプロイは、ホスト環境を最小化してコンテナー向けに調整することで、攻撃される対象の規模を縮小します。
参考文献
- Linux の man ページ: namespaces(7)
- Red Hat Enterprise Linux Atomic Host Overview of Containers in Red Hat Systems: Secure Containers with SELinux
- Red Hat Enterprise Linux リソース管理ガイド: コントロールグループについて (CGroup)
- Red Hat Enterprise Linux Atomic Host コンテナーセキュリティーガイド: Linux Capabilities and seccomp
- カーネルのドキュメント: seccomp