Kubernetes アーキテクチャのアタックサーフェス
クラウドインフラにおけるセキュリティを考慮する上で、アタックサーフェス(攻撃を受ける可能性のある場所)が多様化していることにあらためて留意する必要があります。
企業システムへのアクセスの種類が増え、システムアーキテクチャも多層化・複雑化していく中で、システムを悪意ある攻撃者から保護するために、システムアーキテクチャを俯瞰的にとらえてこれに対応した脅威モデルを私たちは想定すべきでしょう。
ID、ホスト、ネットワーク、データにまたがった多層防御 (defense-in-depth) の実装により安全性を確保し保護をする、というセキュリティの全体像をこれまで触れてきました。
今回はこの多層防御の考え方に基づき、その一要素であるネットワークセキュリティについて、特にKubernetes/AKS(Azure Kubernetes Service)で考慮すべき考え方および対策を説明します。
本連載の初回で取り上げたセキュリティガイダンス「Kubernetes Hardening Guidance」でも、脅威モデルとして悪意のあるアクターが脆弱性を突いてリモートからたびたびアクセスしてくることを想定しています。
Kubernetes アーキテクチャでは、攻撃者が遠隔操作に利用可能となり得るいくつかのターゲットが存在します。それが以下になります。
コントロールプレーン
Kubernetes のコントロールプレーンは、クラスタを管理するための多くの重要なコンポーネントが稼働しています。適切なアクセス制限が行われていない場合、攻撃者は公開されているコントロールプレーンのエンドポイントを標的とします。
Node
Node はアプリケーションワークロードが載るコンテナの実行に加えて、コンテナの実行管理と経路制御を司るkubeletとkube-proxyサービスをホストします。Nodeは一般的にクライアントからの外部アクセスを受け付けるようにネットワーク経路が設定されており、攻撃者はよりアクセスしやすいと言えます。
コンテナアプリケーション
クラスタ内で実行されるアプリケーションもまた攻撃対象となり得ます。アプリケーションはクラスタ外からもアクセス可能であり、一度攻撃者がリモートから Podへの侵入に成功すると、内部リソースにアクセスしたり特権を昇格させるといった攻撃が行われる可能性もあります。
AKS はマネージドサービスのKubernetesとして、これらに対する攻撃を防御あるいは緩和するネットワークトポロジーがあらかじめ構成されていますが、利用環境やセキュリティ要件に応じて追加の対応が必要とされるケースも少なくありません。以下では、AKSが構成されるネットワーク環境について紹介したうえで、検討すべき具体的なネットワークセキュリティ対策について解説します。
Azureのネットワーク
一般的にパブリッククラウド環境においては、内部あるいは外部のリソースに対する接続や通信ができるように仮想ネットワークが提供されます。
環境構成を柔軟かつ動的に定義できることがクラウドネットワークの特徴とも言え、ファイアウォール、ロードバランサー、WAF、NATなどのさまざまな機能を組み合わせて利用できます。
Azureにおいてもこれらのさまざまなネットワーク機能が提供されています。ここでベースとなるのは Azure Virtual Network(VNet) と呼ばれる仮想ネットワークです。これにより、他のユーザーや他のテナントのネットワークとは論理的に隔離された、いわばプライベートなネットワークを Azure内に作成できます。
通常、作成した VNet上に仮想マシンや各種リソースを展開し、これらがVNet内部および外部のサービスやオンプレミス環境と通信しながらサービスを提供します。
利用者は複数のVNetを作成できますが、デフォルトではVNet同士は通信できません。必要に応じて適宜VPN接続やVNet ピアリングといった機能を利用してVNet間を接続します。
Azure ネットワークでのセキュアな通信を実現する手段としては、以下のようなサービスが利用できます。ここでは代表的なサービスを紹介しています。詳細は Azure のネットワーク機能に関する各種ドキュメントを参照してください。
Azure サービス名 | 提供機能の概要 |
---|---|
Network Security Group(NSG) | Azure リソースとの送受信トラフィックの許可・拒否を制御するネットワークフィルタサービス |
Azure Firewall | トラフィックフィルタや脅威インテリジェンスを提供するマネージドファイアウォールサービス |
Web Application Firewall(WAF) | SQL インジェクションや XSS などのセキュリティ脆弱性から Web アプリケーションを保護するサービス |
User Defined Route(UDR) | ルーティング経路をユーザーがカスタマイズするためのサービス |
Azure Load Balancer | 受信トラフィックをバックエンドリソースに振り分ける L4 負荷分散サービス |
Azure Bastion | VNet内の仮想マシンにセキュアな通信路で接続するための踏み台を提供するサービス |
AKS でも外部からクラスタリソースへの侵入、攻撃を防ぐために、Node が属する VNet にはデフォルト構成として NSG やロードバランサが配置されており、クラスタリソースへのアクセスを制限しています。
また、要件に応じて Firewall、UDR、WAFなどを追加構成することで、よりきめ細かな制御を実現できます。具体的な方策はこの後紹介します。