Поскольку мне не разрешено включать Microsoft Defender для SQL с портала Azure, я пытаюсь найти команду Powershell или AzureCLI, чтобы включить его из CloudShell. Последний шаг — использовать эту команду в конвейере. Я ожидаю, что это будет команда, которая получит в качестве параметров имя сервера и группы и автоматически включит Microsoft Defender для SQL.
Я попробовал это:
az sql server threat-policy update --resource-group <my-resource-group> --server-name <my-sql-server-name> --state Enabled
Ответ был:
«Политика угроз» написана с ошибкой или не распознается системой.
РЕДАКТИРОВАТЬ После дополнительных исследований я нашел частичное решение. Я объясню ниже:
Update-AzSqlServerAdvancedThreatProtectionSetting -Enable $true -ResourceGroupName 'my-resource-group' -ServerName 'my-server-name'
статус изменен на «Включен статус: Включен на уровне подписки» и ниже статуса отображается предупреждение с кнопкой «включить», в котором говорится, что «Оценка уязвимостей SQL не настроена. Нажмите, чтобы включить экспресс-конфигурацию».
Да, вам необходимо включить оценку уязвимостей отдельно после включения Microsoft Defender для SQL. Обратитесь к этому документу MS Doc, чтобы управлять оценкой уязвимостей с помощью команд Azure PowerShell Learn.microsoft.com/en-us/azure/defender-for-cloud/…
Прежде чем управлять оценкой уязвимостей программно, мне нужно включить ее программно. Я ожидаю, что это будет что-то похожее на команду, которую я написал выше.
Я не проверял команды, но их описание здесь, в документации заставляет меня поверить, что они создают и включают Microsoft Defender For SQL. Это позволяет использовать тарифный план для всей подписки, а не для отдельного ресурса, поскольку кажется, что для программного выполнения этого может потребоваться запрос POST к ARM API.
Наконец я нашел решение. Я опишу это ниже:
Update-AzSqlServerAdvancedThreatProtectionSetting -Enable $true -ResourceGroupName '<your-resource-group-name>' -ServerName '<your-sql-server-name>'
$SubscriptionId = '<your-sub-id>'
$ResourceGroupName = '<your-resoruce-group-name>'
$ServerName = '<your-server-name>'
param
(
[Parameter(Mandatory = $True)]
[string]$SubscriptionId,
[Parameter(Mandatory = $True)]
[string]$ResourceGroupName,
[Parameter(Mandatory = $True)]
[string]$ServerName,
[Parameter(Mandatory = $False)]
[switch]$Force
)
function SetSqlVulnerabilityAssessmentServerSetting($SubscriptionId, $ResourceGroupName, $ServerName) {
$Uri = "/subscriptions/$SubscriptionId/resourceGroups/$ResourceGroupName/providers/Microsoft.Sql/servers/$ServerName/sqlVulnerabilityAssessments/default?api-version=2022-02-01-preview"
$Body = @{
properties = @{
state = "Enabled"
}
}
$Body = $Body | ConvertTo-Json
return SendRestRequest -Method "Put" -Uri $Uri -Body $Body
}
function SendRestRequest(
[Parameter(Mandatory = $True)]
[string] $Method,
[Parameter(Mandatory = $True)]
[string] $Uri,
[parameter( Mandatory = $false )]
[string] $Body = "DEFAULT") {
$Params = @{
Method = $Method
Path = $Uri
}
if (!($Body -eq "DEFAULT")) {
$Params = @{
Method = $Method
Path = $Uri
Payload = $Body
}
}
Invoke-AzRestMethod @Params
}
SetSqlVulnerabilityAssessmentServerSetting -SubscriptionId $SubscriptionId -ResourceGroupName $ResourceGroupName -ServerName $ServerName
Обратите внимание: используемая вами команда в настоящее время устарела и больше не доступна. Обратитесь к этому MS Doc. Чтобы включить Microsoft Defender для SQL, используйте эту команду
az security pricing create -n SqlServers --tier standard