Einrichten von Baselines für Sicherheitsrisikobewertungen für Azure SQL-Datenbanken
Dieses PowerShell-Skript richtet Baselines basierend auf den neuesten Überprüfungsergebnissen der Sicherheitsrisikobewertung für alle Datenbanken auf einem Azure SQL Server-Computer ein.
Für dieses Beispiel ist mindestens Azure PowerShell Az 1.0 erforderlich. Führen Sie Get-Module -ListAvailable Az
aus, um die installierten Versionen zu ermitteln.
Wenn Sie die Installation ausführen müssen, finden Sie unter Installieren des Azure PowerShell-Moduls Informationen dazu.
Führen Sie zum Anmelden bei Azure Connect-AzAccount aus.
Wenn Sie kein Azure-Abonnement haben, erstellen Sie ein kostenloses Azure-Konto, bevor Sie beginnen.
Beispielskript
Hinweis
Es wird empfohlen, das Azure Az PowerShell-Modul für die Interaktion mit Azure zu verwenden. Informationen zu den ersten Schritten finden Sie unter Installieren von Azure PowerShell. Informationen zum Migrieren zum Az PowerShell-Modul finden Sie unter Migrieren von Azure PowerShell von AzureRM zum Az-Modul.
<#
.SYNOPSIS
This script sets the results of the last successful scan as baseline for each database under the selected Azure SQL Server.
.DESCRIPTION
This script check if the selected Azure SQL Server uses Vulnerability Assessment Express Configuration, iterates through all user databases under a server and sets the latest scan results as a baseline.
#>
$SubscriptionId = "<subscriptionid>" # The Subscription id that the server belongs to.
$ResourceGroupName = "<resource group>" # The Resource Group that the server belongs to.
$ServerName = "<server name>" # The SQL server name that we want to apply the new SQL Vulnerability Assessment policy to (short name, without suffix).
$APIVersion = "2022-05-01-preview"
###### New SQL Vulnerability Assessment Commands ######
#######################################################
function GetExpressConfigurationStatus($SubscriptionId, $ResourceGroupName, $ServerName){
$Uri = "https://management.azure.com/subscriptions/$SubscriptionId/resourceGroups/$ResourceGroupName/providers/Microsoft.Sql/servers/$ServerName/sqlVulnerabilityAssessments/Default?api-version=" + $APIVersion
SendRestRequest -Method "GET" -Uri $Uri
}
function SetLastScanAsBaselineOnSystemDatabase($SubscriptionId, $ResourceGroupName, $ServerName){
$Uri = "https://management.azure.com/subscriptions/$SubscriptionId/resourceGroups/$ResourceGroupName/providers/Microsoft.Sql/servers/$ServerName/sqlVulnerabilityAssessments/default/baselines/default?systemDatabaseName=master&api-version=" + $APIVersion
$Body = "{properties: {latestScan: true,results: {}}}"
SendRestRequest -Method "PUT" -Uri $Uri -Body $Body
}
function SetLastScanAsBaselineOnUserDatabase($SubscriptionId, $ResourceGroupName, $ServerName, $DatabaseName){
$Uri = "https://management.azure.com/subscriptions/$SubscriptionId/resourceGroups/$ResourceGroupName/providers/Microsoft.Sql/servers/$ServerName/databases/$DatabaseName/sqlVulnerabilityAssessments/default/baselines/default?api-version=" + $APIVersion
$Body = "{properties: {latestScan: true,results: {}}}"
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")
{
$AccessToken = Get-AzAccessToken
$Token = "Bearer $($AccessToken.Token)"
$headers = @{
'Authorization' = $Token
}
$Params = @{
Method = $Method
Uri = $Uri
Headers = $headers
ContentType = "application/json"
}
if(!($Body -eq "DEFAULT"))
{
$Params = @{
Method = $Method
Uri = $Uri
Body = $Body
Headers = $headers
ContentType = "application/json"
}
}
Invoke-RestMethod @Params
}
#######################################################
# Connect
Connect-AzAccount
Set-AzContext $SubscriptionId
# Check if Express Configuration is enabled
$ECState = (GetExpressConfigurationStatus -SubscriptionId $SubscriptionId -ResourceGroupName $ResourceGroupName -ServerName $ServerName).properties.State
Write-Host "Express Configuration status: " $ECState
if ($ECState -eq "Enabled")
{
# Get list of databases
$databases = Get-AzSqlDatabase -ResourceGroupName $ResourceGroupName -ServerName $ServerName | where {$_.DatabaseName -ne "master"}
# Set latest scan results as baseline on all user databases
foreach ($database in $Databases)
{
Write-Host "Set baseline on database: '$($database.DatabaseName)'"
SetLastScanAsBaselineOnUserDatabase -SubscriptionId $SubscriptionId -ResourceGroupName $ResourceGroupName -ServerName $ServerName -DatabaseName $database.DatabaseName
}
Write-Host "Set baseline on 'master' database"
SetLastScanAsBaselineOnSystemDatabase -SubscriptionId $SubscriptionId -ResourceGroupName $ResourceGroupName -ServerName $ServerName
}
else
{
Write-Host "The specified server does not have VA Express Configuration enabled therefore bulk baseline operations were not performed."
return
}
Nächste Schritte
Weitere Informationen zum Azure PowerShell-Modul finden Sie in der Azure PowerShell-Dokumentation.