コンテナセキュリティの始め方 ~今知っておきたいコンテナセキュリティの基本の「キ」~
はじめに
コンテナテクノロジーへのセキュリティアプローチには様々なバリエーションが存在します。
従来からのコンピューティング手法に適用されてきたセキュリティソリューションを応用したものから、
コンテナテクノロジーならではのものまで多種多様なセキュリティアプローチが選択肢として用意されています。
コンテナセキュリティを検討する際には、これらの個々のセキュリティアプローチの特性を十分に理解し、
適切に活用することで導入効果を最大化することができます。
本記事ではコンテナのライフサイクルである、"Build - Ship - Run"のそれぞれのフェーズに存在する課題と、
セキュリティレベルを向上させるために何をどのように守るべきかを解説します。
3行でわかる本記事のサマリ
- Buildフェーズではセキュリティ課題として脆弱性への対応とアタックサーフェスの削減が重要。
- Shipフェーズではイメージレジストリの秘匿性と脆弱性の監視がセキュリティ課題。
- Runフェーズではランタイムの保護、脆弱性対応、コンプライアンス対応、ネットワークセキュリティ、コンテナ実行基盤へのアクセス管理、コンテナホストの保護が課題となる。
目次
- コンテナのライフサイクル Build - Ship - Run
- Buildフェーズのセキュリティ課題
- Shipフェーズのセキュリティ課題
- Runフェーズのセキュリティ課題
コンテナのライフサイクル Build - Ship - Run
コンテナテクノロジーの運用形態は様々ですが、そのライフサイクルは共通しています。
ライフサイクルを表現する最も一般的な表現として、"Build - Ship - Run"があります。
元々は、Docker社が提唱したコンテナ運用のスローガンだったものが、
昨今では、コンテナのライフサイクルを表す代名詞として用いられています。
"Build - Ship - Run"を分解すると下記のようにコンテナ運用の一連のタスクが見えてきます。
Buildフェーズ
docker buildコマンドによってDockerfileを基にコンテナイメージが生成される
このタスクではコンテナイメージは共有されない
Shipフェーズ
イメージレジストリに対してコンテナイメージが格納される
このタスクによりコンテナイメージがリモートから共有利用できるようになる
Runフェーズ
コンテナイメージがコンテナワークロードとして実行され、サービスが提供される
Buildフェーズのセキュリティ課題
ライフサイクルの起点となるBuildフェーズはセキュリティを考慮する場合に最も重要なフェーズと位置づけられます。
コンテナワークロードの実行元となるコンテナイメージをいかに堅牢に生成できるかが、
コンテナ運用全体のセキュリティレベルに大きな影響を与えます。
具体的なセキュリティ課題としては、脆弱性への対応とアタックサーフェスの削減が挙げられます。
脆弱性への対応
生成するコンテナイメージに含まれるベースイメージ、モジュール、パッケージ、ライブラリのバージョンやパッチ適用の状態に十分な注意を払って、イメージビルドを実行します。
アプリケーションが正常に動作することを前提に、できる限り最新化された状態を目指します。
ビルドされたコンテナイメージの脆弱性を可視化するための脆弱性スキャナーを活用することで、セキュリティレベルを容易に把握できます。
アタックサーフェスの削減
コンテナイメージを生成する際に、サービスを提供するためのアプリケーションが必要としないオブジェクトが含まれていると、
不用意にアタックサーフェスを創出してしまう事態に繋がります。
できる限り不要なオブジェクトを排除するために、
マルチステージビルドの実行やベースイメージにalpineイメージやscratchイメージを使用する等の対策が推奨されます。
Shipフェーズのセキュリティ課題
Shipフェーズでは、Buildフェーズで生成したコンテナイメージをコンテナ実行基盤からアクセスできるイメージレジストリに格納します。
考慮するべきセキュリティ課題は、イメージレジストリの秘匿性と脆弱性の監視です。
イメージレジストリの秘匿性
ビジネスロジックの中でコンテナを運用する場合、コンテナイメージをパブリックに公開する必要が無いケースがほとんどです。
パブリックレジストリではなく、プライベートレジストリを活用することにより、関係のない第3者に対してコンテナレジストリの存在を隠蔽します。
関係者は、プライベートレジストリにアクセスするためのシークレットキーを用いて、コンテナイメージにアクセスすることができます。
脆弱性の監視
Buildフェーズで生成されたコンテナイメージは、イメージレジストリに格納された後、日を追うごとに古くなり、脆弱性を保持する可能性が高まります。
イメージレジストリ内のコンテナイメージに対しても、脆弱性スキャンを定期的に実行することで、
セキュリティリスクの把握とセキュリティ運用ポリシーに沿った運用が可能になります。
Runフェーズのセキュリティ課題
Runフェーズでは、コンテナイメージからコンテナを稼働させ、サービスの提供が開始されます。
このフェーズではコンテナの実行に関与する様々なオブジェクトが存在するため、セキュリティ課題の数も前述の2つのフェーズと比較して多くなります。
代表的なセキュリティ課題としては、ランタイムの保護、脆弱性対応、コンプライアンス対応、ネットワークセキュリティ、コンテナ実行基盤へのアクセス管理、コンテナホストの保護等があります。
ランタイムの保護
コンテナ内部の挙動監視と保護を実行します。コンテナ内部であらかじめ想定していない下記のような挙動が確認された場合に異常と見なし、対策を講じます。
- 想定外のプロセスの実行
- 想定外の外部通信の発生
- 想定外のファイルシステムへのアクセス
具体的なソリューションとしてはLinuxコンテナであれば、SecCompやAppArmorを用いてコンテナを実行することで
アタックサーフェスの削減と不要なプロセスの実行、ファイルアクセスを抑制することができます。
より容易に保護を実現したい場合は、有償のコンテナセキュリティツールを導入することが推奨されます。
脆弱性対応
コンテナ運用では、稼働中のコンテナに対してセキュリティアップデートを実行することが一般的ではないため、
稼働中のコンテナに対しても脆弱性スキャンを実行し、セキュリティレベルを把握することが求められます。
運用ポリシーに反するレベルの脆弱性を検出した場合には、コンテナイメージのアップデートを検討します。
コンプライアンス対応
従来からセキュリティ運用のベストプラクティスとして用いられてきたセキュリティスタンダードに、
コンテナ運用に特化したものが提供されています(CIS Benchmark, NIST SP 800-190、等)。
これらに準拠した運用を実践することで、比較的容易にコンテナ運用のセキュリティレベルを向上させることができます。
コンプライアンスレベルを測るためのスキャナーもOSSとして提供されていますので、活用することを推奨します。
ネットワークセキュリティ
コンテナ特有のセキュリティ被害として、侵害されたコンテナから数珠繋ぎに周辺のコンテナにネットワーク経由で脅威が及ぶというケースがあります。
このような脅威特性に対応するためには、コンテナ間通信にFirewallを適用し、本来必要なコンテナ間通信だけに許可ポリシーを適用するという防御策が有効です。
前述したランタイム保護の想定外の外部通信の発生の検知と併用することで、より堅牢なセキュリティ対策となります。
コンテナ実行基盤へのアクセス管理
Kubernetesのようなオーケストレーターを活用する比較的規模の大きいコンテナ運用では、様々な立場のユーザーが実行基盤へアクセスすることになります。
このようなユースケースにおいて、適切なアクセス管理を実践することは、最も重要で最も基本的なセキュリティ課題です。
個々のユーザーに対して必要最小限のアクセス権を与え、アクセス履歴を監視することが推奨されます。
SIEMを用いることで、アクセスを可視化し、異常を確実に把握する準備を整えます。
コンテナホストの保護
フルマネージドのコンテナ実行基盤を利用していない場合、コンテナエンジンとホストOSに対してもセキュリティ運用が求められます。
以下に代表的なセキュリティ課題を示します。
- 脆弱性対応
コンテナエンジン、コンテナオーケストレーター、ホストOSのバージョンアップとパッチ適用 - ネットワークセキュリティ
ホストOSへのファイアウォール適用(L4)、各種APIの保護(L7) - コンプライアンス対応
ホストOSのセキュリティスタンダード準拠
コンテナホストのセキュリティ対策の場合、従来からのセキュリティ対策ツールで対応できる部分もありますが、全てではありません。
部分的にセキュリティツールの導入を検討するよりも、統合型のコンテナセキュリティツールを導入することでコンテナホスト全体のセキュリティ対策機能を利用できるため、運用負担は低減できます。
まとめ
本記事で解説したコンテナ運用のセキュリティ課題は、ビジネスユースケースでのコンテナ運用を検討する場合に考慮すべき最低限の実例です。
実際には、より複雑で難易度の高いセキュリティ課題が多数存在します。
また、今度のコンテナテクノロジーの発展やユースケースの拡張によっては、新しいセキュリティ課題が顕在化することも想定しなければなりません。
まずは、本記事のセキュリティ課題を基本として理解を深めながら、自社の運用形態に最適なコンテナセキュリティ運用を策定することが重要です。
次回からは、本記事で解説した個々のセキュリティ課題とその対策をより詳しく解説していきます。
シリーズ記事のご紹介 【コンテナセキュリティの始め方】
関連資料のご紹介
『コンテナ環境をプラットフォームまるごと保護!今話題のCNAPPとは?』
コンテナセキュリティのベストプラクティスにあわせ、それらをホストするクラウドのセキュリティを、
ガートナー社が提唱する「CNAPP」の観点を用いてデモを交えて解説します。