Defender for Containers のアーキテクチャ
Defender for Containers は、次のうちどれで実行されていても、Kubernetes 環境ごとに異なる方法で設計されています。
- Azure Kubernetes Service (AKS) - コンテナー化されたアプリケーションを開発、デプロイ、管理するための Microsoft のマネージド サービスです。
- 接続された Amazon Web Services (AWS) アカウントでの Amazon Elastic Kubernetes Service (EKS) - 独自で Kubernetes の制御プレーンやノードをインストール、運用、保守することなく、AWS 上で Kubernetes を稼働させるための Amazon のマネージド サービスです。
- 接続された Google Cloud Platform (GKE) プロジェクトの Google Kubernetes Engine (GKE) - GCP インフラストラクチャを使用してアプリケーションをデプロイ、管理、スケーリングするための Google の管理された環境。
- 管理されていない Kubernetes のディストリビューション (Azure Arc 対応の Kubernetes を使用) - Cloud Native Computing Foundation (CNCF) 認定の Kubernetes クラスターを、オンプレミスまたは IaaS 上でホストします。
Kubernetes コンテナーを保護するために、Defender for Containers は次の情報を受け取って分析します。
- API サーバーからの監査ログとセキュリティ イベント
- コントロール プレーンからのクラスター構成情報
- Azure Policy からのワークロード構成
- ノード レベルからのセキュリティ シグナルとイベント
各 Kubernetes 環境のアーキテクチャ
Defender for Cloud と AKS クラスターのアーキテクチャ図
Azure Kubernetes Service でホストされているクラスターを Defender for Cloud で保護すると、監査ログ データの収集はエージェントレスとなり、Azure インフラストラクチャによって自動的に収集されます。追加のコストは発生せず、構成に関する他の考慮事項も発生しません。 以下は、Microsoft Defender for Containers の保護機能をすべて利用するために必要なコンポーネントとなります。
Defender エージェント: 各ノードにデプロイされる DaemonSet は、*Extended Berkeley Packet Filter (eBPF) テクノロジ* を使用してホストからシグナルを収集し、ランタイム保護を提供します。 このエージェントは Log Analytics ワークスペースに登録され、データ パイプラインとして使用されます。 ただし、監査ログ データは Log Analytics ワークスペースに保存されません。 Defender エージェントは AKS セキュリティ プロファイルとしてデプロイされます。
- *eBPF の背景と情報*: Extended Berkeley Packet Filter (eBPF) は、ネットワーク パケットをプログラムで分析およびフィルター処理したり、他のさまざまなシステム レベルのタスクを実行したりするための、Linux カーネル内の強力で汎用性の高いフレームワークです。 eBPF は、1990 年代に導入された Berkeley Packet Filter (BPF) が基になっていて、カーネル内でユーザー定義プログラムを実行できるようにすることで機能を拡張し、カーネル自体に変更を加える必要のない動的で効率的なパケット処理を可能にします。
- eBPF プログラムは、制限のある C のサブセットで記述され、カーネルに読み込まれて、セキュリティで保護されたサンドボックス環境内で実行されます。 これにより、パケット フィルタリング、トラフィック監視、セキュリティ適用、さらにはカスタム プロトコル解析など、ネットワーク関連のさまざまなタスクをカーネル内で直接実行できます。
- eBPF の主な利点の 1 つは、その汎用性とパフォーマンスです。 eBPF プログラムはカーネル内で実行することで、ネットワーク パケットにアクセスして直接操作できるため、従来のユーザー空間パケット処理方法と比較して大幅にオーバーヘッドが削減されます。 さらに、eBPF プログラムを動的に読み込み、カーネル内のさまざまなフックに接続できるため、リアルタイムの応答性と変化するネットワーク条件への適応性が実現可能になります。
- eBPF は、その柔軟性と効率性によって、最新のネットワークおよびセキュリティ アプリケーションの間でますます普及しています。 これは、ネットワーク監視、侵入検出、トラフィック分析、パフォーマンス チューニングのためのツールとフレームワークで広く使用されています。 さらに、その機能はネットワークを超えてシステムの可観測性と制御の他の領域にまで及び、幅広い Linux ベースのアプリケーションとサービスの基本的な構成要素となります。
Kubernetes 用の Azure Policy: オープンソース Gatekeeper v3 を拡張し、Webhook として Kubernetes アドミッション コントロールに登録するポッドにより、クラスターに対して大規模な適用と保護を一元的かつ一貫した方法で適用できます。 Kubernetes ポッド用の Azure Policy は、AKS アドオンとしてデプロイされます。 クラスター内の 1 つのノードにのみインストールされます。
Defender エージェント コンポーネントの詳細
ポッド名 | 名前空間 | Kind | 簡単な説明 | Capabilities | リソース制限 | エグレスが必要 |
---|---|---|---|---|---|---|
microsoft-defender-collector-ds-* | kube-system | DaemonSet | Kubernetes 環境からインベントリ イベントとセキュリティ イベントを収集することに重点を置いたコンテナー セットです。 | SYS_ADMIN、 SYS_RESOURCE、 SYS_PTRACE |
メモリ: 296Mi CPU: 360m |
No |
microsoft-defender-collector-misc-* | kube-system | 展開 | 特定のノードにバインドされていない Kubernetes 環境からインベントリ イベントとセキュリティ イベントを収集することに重点を置いたコンテナー セットです。 | 該当なし | メモリ: 64Mi CPU: 60m |
No |
microsoft-defender-publisher-ds-* | kube-system | DaemonSet | 収集したデータを Microsoft Defender for Containers のバックエンド サービスに公開して、データの処理と分析を行います。 | 該当なし | メモリ: 200 Mi CPU: 60m |
Https 443 |
Azure での Kubernetes のエージェントレス検出のしくみ
検出プロセスは、間隔をおいて取得したスナップショットに基づいています。
Kubernetes 拡張機能のエージェントレス検出を有効にすると、次のプロセスが発生します。
作成:
- 拡張機能が Defender CSPM から有効になっている場合、Defender for Cloud では CloudPosture/securityOperator/DefenderCSPMSecurityOperator という顧客環境で ID が作成されます。
- 拡張機能が Defender for Containers から有効になっている場合、Defender for Cloud では CloudPosture/securityOperator/DefenderForContainersSecurityOperator という顧客環境で ID が作成されます。
- 割り当て: Defender for Cloud では、Kubernetes エージェントレス オペレーターという組み込みロールが、サブスクリプション スコープでその ID に割り当てられます。 このロールには、次のアクセス許可が含まれています。
- AKS 読み取り (
Microsoft.ContainerService/managedClusters/read
) - 次のアクセス許可を持つ AKS の信頼されたアクセス。
Microsoft.ContainerService/managedClusters/trustedAccessRoleBindings/write
Microsoft.ContainerService/managedClusters/trustedAccessRoleBindings/read
Microsoft.ContainerService/managedClusters/trustedAccessRoleBindings/delete
- 拡張機能が Defender CSPM から有効になっている場合、Defender for Cloud では CloudPosture/securityOperator/DefenderCSPMSecurityOperator という顧客環境で ID が作成されます。
検出: システム割り当て ID を使用して、Defender for Cloud では AKS の API サーバーへの API 呼び出しにより、環境内の AKS クラスターの検出が実行されます。
バインド: AKS クラスターが検出されると、Defender for Cloud は、作成された ID と Kubernetes ClusterRole aks:trustedaccessrole:defender-containers:microsoft-defender-operator の間に ClusterRoleBinding を作成することで、AKS バインド操作を実行します。 この ClusterRole は API を使用して表示することができ、Defender for Cloud データ プレーンにクラスター内での読み取りアクセス許可を付与します。
信頼されたアクセス (プレビュー) を使って Azure Kubernetes Service の Azure リソースに対するセキュリティで保護されたアクセスを取得する
Azure Kubernetes Service (AKS) と統合される多くの Azure サービスでは、Kubernetes API サーバーにアクセスする必要があります。 ネットワーク アクセスのためにこれらのサービスに管理者アクセス権を付与することや AKS クラスターをパブリックにすることを回避するために、AKS の信頼されたアクセス機能を使用できます。
この機能により、プライベート エンドポイントを必要とせずに、Azure バックエンドを使用して、AKS および Kubernetes への安全なアクセスがサービスに提供されます。 この機能では、Microsoft Entra アクセス許可を持つ ID に依存するのではなく、自分のシステム割り当てマネージド ID を使って、AKS クラスターで使う管理サービスとアプリケーションの認証を受けることができます。
重要
AKS のプレビュー機能は、セルフサービスのオプトイン単位で利用できます。 プレビューは、"現状有姿" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。
Note
信頼されたアクセス API は一般提供されています。 Azure CLI には一般提供 (GA) サポートを提供していますが、まだプレビュー段階であり、aks-preview 拡張機能を使う必要があります。
信頼されたアクセス機能の概要
信頼されたアクセスは、次のシナリオに対応します。
- 認可された IP 範囲が設定されている場合、またはプライベート クラスター内にある場合、プライベート エンドポイント アクセス モデルを実装しない限り、Azure サービスは Kubernetes API サーバーにアクセスできない可能性があります。
- Azure サービス管理者に Kubernetes API へのアクセス権を付与することは、最低特権アクセスのベスト プラクティスに従っていないため、特権のエスカレーションや資格情報漏えいのリスクにつながる恐れがあります。 たとえば、高い特権を持つサービス間アクセス許可を実装する必要があるとしても、監査レビュー中には理想的ではありません。
信頼されたアクセスを使うと、"ロール バインディング" という Azure リソースを使って、AKS クラスターへのアクセスを許可されているリソースのシステム割り当てマネージド ID に明示的に同意することができます。 お使いの Azure リソースは、システム割り当てマネージド ID 認証を使って、AKS リージョン ゲートウェイ経由で AKS クラスターにアクセスします。 適切な Kubernetes アクセス許可は、"ロール" という Azure リソースを介して割り当てられます。 信頼されたアクセスを使うと、プライベート クラスター、ローカル アカウントがオフになっているクラスター、Microsoft Entra クラスター、認可された IP 範囲クラスターなどのさまざまな構成の AKS クラスターにアクセスできます。
前提条件
アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
システム割り当てマネージド ID をサポートするリソースの種類。
- Azure CLI を使用している場合は、aks-preview 拡張機能バージョン 0.5.74 以降が必要です。
さまざまなシナリオでどのロールを使用するかについて学習するには、次の記事を参照してください。
- Azure Machine Learning から特殊な構成の AKS クラスターへのアクセス
- Azure Kubernetes Service バックアップとは
- Agentless Container Posture を有効にする
Defender for Cloud と Arc 対応 Kubernetes クラスターのアーキテクチャ図
これらのコンポーネントは、Microsoft Defender for Containers によって提供される完全な保護を受けるために必要です。
- Azure Arc 対応 Kubernetes - Azure Arc 対応 Kubernetes - クラスター内の 1 つのノードにインストールされ、クラスターを Defender for Cloud に接続するエージェント ベースのソリューション。 その後、Defender for Cloud は、次の 2 つのエージェントを Arc 拡張機能 としてデプロイできます:
- Defender エージェント: 各ノードにデプロイされる DaemonSet は、eBPF テクノロジと Kubernetes 監査ログを使用してホストの信号を収集し、ランタイム保護を提供します。 このエージェントは Log Analytics ワークスペースに登録され、データ パイプラインとして使用されます。 ただし、監査ログ データは Log Analytics ワークスペースに保存されません。 Defender エージェントは、Arc 対応 Kubernetes 拡張機能としてデプロイされます。
- Kubernetes 用の Azure Policy: オープンソースの Gatekeeper v3 を拡張し、Kubernetes 管理制御への Webhook として登録するポッドにより、大規模な実施内容と安全対策を、一元的で一貫性のある方法でクラスターに適用できるようになります。 Kubernetes ポッド用の Azure Policy は、Arc 対応 Kubernetes 拡張機能としてデプロイされます。 クラスター内の 1 つのノードにのみインストールされます。 詳細については、「Kubernetes ワークロードを保護する」および「Kubernetes 用の Azure Policy について理解する」を参照してください。
Defender for Cloud と EKS クラスターのアーキテクチャ図
Elastic Kubernetes Service 内でホストされているクラスターを Defender for Cloud で保護するとき、監査ログ データの収集はエージェントレスになります。 以下は、Microsoft Defender for Containers の保護機能をすべて利用するために必要なコンポーネントとなります。
- Kubernetes 監査ログ: AWS アカウントの CloudWatch では、エージェントレス コレクターを使用して監査ログ データを有効にして収集し、詳細な分析のために、収集した情報を Microsoft Defender for Cloud バックエンドに送信します。
- Azure Arc 対応 Kubernetes - Azure Arc 対応 Kubernetes - クラスター内の 1 つのノードにインストールされ、クラスターを Defender for Cloud に接続するエージェント ベースのソリューション。 その後、Defender for Cloud は、次の 2 つのエージェントを Arc 拡張機能 としてデプロイできます:
- Defender エージェント: 各ノードにデプロイされ、eBPF テクノロジを使用してホストからのシグナルを収集し、実行時の保護を提供する DaemonSet。 このエージェントは Log Analytics ワークスペースに登録され、データ パイプラインとして使用されます。 ただし、監査ログ データは Log Analytics ワークスペースに保存されません。 Defender エージェントは、Arc 対応 Kubernetes 拡張機能としてデプロイされます。
- Kubernetes 用の Azure Policy: オープンソースの Gatekeeper v3 を拡張し、Kubernetes 管理制御への Webhook として登録するポッドにより、大規模な実施内容と安全対策を、一元的で一貫性のある方法でクラスターに適用できるようになります。 Kubernetes ポッド用の Azure Policy は、Arc 対応 Kubernetes 拡張機能としてデプロイされます。 クラスター内の 1 つのノードにのみインストールされます。
AWS での Kubernetes のエージェントレス検出のしくみ
検出プロセスは、間隔をおいて取得したスナップショットに基づいています。
Kubernetes のエージェントレス検出拡張機能を有効にすると、次のプロセスが発生します。
作成:
- Defender for Cloud ロール MDCContainersAgentlessDiscoveryK8sRole を EKS クラスターの aws-auth ConfigMap に追加する必要があります。 名前はカスタマイズできます。
- Defender for Cloud ロール MDCContainersAgentlessDiscoveryK8sRole を EKS クラスターの aws-auth ConfigMap に追加する必要があります。 名前はカスタマイズできます。
割り当て: Defender for Cloud では、MDCContainersAgentlessDiscoveryK8sRole ロールに次のアクセス許可が割り当てられます。
- eks:UpdateClusterConfig
- eks:DescribeCluster
- eks:UpdateClusterConfig
検出: システム割り当て ID を使用して、Defender for Cloud では EKS の API サーバーへの API 呼び出しにより、環境内の EKS クラスターの検出が実行されます。
Defender for Cloud と GKE クラスターのアーキテクチャ図
Google Kubernetes Engine 内でホストされているクラスターを Defender for Cloud で保護するとき、監査ログ データの収集はエージェントレスになります。 以下は、Microsoft Defender for Containers の保護機能をすべて利用するために必要なコンポーネントとなります。
- Kubernetes 監査ログ – GCP Cloud Logging では、エージェントレス コレクターを使用して監査ログ データを有効にして収集し、詳細な分析のために、収集した情報を Microsoft Defender for Cloud バックエンドに送信します。
- Azure Arc 対応 Kubernetes - Azure Arc 対応 Kubernetes - クラスター内の 1 つのノードにインストールされ、クラスターを Defender for Cloud に接続するエージェント ベースのソリューション。 その後、Defender for Cloud は、次の 2 つのエージェントを Arc 拡張機能 としてデプロイできます:
- Defender エージェント: 各ノードにデプロイされ、eBPF テクノロジを使用してホストからのシグナルを収集し、実行時の保護を提供する DaemonSet。 このエージェントは Log Analytics ワークスペースに登録され、データ パイプラインとして使用されます。 ただし、監査ログ データは Log Analytics ワークスペースに保存されません。 Defender エージェントは、Arc 対応 Kubernetes 拡張機能としてデプロイされます。
- Kubernetes 用の Azure Policy: オープンソースの Gatekeeper v3 を拡張し、Kubernetes 管理制御への Webhook として登録するポッドにより、大規模な実施内容と安全対策を、一元的で一貫性のある方法でクラスターに適用できるようになります。 Kubernetes ポッド用の Azure Policy は、Arc 対応 Kubernetes 拡張機能としてデプロイされます。 クラスター内の 1 つのノードにのみインストールされる必要があります。
GCP での Kubernetes のエージェントレス検出のしくみ
検出プロセスは、間隔をおいて取得したスナップショットに基づいています。
Kubernetes のエージェントレス検出拡張機能を有効にすると、次のプロセスが発生します。
作成:
- サービス アカウント mdc-containers-k8s-operator が作成されます。 名前はカスタマイズできます。
割り当て: Defender for Cloud では、サービス アカウント mdc-containers-k8s-operator に次のロールがアタッチされます。
- container.clusters.update アクセス許可を持つカスタム ロール MDCGkeClusterWriteRole
- 組み込みのロール container.viewer
検出: システム割り当て ID を使用して、Defender for Cloud では GKE の API サーバーへの API 呼び出しにより、環境内の GKE クラスターの検出が実行されます。