Defender CLIは、Microsoft DefenderのMDASHおよびその他のセキュリティスキャナー用のコマンドラインツールです。 マルチモデルのエージェントAIシステムを用いて、セキュリティおよびエンジニアリングチームがコードの脆弱性を検出し、修正するのを支援します。 Defender CLIを通じて、エージェントティックなコードスキャンを実行し、ローカルやCI/CDパイプライン内で修正を適用できます。 Defender CLIはWindows、macOS、Linux向けにスタンドアロン実行ファイルとして配布されています。
Prerequisites
- Defender CLIは2つの認証方法をサポートしています:CI/CDパイプラインやその他の非対話型自動化にはアプリベースの認証を、サインインユーザーによるローカル端末スキャンには対話型認証を用います。 必要なアクセス許可は、認証方法によって異なります。 詳細は、エージェントコードのセキュリティに関するDefender CLIセットアップを参照してください。
- テナント環境変数(例えば
DEFENDER_ASPM_TENANT_ID)を設定します。 必要な変数は使用する認証方法によって異なります。 詳細は、エージェントコードのセキュリティに関するDefender CLIセットアップを参照してください。 - スキャンするリポジトリのローカル クローン。
Defender CLI をインストール
プラットフォーム用の CLI バイナリをダウンロードします。
# Windows x64
Invoke-WebRequest `
-Uri "https://cli.dfd.security.azure.com/public/v2/latest/Defender_win-x64.exe" `
-OutFile "defender.exe"
スキャン
デフォルトではスキャンは非同期で実行されます。 つまり、スキャンを送信してもスキャナーは完了を待つことはありません。 すぐに終了し、 ジョブIDを返します。 ジョブIDは永続的な参照として機能し、その後スキャン結果アーティファクトのダウンロード、ジョブのキャンセル、ジョブ完了の待機、または現在の状態の照会に利用できます。
以下のコマンドでは、 <TARGET_SOURCE> のプレースホルダーをターゲットのソースコードディレクトリへのパスのいずれかに置き換えます。例えば my-code\project1。 コードのディレクトリ内でDefender CLIを実行している場合は、.を現在のディレクトリを参照してください。
# Step 1: Submit and get a job ID
./defender scan ai-scan submit <TARGET_SOURCE>
# Output: Job submitted: <JOB_ID>
# Step 2: Check job status
./defender status <JOB_ID>
# Step 3: (Optional) Wait for completion and download results
./defender status wait <JOB_ID> -o results.sarif
スキャン設定を使用してスキャン(プレビュー)
スキャン構成は、どのAIモデルがスキャンを実行するかを選択します。 2つの構成が利用できます:
| コンフィギュレーション | モデル | 次の場合に使用します。 |
|---|---|---|
Standard |
GPT-5.4、GPT-5.3-Codex、GPT-5.4-Mini | 汎用エージェントコードスキャン(標準構成)。 |
mai-cyber (プレビュー) |
GPT-5.4、GPT-5.3-Codex、GPT-5.4-Mini + MAI-Cyber-1-Flash | サイバー特化の MAI-Cyber-1-Flash モデルで拡張されたベースライン モデルが必要です。 |
利用可能な構成と現在のデフォルトを参照してください:
./defender scan profile model list
./defender scan profile model show-default
特定の設定で1回スキャンを実行してください(このスキャンのデフォルト設定のみを上書きします):
# Standard:
./defender scan ai-scan submit <TARGET_SOURCE> --model-profile standard
# May Cyber:
./defender scan ai-scan submit <TARGET_SOURCE> --model-profile mai-cyber
重大度で絞り込む
スキャンを提出する際は、返送される結果を重症度の高い場合や重大な所見に限定できます。 これにより、リスクが最も大きい問題に出力が絞られ、トリアージが迅速化され、チームが最も重要な箇所で修復の優先順位をつけることができます。
--severityフラグを使って閾値を設定し、low(デフォルト)、medium、high、criticalの許容値を設定します。
./defender scan ai-scan submit <TARGET_SOURCE> --severity high
ジョブを管理する
Defender CLIのstatusコマンドは、コードネームMDASHで追跡されるジョブへの迅速なアクセスを提供します。 現在追跡中のすべてのジョブを一覧表示したり、特定のジョブの詳細を閲覧したり、SARIFファイルをブロックしてダウンロードしたり、特定のランごとにSARIFを再ダウンロードしたり、その他多くの機能が可能です。
./defender status # List all tracked jobs
./defender status <JOB_ID> # Show details of a job
./defender status result <JOB_ID> # Download a finished report
./defender status log <JOB_ID> # Print the path of the auto-saved debug log for a run
結果をダウンロードしてください
スキャンはデフォルトで非同期で動作し、完了までに時間がかかります。 ジョブの状況を繰り返しチェックする代わりに、 wait コマンドはジョブ完了を待ち、結果をSARIFファイルにダウンロードします。 詳細は、 端末からのエージェントティックコードスキャン結果のレビューを参照してください。
次のコマンドはスキャン <JOB_ID> が終わるのを待ってから、結果を results.sarifに保存します。
./defender status wait <JOB_ID> -o results.sarif
結果を再ダウンロードしてください
ジョブが終端状態(完了 または 失敗)に達したら、以下のコマンドで結果をダウンロードします。 このコマンドは、ローカルのSARIFファイルをクリアした場合、元の wait コマンドが終了する前に中断された場合、あるマシンからジョブを送信したが別のマシンから結果を取り出したい場合に特に有用です。
<JOB_ID>を実際の職種IDに置き換えてください。
./defender status result <JOB_ID>
ジョブをキャンセル
スキャンをキャンセルしても、既に使用されているトークンは払い戻されません。 MDASH は、スキャン中に、作業の処理時にトークンを使用するライブ LLM 呼び出しを行います。 既に実行されているスキャンを取り消すと、MDASH は新しい作業のスケジュールを停止しますが、キャンセルが有効になるまでに使用されたトークンに対して課金されます。 スキャンをキャンセルすると、将来の作業から追加のトークン消費を防ぐことができますが、既に使用されているトークンは払い戻されません。
./defender status cancel <JOB_ID>
Troubleshooting
Defender CLIの問題をトラブルシューティングする際、管理者やサポートチームから自動保存ログの提供を求められることがあります。 特定の実行のログパスを見つけるには、スキャンが行われた同じマシンで以下のコマンドを使い、 <JOB_ID> をスキャンのジョブIDに置き換えます。
./defender status log <JOB_ID>
予期しないCLIの挙動をトラブルシューティングする際、一つの選択肢として、より高いログレベル(例えばdebug)でコマンドを再実行し、デフォルトの情報レベルよりも詳細な診断出力を表示します。 これにより原因を特定するのに役立ちます。 ただし、この方法はコマンドを再度実行して問題を再現できる場合にのみ機能します。 以下の例をあなたのシナリオに合わせて適応させるために:
-
<failing-command>のプレースホルダーを失敗しているコマンドに置き換えてください。 例えば:scan ai-scan submit . -
--log-level適切なレベルに設定してください。 期待値はtrace、debug、info(デフォルト)、warn、error。 - 必要に応じて、
--log-fileをファイル パスに設定します。 このフラグを使用すると、CLIはデバッグ出力をコンソール内だけでなく指定されたファイルに書き込みます。
./defender <failing-command> --log-level debug --log-file ./defender-debug.log
例えば、スキャンが失敗した場合はコマンドを再実行し、以下の通りに --log-level フラグをコマンドに追加します。
./defender scan ai-scan submit <TARGET_SOURCE> --log-level debug