コンテナとは、
実行環境が分離されたユーザ空間のこと
サーバの仮想化技術には以下の方式がある。コンテナ型仮想化の技術について調べてみた。
・VM型仮想化
VMwareやAmazonEC2等のように、ハードウェアやファームウェアまでまとめて仮想化する技術。
そのため、ホストマシン上で別のOSのゲストマシンが動かせる。
・コンテナ型仮想化
アプリケーションが動く動作環境(実行環境)をそのまま仮想化(イメージ化)する技術で、
開発環境で作成したマシンを本番環境でデプロイする際に、動作できない等の問題を解決するために作られた技術。
ハードウェアやファームウェアまでは丸ごと仮想化しないため、
ゲストOSはホストマシンと同じである必要がある。
Docker for WindowsでもHyper-V上にLinuxを立て、そのマシン上でコンテナを作成している。
コンテナにおけるセキュリティについて
コンテナに関するセキュリティは以下のようなものがある。
・カーネルのセキュリティ
コンテナでは、ホストのカーネルを共用する。以下の機能に脆弱性がある場合は、
セキュリティの問題になる場合がある。
Namespaces
Linuxのnamespaceは、リソースを区切って、 あたかもそれだけしか存在しないように見せるためのもの。
具体的には、mount、UTS、IPC、PID、ネットワークおよびユーザの6つが対象となるリソース。
各プロセスのnamespaceは、/proc/プロセスID/ns/ を以下のように見ることで確認できる。
cgroups
cgroups (control groups) は、プロセスグループのリソース(CPU、メモリ、ディスクI/Oなど)の利用を
制限・隔離するLinuxカーネルの機能。
・Dockerデーモン
デーモンを操作できるユーザの制限(APIの公開など)
信頼できるイメージを利用する
・コンテナの設定
rootユーザを避ける
セキュリティチェックツール
コンテナの設定に関してチェックするようなツールも公開されている。
https://github.com/docker/docker-bench-security
参考にしたサイト
https://rest-term.com/archives/3287/
http://www.usupi.org/sysad/260.html
https://www.kaitoy.xyz/2016/07/31/docker-for-windows/
http://www.atmarkit.co.jp/ait/articles/1609/01/news053.html
http://www.atmarkit.co.jp/ait/articles/1610/24/news014.html