Zenn
📦

Defender for Containers の各機能を検証

2025/03/21に公開

はじめに

Defender for Cloud のコンテナー向けの機能で Defender for Containers が提供されています。シンプルな脅威検出だけではなく多数の機能を有しており、ドキュメントだけでは理解が難しい箇所もあるため、動作検証と併せて機能を整理していきます。

機能一覧

今回は最もベーシックな Azure Kubernetes Service (AKS) + Azure Container Registry (ACR) を対象として整理します。機能一覧はこちらのサポート マトリクスに記載されています。
https://learn.microsoft.com/ja-jp/azure/defender-for-cloud/support-matrix-defender-for-containers#azure

2025年 3 月時点で Defender for Containers の機能は以下の通りです。

セキュリティ態勢管理

機能 詳細 備考
Kubernetes のエージェントレス検出 (AKS) Kubernetes のクラスター、構成、デプロイを API ベースで検出 -
包括的なインベントリ機能 (AKS/ACR) セキュリティ エクスプローラーにてリソース、ポッド、サービス、リポジトリ、イメージ、および構成を監視および管理 -
強化されたリスク ハンティング (AKS/ACR) セキュリティ エクスプローラーのクエリとセキュリティ分析情報を使用して問題を検出 -
コントロール プレーンのセキュリティ強化 (AKS/ACR) クラスターを継続的に評価し、コントロール プレーンの構成ミスを推奨事項として検出 無償 CSPM で利用可能
Kubernetes データ プレーンのセキュリティ強化 Kubernetes クラスターにポリシーを適用し、データ プレーンの構成状況をチェック 無償 CSPM で利用可能だが、自動デプロイ機能が使用できないため、個別に Azure Policy アドオンのデプロイが必要
CIS Azure Kubernetes Service CIS Azure Kubernetes Service ベンチマークを適用し、準拠状況のチェックが可能 -

脆弱性評価

機能 詳細 備考
エージェントレス レジストリ 脆弱性スキャン (ACR) レジストリの推奨事項、新しいイメージのクイック スキャン、毎日の再スキャンなどコンテナー イメージの脆弱性評価を提供 -
エージェントレス/エージェント ベースのランタイム 脆弱性スキャン (AKS) 実行中コンテナーの推奨事項、新しいイメージのクイック スキャン、毎日の再スキャンなどクラスター ノードの脆弱性評価 エージェント ベースの場合は Defender センサーのデプロイが必要
エージェントレス Kubernetes ノード スキャン (AKS) ノードの VMSS に対してエージェントレス スキャンを実施し脆弱性評価を提供 -

ランタイム脅威防止

機能 詳細 備考
コントロール プレーンの疑わしいアクティビティの検出 Kubernetes API サーバーのアクティビティを監視し、コントロール プレーン内の潜在的な脅威を識別 -
クラスター / ノード / ワークロード レベルでの疑わしいアクティビティの検出 Defender センサーを使用して Kubernetes ワークロード ランタイム アクティビティを監視し疑わしい操作を検出 Defender センサーのデプロイが必要
Kubernetes ノードでのマルウェアの検出 ノードの VMSS に対してエージェントレス スキャンを実施しマルウェアを検出 -
バイナリ ドリフト検出 元のイメージに含まれていないバイナリから起動されたプロセスを疑わしいアクティビティとして検出 -

Defender for Containers の有効化

[環境設定] > サブスクリプションを選択します。


Defender プランにてコンテナーを ON に切り替えて保存します。


言語を英語表示に切り替え、コンテナーの欄の [Settings] をクリックします。
※ 現在、日本語表示の場合にセンサーがデプロイされない不具合があるため


すべて ON にして [Continue] > Defender plans の画面で [Save] をクリックします。


日本語表示に戻し、Azure Policy から [割り当て] をクリックします。


Defender for Containers でフィルターし、英語名の割り当てになっていることを確認します。(ここが日本語の場合に Defender センサーがデプロイされない不具合がある)


使用する Log Analytics ワークスペースをデフォルトから変更する場合は、[Defender for Containers provisioning ...] の Policy を開き、[Edit assisgnment] をクリックします。


Parameters のタブで [LogAnalyticsWorkspaceResourceId] を指定し保存します。


AKS の [ワークロード] > [ポッド] で以下のコンポーネントがデプロイされていることを確認します。

  • microsoft-defender-collector-ds-*
  • microsoft-defender-collector-misc-*
  • microsoft-defender-publisher-ds-*
  • azure-policy-*
  • azure-policy-webhook-*

なお、プレビューですが AKS クラスター単位で有効化することも可能です。

参考リンク

https://learn.microsoft.com/ja-jp/azure/defender-for-cloud/monitoring-components#defender-for-containers-extensions

https://learn.microsoft.com/ja-jp/azure/defender-for-cloud/defender-for-containers-enable?tabs=aks-deploy-portal%2Ck8s-deploy-asc%2Ck8s-verify-asc%2Ck8s-remove-arc%2Caks-removeprofile-api&pivots=defender-for-container-aks#set-a-default-log-analytics-workspace-for-aks

https://learn.microsoft.com/ja-jp/azure/defender-for-cloud/defender-for-containers-architecture?tabs=defender-for-container-arch-aks#defender-sensor-component-details

検証環境の準備

各種セキュリティ機能を検証するため、ACR にコンテナー イメージを格納します。
以下のように docker を使用して旧バージョンの ubuntu と nginx を格納します。なお、操作端末で Docker クライアント (Docker Desktop) を起動している必要があります。

# ログイン
az login
az acr login --name acrcusdemo01

# Docker イメージの取得
docker pull ubuntu:18.04
docker pull nginx:1.14

# Docker イメージのタグ付け
docker tag ubuntu:18.04 acrcusdemo01.azurecr.io/ubuntu:18.04
docker tag nginx:1.14 acrcusdemo01.azurecr.io/nginx:1.14

# Docker イメージのプッシュ
docker push acrcusdemo01.azurecr.io/ubuntu:18.04
docker push acrcusdemo01.azurecr.io/nginx:1.14

以下のように格納されたことを確認します。


なお、以下のように Docker Hub から直接インポートすることも可能です。

az acr import --name acrcusdemo01 --source docker.io/library/nginx:1.15 --image nginx:1.15

次に以下を参考に AKS と ACR を接続しコンテナーをデプロイします。
https://learn.microsoft.com/ja-jp/azure/aks/cluster-container-registry-integration?tabs=azure-cli#configure-acr-integration-for-an-existing-aks-cluster

以下コマンドで AKS クラスターに ACR をアタッチします。

az aks update --name aks-cus-demo01 --resource-group rg-aks --attach-acr acrcusdemo01

以下のデプロイ用 yaml ファイルを準備します。

acr-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx0-deployment
  labels:
    app: nginx0-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx0
  template:
    metadata:
      labels:
        app: nginx0
    spec:
      containers:
      - name: nginx
        image: acrcusdemo01.azurecr.io/nginx:1.15
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: nginx0

AKS にデプロイします。

# AKS 資格情報を取得
az aks get-credentials --resource-group rg-aks --name aks-cus-demo01

# AKS にデプロイ
kubectl apply -f acr-nginx.yaml

# デプロイ結果を確認
kubectl get pods

# 外部 IP を確認
kubectl get services nginx-service

上記で確認した EXTERNAL-IP にブラウザで HTTP アクセスし nginx が表示されることを確認します。

セキュリティ態勢管理

セキュリティ エクスプローラーによる分析

セキュリティ エクスプローラーから AKS と ACR や格納されているコンテナー、イメージが確認可能です。



一からクエリを作成するのは少し難しいため、以下のようにテンプレートを活用できるようになっています。

https://learn.microsoft.com/ja-jp/azure/defender-for-cloud/cloud-security-explorer-kubernetes-clusters

コントロール プレーンのセキュリティ強化

AKS や ACR のリソース自体のパラメータチェックになっており、例えば以下のようなパブリック ネットワークの無効化などがチェック可能です。

コントロール プレーンの推奨事項は以下のリンクにおける [型: コントロール プレーン] となっている項目です。
https://learn.microsoft.com/ja-jp/azure/defender-for-cloud/recommendations-reference-container

データ プレーンのセキュリティ強化

データ プレーンのセキュリティ強化は Kubernetes における各種パラメータや構成チェックが可能です。この機能を利用する場合は Azure Policy for Kubernetes (Azure Policy アドオン) のデプロイが必要です。データ プレーンのセキュリティ強化の機能自体は無償 CSPM の範囲で利用可能ですが、Azure Policy アドオンの自動デプロイは Defender for Containers の機能であるため、無償 CSPM で利用する場合は以下のドキュメントを参考に手動でデプロイする必要があります。
https://learn.microsoft.com/ja-jp/azure/defender-for-cloud/kubernetes-workload-protections#deploy-azure-policy-for-kubernetes-on-existing-clusters
https://learn.microsoft.com/ja-jp/azure/governance/policy/concepts/policy-for-kubernetes#install-azure-policy-add-on-for-aks

Azure Policy アドオンのデプロイ後、以下コマンドでポリシーが適用されていることを確認できます。

kubectl get constrainttemplates


https://learn.microsoft.com/ja-jp/azure/aks/use-azure-policy#validate-an-azure-policy-is-running

利用できる推奨事項は 2025 年 3 月時点で以下になっています。このうち、[構成が必要] が [はい] になっている箇所はパラメータが指定可能です。(指定しなければ既定値で動作します)

パラメータを編集する場合は Defender for Cloud の画面で [環境設定] > サブスクリプションを選択 > [セキュリティ ポリシー] > [Microsoft Cloud Security Benchmark] を選択します。


推奨事項名で検索し、[効果とパラメータの管理] をクリックします。


以下の画面で説明を確認し、パラメータを指定して保存します。


データ プレーンの推奨事項は以下のように表示されます。

なおデータ プレーンの推奨事項を動作確認したい場合は、以下を参考に [正常なデプロイのサンプル.yaml ファイル] と [異常なデプロイのサンプル.yaml ファイル] をデプロイすることで確認できます。
https://learn.microsoft.com/ja-jp/azure/defender-for-cloud/kubernetes-workload-protections#healthy-deployment-example-yaml-file

その他、以下のドキュメントにある組み込みポリシーを適用して監査することもできます。
https://learn.microsoft.com/ja-jp/azure/aks/policy-reference

CIS Azure Kubernetes Service

こちらは規制コンプライアンスの 1 つとして、AKS 向けの CIS ベンチマークが利用できます。
[環境設定] > サブスクリプションを選択 > [セキュリティ ポリシー] から [CIS Azure Kubernetes Service] を有効にします。


チェック結果は [規制コンプライアンス] から確認可能です。



脆弱性評価

脆弱性評価結果の詳細は以下の各推奨事項から確認することができます。

AKS で実行中のコンテナーの脆弱性

推奨事項名:
Azure で実行中のコンテナー イメージの脆弱性は解決されている必要があります


推奨事項名:
[プレビュー] Azure で実行中のコンテナー イメージの脆弱性は解決されている必要がある
プレビュー版の場合はポッド/イメージ単位で出力します。

ACR で管理しているコンテナー イメージの脆弱性

推奨事項名:
Azure レジストリ コンテナー イメージの脆弱性は解決されている必要があります

推奨事項名:
[プレビュー] Azure レジストリ内のコンテナー イメージでは脆弱性の検出結果が解決されている必要がある
プレビュー版の場合はポッド/イメージ単位で出力します。

Kubernetes を実行しているノード (VMSS) の脆弱性

推奨事項名:
AKS ノードでは脆弱性の検出結果が解決されている必要がある


なお、リソース側の Defender for Cloud のメニューから確認することもできます。

ランタイム脅威防止

Defender for Containers で検出できるコントロール プレーン/ワークロード ランタイムのアラートは以下に解説があります。
https://learn.microsoft.com/ja-jp/azure/defender-for-cloud/alerts-containers

コントロール プレーンの検出

Kubernetes では、コントロール プレーンはクラスター内のすべてのリソースを管理および調整します。 Defender for Containers は、Kubernetes API サーバーのアクティビティを監視することで、クラスター全体のセキュリティと整合性を損なう可能性があるコントロール プレーン内の潜在的な脅威を識別します。 サービス アカウントによる疑わしい操作やサービスの公開など、潜在的なセキュリティ上の脅威を示す重大なイベントがキャプチャされます。

ワークロード ランタイムの検出

Defender for Containers によってキャプチャされる疑わしい操作の例を次に示します。Defender for Containers では、 Defender センサー を使用して Kubernetes ワークロード ランタイム アクティビティを監視し、ワークロード プロセス作成イベントなどの疑わしい操作を検出します。

上記の検証のため、ドキュメントにある Kubernetes アラート シミュレーション ツールを使用します。前提条件を確認し準備します。
https://learn.microsoft.com/ja-jp/azure/defender-for-cloud/alerts-containers#kubernetes-alerts-simulation-tool

事前準備完了後、以下のコマンドを実行します。

# 認証情報を取得
az aks get-credentials --name [cluster-name] --resource-group [resource-group]

# シミュレーション ツールをダウンロード
curl -O https://raw.githubusercontent.com/microsoft/Defender-for-Cloud-Attack-Simulation/refs/heads/main/simulation.py

# シミュレーション スクリプトの実行
python simulation.py

上記を実行すると、1-6. のシナリオが選択可能になっています。今回はすべて実行する [6] を選択します。

以下のように表示されればシミュレーション ツールの実行が成功しています。

Defender for Cloud の [セキュリティ警告] 画面で以下のようにコントロール プレーンやワークロード ランタイムのアラートが確認できます。


Kubernetes ノードでのマルウェアの検出

Kubernetes ノードである VMSS にマルウェアが混入した場合にエージェントレス スキャンで検出することが可能です。こちらの動作確認のため、以下のドキュメントの手順でノードに接続し、eicar ファイルを配置します。
https://learn.microsoft.com/ja-jp/azure/aks/node-access#access-nodes-using-the-kubernetes-api

# ノードの一覧表示
kubectl get nodes -o wide

# ノードで特権コンテナーを起動し接続
kubectl debug node/aks-agentpool-xxxxxxxx-vmss000001 -it --image=mcr.microsoft.com/cbl-mariner/busybox:2.0

# ノードに接続
chroot /host

# eicar ファイルを格納
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > eicar.com

# ホスト接続のセッションを終了
exit

# 特権コンテナーのセッションを終了
exit

# ポッドの一覧表示
kubectl get pods -o wide | Select-String "node-debugger"

# 特権コンテナー削除
kubectl delete pod node-debugger-aks-agentpool-xxxxxxxx-vmss000001-xxxxx

エージェントレス スキャンは 24 時間ごとのため、タイミングによっては検出するまでに時間がかかります。検出すると [セキュリティ警告] 画面で以下のようにアラートが確認できます。

バイナリ ドリフト検出

バイナリ ドリフト検出については別記事で解説していますので以下をご確認ください。
https://zenn.dev/microsoft/articles/08ff259ac2ae98

まとめ

Defender for Containers は Azure Kubernetes Service (AKS) と Azure Container Registry (ACR) をはじめとしたコンテナー サービスに対しセキュリティ態勢管理、脆弱性評価、ランタイム脅威防止など多岐にわたる機能を提供しています。
本記事では、Defender for Containers の主要機能とその有効化手順、検証方法について整理しました。Defender for Containers の理解を深める一助になれば幸いです。
なお、Defender for Cloud の各機能は頻繁にアップデートされるため、公式ドキュメントや参考リンクを参照し、最新の情報を確認することをお勧めします。

Microsoft (有志)

Discussion

ログインするとコメントできます