我想写一个powershell scrip,向我显示我的Azure帐户中的所有安全中心建议及其严重级别(例如,低、中或高(我想我可以使用Az.安全模块来获得建议。。(AzSecurityTasks(但我不知道如何访问严重性,因为模块没有为我列出它们,我只认为我可以通过Azure Cli中的az安全任务列表访问严重性。但这对我自己的powershell脚本没有帮助。有人有主意吗?也许是通过Azure门户的HTTP请求?提前谢谢。
有几个选项。
- 您可以尝试在PowerShell脚本中使用API
当使用PowerShell与RESTAPI一起工作时,您最终会遇到两个命令:InvokeWebRequest和InvokeRestMethod。
这两个命令都向各种HTTP端点发送HTTP数据,并从中接收HTTP数据,可用于与RESTAPI交互。
看看这个文档中的示例:使用PS调用Rest方法
若要获取安全评估,请在API方法中调用此HTTP get请求。
GET https://management.azure.com/{scope}/providers/Microsoft.Security/assessments?api-version=2020-01-01
请浏览此文档以获取样本响应和参数的详细信息:评估清单
- 此外,您是否尝试过使用Powershell获取AzSecurityAssessment cmd。它很可能也会给你带来严重性。Get-AzSecurityAssessment的文档参考
但如果没有,请注意安全cmdlet正在预览中(而不是GA(,这可能是您没有找到任何文档的原因。预览模块不随Az一起发货,需要单独安装:
安装模块-名称Az.Security
我希望这些信息能有所帮助。
严重性是评估元数据资源的一部分,可通过API获得。使用它而不是"任务"API。
GEThttps://management.azure.com/{scope}/providers/Microsoft。安全/评估?api版本=2020-01-01
它只返回1000条记录。然后,您需要使用nextLink列来继续下一个1000条记录,等等。
获取AzSecurityAssessment返回显示名称,但不返回statusCode(健康、不健康、不适用(。
这有点旧,但以防有人仍然需要它。这也可以帮助您提取状态代码:
$Subscriptions = Get-AzSubscription
$Report = @()
$i = 1
$total = $Subscriptions.count
foreach ($Subscription in $Subscriptions)
{
Set-AzContext -SubscriptionId $($subscription.id)
Write-Host "($i out of $total) Processing subscription $($subscription.name)"
$SecurityAssessments = $null
$SecurityAssessments = Get-AzSecurityAssessment
foreach ($SecurityAssessment in $SecurityAssessments)
{
$TempEntry = $null
$TempEntry = $SecurityAssessment | Select-Object Name,DisplayName,Id,
@{Name="SubscriptionName"; Expression={$($subscription.name)}},
@{Name="StatusCause"; Expression={$($_.status.cause)}},
@{Name="StatusCode"; Expression={$($_.status.code)}},
@{Name="StatusDescription"; Expression={$($_.status.description)}},
@{Name="ResourceDetailsId"; Expression={$($_.ResourceDetails.Id)}},
@{Name="ResourceDetailsSource"; Expression={$($_.ResourceDetails.Source)}}
$Report += $TempEntry
}
$i++
}
$Report