在Azure的原則中有一條合規性檢查叫稽核診斷設定,對應的英文是Audit diagnostic setting。
此規則針對一般服務就是在其服務當中啟用“診斷設定”,但對於Azure SQLdatabase有些特別,預設在資料庫的診斷設定當中就只有下面的內容可以勾選
在Log的部分有9種log可以記錄,但提交查核後結果是不通過的,可以看到當前值是9個true,有2個false
要查詢2個false是對應到什麼
1 |
Get-AzDiagnosticSetting -ResourceId "/subscriptions/********/resourceGroups/temp/providers/Microsoft.Sql/servers/******/databases/lucasdemo001" |
可以看到結果兩個false對應到DevOpsOperationsAudit和SQLSecurityAuditEvents
雖然官方的說明在這裏
但其實并沒有前面2條記録,按照官方的說明用指令部署,當前一次檢查可以通過,但下一次還是會被覆蓋,解決方式是官方的腳本要修改一下,改為下面的內容,只有設定Log Analytics 工作區,取消儲存體和Event Hub
定義文件例如azure-monitor-deploy.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "settingName": { "type": "String" }, "serverName": { "type": "String" }, "dbName": { "type": "String" }, "workspaceId": { "type": "String" } }, "resources": [ { "type": "microsoft.sql/servers/databases/providers/diagnosticSettings", "apiVersion": "2017-05-01-preview", "name": "[concat(parameters('serverName'),'/',parameters('dbName'),'/microsoft.insights/', parameters('settingName'))]", "dependsOn": [], "properties": { "workspaceId": "[parameters('workspaceId')]", "logs": [ { "category": "SQLInsights", "enabled": true }, { "category": "AutomaticTuning", "enabled": true }, { "category": "QueryStoreRuntimeStatistics", "enabled": true }, { "category": "QueryStoreWaitStatistics", "enabled": true }, { "category": "Errors", "enabled": true }, { "category": "DatabaseWaitStatistics", "enabled": true }, { "category": "Timeouts", "enabled": true }, { "category": "Blocks", "enabled": true }, { "category": "Deadlocks", "enabled": true }, { "category": "DevOpsOperationsAudit", "enabled": true }, { "category": "SQLSecurityAuditEvents", "enabled": true } ], "metrics": [ { "category": "Basic", "enabled": true }, { "category": "InstanceAndAppAdvanced", "enabled": true }, { "category": "WorkloadManagement", "enabled": true } ] } } ] } |
參數文件,例如azure-monitor-deploy.parameters.json,裡面變量變為自己的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "settingName": { "value": "sql3_log" }, "serverName": { "value": "serverdemo001" }, "dbName": { "value": "sql3" }, "workspaceId": { "value": "/subscriptions/****/resourcegroups/defaultresourcegroup-sea/providers/microsoft.operationalinsights/workspaces/defaultworkspace-6ea81697-aa06-46af-b798-8db83d345273-sea" } } } |
然後在本地powershell中執行,是套用在資源群組中,參數根據實際變更
1 |
New-AzResourceGroupDeployment -Name AzureMonitorDeployment -ResourceGroupName temp -TemplateFile azure-monitor-deploy.json -TemplateParameterFile azure-monitor-deploy.parameters.json |
這樣部署後就可以看到可以勾選的log,最終也可以通過合規性檢查。
當然這因該不是標準的方式,標準的方式,SQLSecurityAuditEvents和DevOpsOperationsAudit是要開啟SQL的稽核功能才可以出現
這樣設定之後,因為這個稽核是從伺服器層別啟用,開啟之後所有的資料庫都會啟用,打開資料庫的診斷設定就可以出現了SQLSecurityAuditEvents,但仍然找不到DevOpsOperationsAudit的啟用方式,上述的啟用之後,DevOpsOperationsAudit是顯示在Master資料庫中(從監控中定位),但文件有提及此資料庫是不會被原則檢驗的,所以最終的解套方式就是自己修改腳本直接讓這兩項在診斷記錄中顯示出來。