コンテナって何?
「アプリケーション・コンテナ」または単に「コンテナ」とは、仮想化技術の一種です。仮想化というと仮想マシン(以下、VM)を思い浮かべる方も多いと思います。
VMは、ホストOS上で動作するハイパーバイザの上に、さらに別の仮想OS(ゲストOS)を動かすことで複数の分離した環境を仮想的に作り出します。もともと複雑な動きをするOSの上で別のOSを動作させるため、当然、処理は重くなりホストマシンへの負荷も大きくなります。
一方、コンテナでは、ホストOS上のコンテナプラットフォームが、アプリケーション単位で独立したプロセスを起動して管理するアプローチで、分離性を確保し仮想化を実現するものです。VMに比べリソースが効率的に利用でき、かつ、動作も軽量という利点があります。
図1:仮想マシン(VM)とコンテナのアーキテクチャの違い
また、コンテナの起動条件等を一度定義して登録してしまえば、コンテナプラットフォーム上に同一の動作をする複数のコンテナを素早く起動することができるため、動的なスケーラビリティ確保が容易です。
図2:コンテナの実行・停止
コンテナ特有のセキュリティ上の課題とは
コンテナは、これまでの物理サーバや仮想マシンによるサーバの構成とは、アーキテクチャが大きく異なるため、思ってもいなかったようなセキュリティ上の課題も生まれます。
例えば、物理サーバやVM環境上のサーバで実行しているアプリケーションでインシデントが発生したことが分かった場合、サーバ上に残っているログを手掛かりに調査を行います。
それに対して、必要に応じて動的に増やしたり、減らしたりする前提のコンテナでは、調査が必要になった時には、インシデントが発生していたコンテナはすでにログごと消えているかもしれません。コンテナ上でログの保全を行うためには、アプリケーションとは別にログ収集・保全を行う仕組みが必要になります。
他にも、実行中のコンテナをどのように監視するか、外部レジストリから取得したイメージに悪意のあるコードが埋め込まれることを想定した対策など、コンテナにはいくつかの考慮すべき観点があります。
コンテナセキュリティの標準対策
コンテナに特有のセキュリティ上の課題に対して、アメリカ国立標準技術研究所(NIST)がそのリスクと対策観点についてまとめた“Application Container Security Guide”(NIST SP 800-190)という文書(※1)を作成しています。コンテナ技術を活用したアプリケーションの開発においては、このガイドラインがセキュリティ確保のひとつの指標になります。
最近ではコンテナ向けのセキュリティ対策製品(※2)(※3)も登場しており、NIST SP 800-190に即した対策機能が提供されるものがほとんどです。開発プロジェクトで自身での対策が困難なリスクについては、こういった製品を活用することも有用でしょう。
また、コンテナプラットフォーム自体の構築にあたっては、CIS(Center for Internet Security)といった業界団体が発行しているセキュリティ設定のベストプラクティス(※4)(※5)などを参考にすることで、基盤としてのセキュリティを確保することが推奨されます。
コンテナは、様々な技術を取り込みながら、今もまだ進化が続いている技術分野です。外部のリソースも有効活用しながら、セキュリティ対策を実施する側も成長していくことが求められます。
https://www.aquasec.com/products/aqua-container-security-platform/