Microsoft Defender for Servers(MDfS)は、Azure VMやAzure Arc接続サーバーを保護するためのDefender for Cloudの機能です。 通常、MDfSはサブスクリプション単位で有効化・無効化するイメージが強いですが、運用によっては「特定のサーバーのみ無効化したい」といったケースもあるかと思います。
その際は、REST APIを使用することで、特定のサーバー単位で有効化・無効化することができます。
Microsoft Defender for Servers をREST APIで制御し、サーバー単位で有効化・無効化する情報をまとめておきたいと思います。
本記事では、Microsoft公式の「Pricings – Update」REST APIを使用し、pricingName に VirtualMachines、scopeId に対象サーバーのリソースIDを指定して、サーバー単位でMDfSを有効化・無効化する方法を整理しています。
※ご注意:Microsoftのサービスや機能は頻繁に変更されることがありますので、その点をご了承ください。
また記載内容に万が一誤りがありましたら、ご指摘いただけますと幸いです。
使用するREST API
使用するAPIが記載されているWebサイトのURLは以下です。
https://learn.microsoft.com/ja-jp/rest/api/defenderforcloud/pricings/update?view=rest-defenderforcloud-2024-01-01&tabs=HTTPURLにアクセスすると [使ってみる] のボタンがあるので、それをクリックして接続します。
接続時にはMicrosoft 365のアカウントとパスワードが必要です。(設定変更できる上位の管理者権限が必要)
今回使用する主なパラメーターは以下です。
| 項目 | 指定値 | 説明 |
|---|---|---|
| pricingName | VirtualMachines | Microsoft Defender for Serversの価格構成名 |
| scopeId | 対象サーバーのリソースID | 個別に設定したいAzure VMなどのリソースID |
| api-version | 2024-01-01 | APIバージョン |
REST API「REST APIを使ってみる」の入力値
基本の入力値
pricingName:
VirtualMachinesscapeId: ※GUIのVM管理画面などからサーバーのscopeIDを入手しておく
"サーバー固有のscopeID"を入力api-version:
2024-01-01
このように指定することで、サブスクリプション全体ではなく、特定サーバー単位でMDfSの設定を上書きできます。
以下より有効化・無効化の値を記載。
サーバー単位でMDfSを無効化する
サブスクリプションを有効化すると、サブスクリプション配下のサーバーは自動適用されて自動的に有効化されます。(MDfS P1, MDfS P2のライセンスがそれぞれ適用されます。P2はP1の内容を包括しています)
本文の欄に以下の内容を指定します。
{
"properties": {
"pricingTier": "Free"
}
}「REST APIを使ってみる」のページの一番下に [ ファイル名を指定して実行 ] のボタンがあるので、それを押下すると設定が適用されます。
結果のステータスコードが200であれば正常に適用されます。
補足として、サーバーに対してサブスクリプションが適用されなくなっただけであって、すでにサーバーにデプロイされているMDfS関連のモジュールが削除されるわけではありません。
サーバー単位で有効化する
MDfS P2の有効化
基本的にMDfS P2のサブスクリプションを有効にすると自動的に有効化されるが、意図して ”pricingTier”: “Free” を設定した場合に、以下の内容を適用することにより、P2のサブスクリプションを再度適用することができます。
{
"properties": {
"pricingTier": "Standard",
"subPlan": "P2"
}
}MDfS P1の有効化
意図してMDfS P1を有効化したい場合は、以下の内容を本文に記載して設定を反映させます。
{
"properties": {
"pricingTier": "Standard",
"subPlan": "P1"
}
}補足として、Azure仮想マシンはサーバー個々のscopeIdを指定することによりサーバーごとに設定変更が可能だが、Azure仮想マシンスケールセット(VMSS)内の仮想マシンはscopeIdを指定しても設定は変更できません。
Azure仮想マシンスケールセット(VMSS)ごとの設定は可能となります。
現在の設定状態を確認する
Pricing – Get で現在のサーバーに適応されるサブスクリプション(MDfSプラン)を確認できます。
以下のURLのサイトにアクセスして、[使ってみる]をクリックしてREST API実行サイトに遷移する。
設定の有効化・無効化同様に、pricingName:、scapeId:、api-version: を入力する。
ページ最後の [ファイル名を指定して実行] をクリックすることにより現在の設定を確認することができます。

応答ステータス一覧
実行結果として応答ステータスが表示されます。
| 名前 | 型 | 説明 |
|---|---|---|
| 200 OK | Pricing | 正常に更新されました |
| 201 Created | Pricing | 正常に作成されました。 |
| Other Status Codes | CloudError | 操作が失敗した理由を説明するエラー応答。 |
注意点
注意点をざっと列挙しておきます。
• サブスクリプション側で強制(enforce)が有効だと上書きできない場合がある
→ 個別設定が効かず、意図通りに制御できないケースあり
• Azure Policyが適用されていると設定が上書きされる可能性がある
→ 「Deploy MDE」系ポリシーは特に要注意
• autoProvisioningSettings が ON の場合、拡張機能が再導入される可能性がある
→ OFFにしてもPolicyの影響は別で考える必要あり
• 設定変更後、即時反映されない場合がある
→ 数分〜数十分程度の遅延が発生することあり
• ポータル表示とREST API結果が一致しないことがある
→ キャッシュや評価タイミングの差による
• inherited プロパティの確認が重要
→ False であればリソース単位設定が有効
• Arcサーバーの場合は追加の要因(接続状態・エージェント)が影響する
→ Azure VMより挙動が複雑
• pricingTier を Free にしても既存エージェントは残る場合がある
→ 完全無効化には拡張機能の確認が必要
• API実行には適切なRBAC権限が必要
→ Security Admin / Owner など
• スクリプトや自動化処理がある場合、意図せず再設定される可能性がある
→ Logic Apps / Functions / CI/CD など
• 誤ったscopeId指定に注意
→ サブスクリプション単位にしてしまうと全体に影響

コメント