Kubernetes の監視・監査における3つのポイント
そこで、Hardening Guidanceに記載されている内容をもとに、Kubernetes の監視・監査する上で考慮すべき3つのポイントを説明します。
ポイント1:コンテナ、ノードの監視
1つ目のポイントは、KubernetesはOSよりも上のレイヤーでコンテナによる論理的なアプリケーションの分離によって実現されている点です。コンテナによる分離では、ハイパーバイザーによる分離と比較し、その境界が緩やかになります。コンテナのランタイムにバグや脆弱性があった場合、ホストやほかのコンテナに影響を与えることが想定されます。
監視や監査によってコンテナの挙動をさまざまな側面からとらえることで、攻撃やパフォーマンスの低下を未然に防ぎ、有事の場合においても速やかにその状況を把握できます。
取得する情報としては、コンテナもOS上の1つのプロセスととらえ、アプリケーションのログ、CPU 使用率やメモリ使用量等のパフォーマンスのメトリックが有効です。またプロセスが何らかの処理をする場合、OSのシステムコールを呼び出すことから、呼び出されるシステムコール対して、監視や制約を設けることでコンテナの挙動を詳細に把握できます。
ポイント2:Kubernetes API の監視
2つ目のポイントは、Kubernetesの動きは APIの操作によって実現がされているということです。例えば、kubectl
による Pod の作成やサービスの公開、アカウントの作成のようにユーザーが Kubernetes に対して何らかの操作をする場合に API が使用されます。
また、Pod のログ取得やポートのフォワード等、API server
と kubelet
間の通信においても API が使用されます。APIによるやりとりによってコンポーネント間を疎結合にすることで、変更に強く高い可用性を持つアーキテクチャーが実現されています。Kubernetes の各コンポーネントはログの出力ができ、また API を呼び出す際に別の処理をフックする Admission Controller
のような仕組みも持っています。
監視や監査においては、これらのAPIのやりとりを補足して、どのAPIに対してどのようなことが誰(どのコンポーネント)から行われているのかを追跡します。さらに、APIに対する積極的な介入で Kubernetes を健全な状態を保つこともできます。
ポイント3:外部サービスの監視
3つ目のポイントは、冒頭でも述べたように、Kubernetesを使用するシステムはKubernetesのコンポーネント以外のサービスや機能も利用していることが多いということです。特にクラウドのマネージドサービスを活用する場合は周辺機能としてクラウドのサービスを利用することが一般的です。
具体的には、Kubernetesのフロントにあるロードバランサーやコンテナレジストリ、認証等です。これらのサービスを活用する場合、当然ながら、Kubernetesの監視・監査だけでは確認できないログやメトリックが出てくるため、システム全体のセキュリティ監視では周辺のサービスや機能の監視・監査も重要です。
特に、Azureにおいては、Azure上のリソースのセキュリティや監視を包括的に確認できる Microsoft Defender for Cloud
や Azure Monitor
、Network Watcher
を活用していくことがお勧めです。
次回は、これまで説明してきた点をもとに、AKSではどのようなサービスや機能で監視や監査を実現できるかを見ていきましょう。
著者プロフィール
野村総合研究所 湯川勇太(ゆかわ ゆうた)
前職で大手家電量販店のECモールの立ち上げとECサイトの刷新プロジェクトを経験。NRI入社後は製造業の商品検索システムを担当した。現在は大手物流企業向けの基幹システムの方式設計や技術検証、トラブル対応を行っている。
Microsoft 乃村 翼 (のむら つばさ)
前職はコールセンターシステムを展開するスタートアップ企業で、Asterisk を用いたPBXシステムの構築、RailsやPHP等のOSSスタックを用いたWeb アプリケーションの開発を経験。アプリケーション基盤でLXCを使用していたことがきっかけで、コンテナ技術に興味を持つ。現在は、Microsoft CorporationのFastTrack for Azure のカスタマーエンジニアとして、Azureインフラを中心に設計・導入の支援を行っている。