使用適用於 Microsoft 365 的應用程式合規性自動化工具持續Microsoft 365 應用程式合規性
Microsoft 365 應用程式合規性自動化工具 (ACAT) 簡化Microsoft 365 認證的基本控件。 使用 ACAT 保持Microsoft 365 應用程式的持續合規性。 透過通知持續更新合規性失敗,並順暢地將 ACAT 整合到持續整合/持續部署管線中。
注意事項
ACAT 目前處於公開預覽狀態,且僅支援建置在 Azure 上的應用程式。 未來的更新將包含建置在非Microsoft託管雲端服務上之應用程式的功能。 如需 ACAT 公開預覽的任何意見反應,請完成此 表單。 ACAT 產品小組專家會儘快與您一起追蹤。
透過通知取得合規性報告的最新控件評估
在您為Microsoft 365 應用程式或環境建立合規性報告之後,ACAT 會自動收集合規性數據,並進行每日控制評估。 此外,您可以接收報表設定或評量中任何變更的通知。
使用 Webhook 取得通知
建立 Webhook 以接收來自 ACAT 的通知。
移至左側的 [報 表]。
開啟您想要接收通知的報表。
從工具列選 取 [通知 ]。
選 取 [建立通知 ],然後選擇 [Webhook]
- Webhook 名稱:這是此報表中 Webhook 的唯一標識碼。
- 承載 URL:承載 URL 是從 ACAT 接收 Webhook POST 要求的伺服器 URL。
- 內容類型:ACAT 目前僅支援應用程式/json 內容類型,可直接將 JSON 承載傳遞為 POST 要求的主體。
- 秘密:設定 Webhook 秘密可讓您確保傳送至承載 URL 的 POST 要求來自 ACAT。 設定秘密時,ACAT 會使用它來建立每個承載的哈希簽章。 此哈希簽章隨附於每個要求的標頭中,例如 x-acat-signature-256。
- SSL 驗證:只有在您的承載 URL 是 HTTPS) (安全站臺時,才會顯示 SSL 驗證,並有助於確保承載安全地傳遞至您的承載 URL。 建議您保持選取 [啟用 SSL 驗證]。
- 觸發事件:訂閱 ACAT 事件以取得通知。
提示
深入瞭解 Webhook 承載。
在持續整合/持續部署管線中取得快速合規性評估
除了一般入口網站使用方式和接收最新通知之外,ACAT 還可以在持續整合/持續部署 (CI/CD) 管線內執行快速合規性評估。 確保Microsoft 365 應用程式的持續合規性。
在 ACAT 中,控件評量是根據Microsoft 365 認證安全性網域、控件系列和個別控件分類的結構化合規性評估。 若要在 ACAT 原始合規性數據內起始控件評估,必須收集。 不過,從技術觀點來看,某些原始合規性資訊可能無法輕易存取。 為了解決此挑戰,ACAT 引進了稱為「快速合規性評估」的概念。 這項功能旨在提供合規性狀態的快速評估,以便立即收集基本原始合規性數據。
快速合規性評估的實作有兩個用途:
- 及時深入解析:有助於實時瞭解您的合規性狀態,讓您了解應用程式是否遵守安全性標準和最佳做法。
- 無縫整合:快速合規性評估可以順暢地整合到您的 CI/CD 管線中,確保您的應用程式保持健全且符合合規性需求。
透過 GitHub Actions 與 CI/CD 管線整合
注意事項
ACAT GitHub Actions 支援為預覽版,且僅支援建置在 Azure Microsoft 應用程式。 未來的更新將包含建置在其他雲端上之應用程式的功能。
使用 Microsoft 365 認證快速評估 GitHub Action,可在 CI/CD 管線中取得快速合規性評估。 此 GitHub Action 有兩種可能的用途:
- 使用 CI/CD 管線中的最新部署作為應用程式的最終狀態:ACAT 會根據管線內的最新部署進行快速合規性評估。 此外,您可以選擇要求 ACAT 根據此部署重新整理對應的合規性報告,並授與您每日更新的完整控制評估。
- 依賴現有的合規性報告作為應用程式的參考。 ACAT 會利用現有合規性報告中定義的資源來執行快速合規性評估。
透過 ACAT REST API 與 CI/CD 管線整合
透過 ACAT REST API 在 CI/CD 管線中取得快速合規性評估。
使用服務主體驗證連線到 Azure 資源。 請遵循本 指南 以瞭解如何建立可存取資源的服務主體。 建立服務主體之後,請遵循管線工具中的指引來儲存認證。 例如, 使用ARM服務連線來連線到 Microsoft Azure。
取得您想要用於快速合規性評估的資源清單。
- 使用 CI/CD 管線中的最新部署。 檢閱 Azure PowerShell - Get-AzResourceGroupDeploymentOperation 以從部署取得資源。
$resourceGroupName $deploymentName $resourceIds = @() Get-AzResourceGroupDeploymentOperation ` -ResourceGroupName $resourceGroupName ` -Name $deploymentName ` | ForEach-Object { if (![String]::IsNullOrEmpty($_.TargetResource)) { $resourceIds += $_.TargetResource } }
- 若要根據雲端資源管理原則取得資源 (例如具有特定卷標的資源、特定資源群組中的資源等 ) ,請檢閱 Azure PowerShell - Get-AzResource。
# Get resources with same tag $key = "<key-of-your-tag>" $value = "<value-of-your-tag>" $resourceIds = (Get-AzResource -TagName $key -TagValue $value).ResourceId
- 若要使用現有的 ACAT 合規性報告,請選取 [ACAT REST API 報告 - 取得 ] 以從報表定義取得資源。
try { $token = "<your-Azure-credentials>" $reportName = "<report-name>" $apiVersion = "2023-02-15-preview" $header = @{} $header["Authorization"] = $token $header["x-ms-aad-user-token"] = $token $header["accept"] = "application/json" $uri = "https://management.azure.com/providers/Microsoft.AppComplianceAutomation/reports/" + $reportName + "?api-version=" + $apiVersion $response = Invoke-WebRequest $uri ` -Method GET ` -Headers $header ` -ContentType "application/json" ` -Verbose ` -UseBasicParsing $resourceIds = @() if ($response.StatusCode -ne 200) { Write-Host "Failed to get resources from compliance report: $response" return } $resources = $response.Content | ConvertFrom-Json $resourceIds = $resources.properties.resources.resourceId } catch { Write-Output "Failed to get resources from compliance report with exception: $_" }
使用 triggerEvaluation API 取得指定資源的快速合規性評估。
try {
$token = "<your-Azure-credentials>"
$resourceIds = "<resource-ids-from-previous-step>"
$apiVersion = "2023-02-15-preview"
$header = @{}
$header["Authorization"] = $token
$header["x-ms-aad-user-token"] = $token
$header["accept"] = "application/json"
$body = @{resourceIds = $resourceIds }
$uri = "https://management.azure.com/providers/Microsoft.AppComplianceAutomation/triggerEvaluation?api-version=$apiVersion"
$response = Invoke-WebRequest $uri `
-Method POST `
-Headers $header `
-ContentType "application/json" `
-Body (ConvertTo-Json $body -Depth 8) `
-Verbose `
-UseBasicParsing
# The triggerEvaluation API is asynchronous. Therefore, you need to pull the status to check whether it is completed.
# StatusCode 200: OK. The response indicates the quick compliance evaluation for given resource ids is completed.
# StatusCode 202: Accepted. The response indicates the quick compliance evaluation for given resource ids is triggered and performing in backend.
if ($response.StatusCode -eq 200) {
$result = $response.Content | ConvertFrom-Json
Write-Host "Successfully get evaluation result:$result"
return $result
}
elseif ($response.StatusCode -eq 202) {
$retry_url = $response.Headers["Location"]
do {
Start-Sleep 10
Write-Host "retry_url: $retry_url"
$opResponse = Invoke-WebRequest `
-Uri $retry_url `
-ContentType "application/json" `
-Verbose `
-Method GET `
-Headers $header `
-UseBasicParsing
if ($opResponse.StatusCode -eq 200) {
$opResult = $opResponse.Content | ConvertFrom-Json
Write-Host "Successfully get evaluation result: $opResult"
return $opResult
}
elseif ($opResponse.StatusCode -eq 202) {
continue
}
else {
Write-Host "Failed to get evaluation result"
break
}
} while ($true)
}
else {
Write-Host "Failed to get compliance evaluation with triggerEvaluation API: $response"
}
}
catch {
Write-Output "Failed to get quick compliance assessment with exception: $_"
}
- 從 triggerEvaluation API 的結果取得快速合規性評估。
參考
Webhook 承載
針對每個事件的 ACAT Webhook 承載,它們包含一些常見的屬性。
機碼
必要?
類型
描述
EventDesc
是
字串
觸發通知的特定事件。
郵件
是
字串
通知的內容。 它通常包含作為唯一標識符的報表名稱,以及此事件發生時的時間戳。
詳細資料
否
字串
這是包含此通知詳細數據的 JSON 格式內容。 以控制評定失敗為例,詳細數據包括每個控件和受影響資源的所有失敗客戶責任。
ACAT REST API triggerEvaluation
API 名稱:triggerEvaluation
- 服務:應用程式合規性自動化
- API 版本:2023-02-15-preview
取得指定資源的快速合規性評估。
POST https://management.azure.com/providers/Microsoft.AppComplianceAutomation/triggerEvaluation?api-version=2023-02-15-preview
URI 參數
名稱
於
必要項目
類型
描述
api-version
查詢
對
string
要用於此作業的 API 版本。 您可以使用 “2023-02-15-preview”
要求標頭
名稱
於
必要項目
類型
描述
授權
頭
對
string
持有人 + “ ” + 存取令牌
x-ms-aad-user-token
頭
對
string
持有人 + “ ” + 存取令牌
Content-Type
頭
對
string
value:“application/json”
要求本文
名稱
必要項目
類型
描述
resourceIds
True
字串陣列
要評估的資源標識碼清單
回應標頭
名稱
類型
描述
200 OK
回應表示已完成指定資源標識碼的快速合規性評估。
202 已接受
回應表示會觸發指定資源標識碼的快速合規性評估,並在後端執行。
其他狀態代碼
ErrorResponse
錯誤回應。
TriggerEvaluationResponse
名稱
類型
描述
triggerTime
字串
觸發評估的時間。
evaluationEndTime
字串
評估結束的時間。
resourceIds
string[]
要評估的資源標識碼清單
quickAssessments
快速評定清單
QuickAssessment
名稱
類型
描述
resourceId
字串
資源識別碼
responsibilityId
字串
責任標識碼
時間戳
字串
UTC) (資源建立的時間戳。
resourceStatus
ResourceStatus
快速評定狀態。
displayName
字串
快速評定顯示名稱。
描述
字串
快速評量的描述。
remediationLink
字串
此快速評量的補救步驟連結。