はじめに
Microsoft Defender for Cloud には、推奨事項やアラートなどの検出結果を Log Analytics や EventHub に送信する連続エクスポートという機能があります。
Microsoft Defender for Cloud データを継続的にエクスポートする
ポータルから簡単に設定できるのですが、ポータルからではエクスポート先を Log Analytics と Event Hub それぞれ1つしか設定できません。
「複数設定できないのか?」とドキュメントを読んだ結果、API であれば複数の連続エクスポートを設定できそうなので試してみました。
より大きなボリューム - API を使用して 1 つのサブスクリプションに複数のエクスポート構成を作成できます。 Azure portal の [連続エクスポート] ページでは、サブスクリプションごとに 1 つのエクスポート構成のみがサポートされます。
設定
/subscriptions/YOUR-SUB-ID/resourceGroups/YOUR-RG-NAME/providers/Microsoft.Security/automations/NAME?api-version=2019-01-01-preview に対して連続エクスポートの設定を記載した JSON を PUT します。JSON のサンプルは次の通りです。
$subID = "YOUR-SUBSCRIPTION-ID"
$rgName = "YOUR-RESOURCEGROUP-NAME"
$automationName = "YOUR-AUTOMATION-NAME"
$laId = "YOUR-LOGANALYTICS-ID"
$guid = "195a64a1-5869-4b41-96ba-4b45d62914b3"
$body = @{
location = "japaneast"
etag = $guid
tags = @{}
properties = @{
description = "1014test01"
isEnabled = $true
scopes = @(
@{
scopePath = "/subscriptions/$subID"
description = "scope for /subscriptions/$subID"
}
)
sources = @(
@{
EventSource = "Assessments"
RuleSets = @(
@{
Rules = @(
@{
PropertyJPath = "type"
PropertyType = "String"
ExpectedValue = "Microsoft.Security/assessments"
operator = "Contains"
}
)
}
)
}
@{
EventSource = "AssessmentsSnapshot"
RuleSets = @(
@{
Rules = @(
@{
PropertyJPath = "type"
PropertyType = "String"
ExpectedValue = "Microsoft.Security/assessments"
operator = "Contains"
}
)
}
)
}
@{
EventSource = "SubAssessments"
RuleSets = $null
}
@{
EventSource = "SubAssessmentsSnapshot"
RuleSets = $null
}
@{
EventSource = "Alerts"
RuleSets = @(
@{
Rules = @(
@{
PropertyJPath = "Severity"
PropertyType = "String"
ExpectedValue = "low"
operator = "Equals"
}
@{
PropertyJPath = "Severity"
PropertyType = "String"
ExpectedValue = "medium"
operator = "Equals"
}
@{
PropertyJPath = "Severity"
PropertyType = "String"
ExpectedValue = "informational"
operator = "Equals"
}
@{
PropertyJPath = "Severity"
PropertyType = "String"
ExpectedValue = "high"
operator = "Equals"
}
)
}
)
}
@{
EventSource = "SecureScores"
RuleSets = $null
}
@{
EventSource = "SecureScoresSnapshot"
RuleSets = $null
}
@{
EventSource = "SecureScoreControls"
RuleSets = $null
}
@{
EventSource = "SecureScoreControlsSnapshot"
RuleSets = $null
}
@{
EventSource = "RegulatoryComplianceAssessment"
RuleSets = $null
}
@{
EventSource = "RegulatoryComplianceAssessmentSnapshot"
RuleSets = $null
}
)
actions = @(
@{
workspaceResourceId = $laId
actionType = "Workspace"
}
)
}
} | ConvertTo-Json -Depth 100
Invoke-azrest -Path "/subscriptions/$subID/resourceGroups/$rgName/providers/Microsoft.Security/automations/$automationName`?api-version=2019-01-01-preview" -Method PUT -Payload $body
動作確認
PowerShell を利用して、ポータルで連続エクスポートを設定済みの Microsoft Defender for Cloud に対して、エクスポートする内容は同じだが出力先だけ違う設定を追加してみました。PowerShell を利用して、設定されてる連続エクスポートを確認できます。
> Get-AzSecurityAutomation | Select-Object Name, Actions | fl
Name : ExportToWorkspace
Actions : {/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-b1e2097edd51/resourcegroups/test/providers/microsoft.operationalinsights/workspaces/aaaa}
Name : export1
Actions : {/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-b1e2097edd51/resourceGroups/test0803/providers/Microsoft.OperationalInsights/workspaces/bbbb}
複数の連続エクスポートを設定してもポータルから確認できるのは1つだけです。確認画面が変わることはありません。要注意。
それぞれの Log Analytics で連続エクスポートされるテーブルを検索してみると、同じ量の検査結果が書き込まれていることがわかります。
$queryA = @"
SecurityRecommendation
| where TimeGenerated > ago(12h)
| sort by TimeGenerated desc
| count
"@
$resA = Invoke-AzOperationalInsightsQuery `
-WorkspaceId "xxxxxxxx-xxxx-xxxx-xxxx-784b931577df" `
-Query $queryA
$queryB = @"
SecurityRecommendation
| where TimeGenerated > ago(12h)
| sort by TimeGenerated desc
| count
"@
$resB = Invoke-AzOperationalInsightsQuery `
-WorkspaceId "xxxxxxxx-xxxx-xxxx-xxxx-29101610be96" `
-Query $queryB
# ポータルで設定した Logic Analytics の検索結果
$resA.Results | ConvertTo-Csv
Count
-----
22
# PowerShell で設定した Logic Analytics の検索結果
$resB.Results | ConvertTo-Csv
Count
-----
22
まとめ
API を利用して Defender for Cloud に複数の連続エクスポートを設定してみました。もし利用する場合には、「ポータルから複数の連続エクスポート設定が見れない」「POST で投げる JSON が大きい」という点にご注意してください