使用PowerShell管理Microsoft Azure SQL Database Auditing

Microsoft Azure SQL Database Auditing入門續集

說明

Microsoft Azure SQL Database Auditing 入門一文中,筆者介紹了如何在Microsoft Azure Preview Protal啟用SQL Database的稽核功能,現在這個功能也已經在現有的Microsoft Azure管理入口網站中實現,並且在Azure PowerShell 0.8.8版擴充相關的cmdlet。本文將帶領您了解如何在現有的管理入口網站啟用SQL Database稽核以及透過Azure PowerShell來管理稽核功能。

學習目標

一、在Microsoft Azure管理入口網站中啟用SQL Database稽核功能。

二、使用Azure PowerShell來管理SQL Database稽核。

啟用SQL Database稽核功能

在開始之前,您必須先建立一個用來儲存SQL Database稽核內容的儲存體帳戶,您可以利用下列的PowerShell來建立儲存體帳戶,您只要將下列指令碼的todo部分,將變數內容替換成您所要設定的值即可。

#取得認證 todo
$azuresubacct = '您的Azure訂用帳戶'
$cre = Get-Credential -Credential $azuresubacct
#Azure訂用帳戶名稱 todo
$selectsub='MSDN - VS Premium'
#選擇作用中的Azure訂用帳戶
$azuresubscription=Select-AzureSubscription -Name $selectsub

#Azure Storage 帳戶名稱及所在區域 todo
$storacctname = 'sqldbauditstor'
$region = 'East Asia'
$storcontainer = 'sqldbauditstorcontainer'
$storacct=New-AzureStorageAccount -StorageAccountName $storacctname -Location $region
if ($storacct -eq $null)
{
    Write-Verbose '新增儲存體帳戶失敗'
}
else
{
    Write-Verbose '正在建立儲存體帳戶 $storacctname。'
    #取得儲存體存取金鑰
    $storacctkey= Get-AzureStorageKey -StorageAccountName $storacctname
    $storctx=New-AzureStorageContext -StorageAccountName $storacctname -StorageAccountKey $storacctkey.Primary
    New-AzureStorageContainer -Name $storcontainer -Permission Off -Context $storctx        
}

有了儲存體帳戶之後,就可以在管理入口網站中點選SQL Database>您的SQL Database>Auditing & Security來進入稽核和安全性的設定頁面,若您看到如下圖的訊息,表示您尚未啟用該Azure訂用帳戶的SQL Database稽核功能,請點選sign up for the preview來啟用它。另外即將淘汰的Web和Business版本的SQL Database並不支援稽核功能,請確定您所要啟用稽核功能的SQL Database是採用Basic、Standard或是Premium任何一個版本。

image

由於稽核功能尚在Preview階段,因此您必須將它啟用才可以使用該功能,請在下圖選擇您所要啟用稽核功能的Azure訂用帳戶,然後按完成。

image

Preview功能啟用完成回到管理入口網站,您可以看到如下圖的結果,代表目前作用中Azure訂用帳戶SQL Database的稽核功能已經打開。

image

您可以點選上圖的Show secured connection string來查看使用稽核所需的連線字串,和一般的連線字串不同的部分是需要加入secure這個字串,換言之,您必須使用指定的Security Enabled連線字串,所要稽核的事件類型才會被記錄下來。

image

而在Auditing區塊中點選ENABLED就可以啟用該SQL Database的稽核功能,並且選擇所要稽核的事件類型以及存放稽核結果的儲存體帳戶,這和Preview Portal上面的選項是相同的,筆者就不贅述。

image

使用Azure PowerShell來管理SQL Database稽核

除了上一節所介紹的GUI操作方式外,在Azure PowerShell 0.8.8增加了幾項SQL Database稽核相關的cmdlet,使用這些cmdlet之前必須先透過下列PowerShell指令碼來切換至AzureResourceManager模式。

查詢SQL Database伺服器的稽核設定

下列指令碼示範使用Get-AzureSqlServerAuditingSetting cmdlet來查詢伺服器層級的稽核設定:

Get-AzureSqlServerAuditingSetting -ServerName $sqldbservername -ResourceGroupName $res.ResourceGroupName

執行結果如下:

image

查詢SQL Database的稽核設定

下列指令碼示範使用Get-AzureSqlDatabaseAuditingSetting cmdlet來查詢SQL Database的稽核設定:

Get-AzureSqlDatabaseAuditingSetting -ServerName $sqldbservername -DatabaseName $db -ResourceGroupName $res.ResourceGroupName

執行結果如下:

image

啟用/停用SQL Database伺服器的稽核功能

下列指令碼示範透過Set-AzureSqlServerAuditing來啟用伺服器層級的稽核功能,並且指定只有稽核DataAccess和DataChanges事件,以及使用Disable-AzureSqlServerAuditing來停用稽核功能:

#啟用Azure SQL Database伺服器稽核
Set-AzureSqlServerAuditingSetting -ServerName $sqldbservername -ResourceGroupName $res.ResourceGroupName -EventType @('DataAccess','DataChanges')
#停用Azure SQL Database伺服器稽核
Disable-AzureSqlServerAuditing -ServerName $sqldbservername -ResourceGroupName $res.ResourceGroupName       

伺服器層級的稽核功能,必須在Preview Portal才看的到相關的設定結果。

image

啟用/停用SQL Database的稽核功能

下列指令碼示範透過Set-AzureSqlDatabaseAuditingSetting來啟用伺服器層級的稽核功能,並且指定只有稽核SchemaChanges事件,以及使用Disable-AzureSqlDatabaseAuditing來停用稽核功能:

#啟用Azure SQL Database稽核設定
Set-AzureSqlDatabaseAuditingSetting -ServerName $sqldbservername -DatabaseName $db.Name -ResourceGroupName $res.ResourceGroupName -EventType SchemaChanges
#停用Azure SQL Database稽核設定
Disable-AzureSqlDatabaseAuditing -ServerName $sqldbservername -DatabaseName $db.Name -ResourceGroupName $res.ResourceGroupName

執行上述指令碼之後,您可以回到管理入口網站來查看,是否已經如PowerShell所設定。

image

套用伺服器層級的稽核設定

若您的SQL Database伺服器有多個SQL Database,您可以不需要一個一個設定,只要利用Use-AzureSqlServerAuditingSetting cmdlet來使得SQL Database繼承伺服器上的設定,例如下列的指令碼:

#將Azure SQL Database伺服器的設定套用給Azure SQL Database。
Use-AzureSqlServerAuditingSetting -ServerName $sqldbservername -ResourceGroupName $res.ResourceGroupName -DatabaseName $db.Name

同樣的您可以回到Preview Portal來查看相關的設定是否生效。

image

完整PowerShell指令碼如下,同樣的您只要將todo的地方改成您自己的設定值即可。

#取得認證 todo
$azuresubacct = 'Azure訂用帳戶'
$cre = Get-Credential -Credential $azuresubacct
#Azure訂用帳戶名稱 todo
$selectsub='MSDN - VS Premium'
#選擇作用中的Azure訂用帳戶
$azuresubscription=Select-AzureSubscription -Name $selectsub
 
#預設Azure Cmdlet是Azure Service Management模式,為確保相關cmdlet可以正常執行
Switch-AzureMode -Name AzureServiceManagement
 
#Azure SQL Database伺服器名稱 todo
$sqldbservername='wf2zf55sat'
$sqldbserver=Get-AzureSqlDatabaseServer | Where-Object {$_.ServerName -eq $sqldbservername}
if ($sqldbserver -eq $null)
{
    Write-Verbose 'Azure SQL Database $sqldbserver 不存在。'
}
else
{   
    $sqldb=$sqldbserver | Get-AzureSqlDatabase | Where-Object {$_.Edition -ne 'System'}
    if ($sqldb -eq $null)
    {
        Write-Host 'Azure SQL Database [$sqldbserver] 伺服器尚未建立任何資料庫。'
    }
    else
    {
        #切換Azure模組,才能使用PowerShell管理Azure SQL Database稽核相關的cmdlet
        Switch-AzureMode -Name AzureResourceManager        
        #加入Azure訂用帳戶至目前的PowerShell連線
        Add-AzureAccount
        #取得Azure SQL Database伺服器所在的Resource Group名稱
        $res=Get-AzureResource | Where-Object {$_.ResourceId -like '*' + $azuresubscription.Id + '*' -and $_.Location -eq $sqldbserver.Location.Replace(' ','') -and $_.Name -eq $sqldbservername}
        #取得Azure SQL Database伺服器稽核狀態
        Get-AzureSqlServerAuditingSetting -ServerName $sqldbservername -ResourceGroupName $res.ResourceGroupName
        #啟用Azure SQL Database伺服器稽核
        Set-AzureSqlServerAuditingSetting -ServerName $sqldbservername -ResourceGroupName $res.ResourceGroupName -EventType @('DataAccess','DataChanges')
        #停用Azure SQL Database伺服器稽核
        Disable-AzureSqlServerAuditing -ServerName $sqldbservername -ResourceGroupName $res.ResourceGroupName -
        
        #將Azure SQL Database伺服器的設定套用給Azure SQL Database。
        foreach ($db in $sqldb)
        {
            Use-AzureSqlServerAuditingSetting -ServerName $sqldbservername -ResourceGroupName $res.ResourceGroupName -DatabaseName $db.Name
        } 
              
        #取得Azure SQL Database稽核設定
        foreach ($db in $sqldb)
        {
            Get-AzureSqlDatabaseAuditingSetting -ServerName $sqldbservername -DatabaseName $db.Name -ResourceGroupName $res.ResourceGroupName
        }

        #啟用Azure SQL Database稽核設定
        foreach ($db in $sqldb)
        {        
            Set-AzureSqlDatabaseAuditingSetting -ServerName $sqldbservername -DatabaseName $db.Name -ResourceGroupName $res.ResourceGroupName -EventType SchemaChanges
        }
        
        #停用Azure SQL Database稽核設定
        foreach ($db in $sqldb)
        {        
            Disable-AzureSqlDatabaseAuditing -ServerName $sqldbservername -DatabaseName $db.Name -ResourceGroupName $res.ResourceGroupName
        }
    }
}

參考資料

Microsoft Azure SQL Database Auditing 入門

Azure PowerShell 0.8.8