⛔
Defender CSPM を複数のサブスクリプション一括で OFF にする
はじめに
Defender for Cloud の新しい機能で、Defender CSPM という機能が一般提供開始しました。
こちら、一般提供開始に伴い、2023/5/1 から課金が始まるのですが、プレビュー期間に無償だったため有効にしている場合、自動では無効にならないため、課金をさせないためには自身で無効化する必要があります。大量にサブスクリプションがある場合、Azure ポータルからまとめて OFF にする方法がないため、PowerShellコマンド、API 操作、Azure ポリシーで一括で OFF にする方法を調べました。
PowerShell コマンド
これが一番シンプルです。サブスクリプション指定のところでループさせてください。
# ログイン
Connect-AzAccount
# サブスクリプション指定
$subscriptionId = "subscriptionId"
Set-AzContext -Subscription $subscriptionId
# 設定値確認
Get-AzSecurityPricing -Name "CloudPosture"
# 無効化
Set-AzSecurityPricing -Name "CloudPosture" -PricingTier "Free"
API
直接叩くのは手間なので、Azure PowerShell の Invoke-AzRestMethod を使います。こちらもサブスクリプション指定のところでループさせてください。
# ログイン
Connect-AzAccount
# サブスクリプション指定
$subscriptionId = "subscriptionId"
# 設定値確認
Invoke-AzRestMethod -Path "/subscriptions/$subscriptionId/providers/Microsoft.Security/pricings/CloudPosture?api-version=2023-01-01" -Method GET
# 無効化
$params = @'
{
"properties": {
"pricingTier": "Free"
}
}
'@
Invoke-AzRestMethod -Path "/subscriptions/$subscriptionId/providers/Microsoft.Security/pricings/CloudPosture?api-version=2023-01-01" -Method PUT -payload $params
Azure ポリシー
ビルドインポリシーで「Microsoft Defender CSPM を有効にするように構成する」というのが準備されていたので、これを無効化用に Standard のところを Free に変更したカスタムポリシーを作ります。
参考にしたビルドイン ポリシー
無効化するためのカスタムポリシー定義
{
"mode": "All",
"policyRule": {
"if": {
"field": "type",
"equals": "Microsoft.Resources/subscriptions"
},
"then": {
"effect": "[parameters('effect')]",
"details": {
"type": "Microsoft.Security/pricings",
"name": "CloudPosture",
"deploymentScope": "subscription",
"existenceScope": "subscription",
"roleDefinitionIds": [
"/providers/Microsoft.Authorization/roleDefinitions/fb1c8493-542b-48eb-b624-b4c8fea62acd"
],
"existenceCondition": {
"field": "Microsoft.Security/pricings/pricingTier",
"equals": "Free"
},
"deployment": {
"location": "japaneast",
"properties": {
"mode": "incremental",
"parameters": {},
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
{
"type": "Microsoft.Security/pricings",
"apiVersion": "2018-06-01",
"name": "CloudPosture",
"properties": {
"pricingTier": "Free"
}
}
],
"outputs": {}
}
}
}
}
}
},
"parameters": {
"effect": {
"type": "String",
"metadata": {
"displayName": "効果",
"description": "ポリシーの実行を有効または無効にします"
},
"allowedValues": [
"DeployIfNotExists",
"Disabled"
],
"defaultValue": "DeployIfNotExists"
}
}
}
こちらの定義を管理グループなどの定義の場所に指定し割り当てます。割り当てる際に修復タスクを作成すると、既存サブスクリプションに対して無効化の処理ができます。
Discussion