使用适用于 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 目前仅支持 application/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 操作有两种可能用途:
- 使用 CI/CD 管道中的最新部署作为应用程序的最终状态:ACAT 根据管道中的最新部署进行快速符合性评估。 此外,还可以选择请求 ACAT 基于此部署刷新相应的合规性报告,从而通过每日更新授予全面的控制评估。
- 依赖于现有合规性报告作为应用程序的参考。 ACAT 利用现有合规性报告中定义的资源来执行快速合规性评估。
通过 ACAT REST API 与 CI/CD 管道集成
通过 ACAT REST API 在 CI/CD 管道中获取快速符合性评估。
使用服务主体身份验证连接到 Azure 资源。 按照 本指南 了解如何创建可以访问资源的服务主体。 创建服务主体后,请按照管道工具中的指南存储凭据。 例如, 使用 ARM 服务连接连接到 azure Microsoft。
获取要用于快速合规性评估的资源列表。
- 使用 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
是
String
触发通知的特定事件。
邮件
是
String
通知的内容。 它通常包含报表名称作为唯一标识符,以及发生此事件时的时间戳。
详细信息
否
String
这是包含此通知详细信息的 JSON 格式内容。 以控制评估失败为例,详细信息包括每个控制措施和受影响资源的所有失败客户责任。
ACAT REST API 触发器评估
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
查询
True
string
要用于此操作的 API 版本。 可以使用“2023-02-15-preview”
请求头
名称
位置
必需
类型
说明
Authorization
head
True
string
持有者 + “ ” + 访问令牌
x-ms-aad-user-token
head
True
string
持有者 + “ ” + 访问令牌
Content-Type
head
True
string
value:“application/json”
请求正文
Name
必需
类型
说明
resourceIds
True
string array
要评估的资源 ID 列表
响应标头
名称
类型
说明
200 OK
响应指示已完成给定资源 ID 的快速符合性评估。
202 接受
响应指示在后端触发并执行给定资源 ID 的快速符合性评估。
其他状态代码
ErrorResponse
错误响应。
TriggerEvaluationResponse
名称
类型
说明
triggerTime
string
触发评估的时间。
evaluationEndTime
string
评估结束的时间。
resourceIds
string[]
要评估的资源 ID 列表
quickAssessments
快速评估列表
快速评估
名称
类型
说明
resourceId
string
资源 ID
responsibilityId
string
责任 ID
时间戳
string
资源创建时间戳 (UTC) 。
resourceStatus
ResourceStatus
快速评估状态。
displayName
string
快速评估显示名称。
description
string
快速评估的说明。
remediationLink
string
指向此快速评估的修正步骤的链接。