如何提取含排除范围的Azure管理组A策略分配数据?
提取Azure各层级策略分配(含排除范围notScopes)并导出Excel的方案
一、问题原因说明
之前调用REST API或Azure CLI未获取到notScopes数据,是因为默认接口/命令仅返回直接分配的策略,且不会强制返回空值的notScopes字段。必须显式指定参数,才能获取包含继承策略、完整notScopes的全量数据。
二、Azure CLI实现步骤
1. 基础准备
先登录Azure账号:
az login
2. 分层级获取全量策略分配数据
管理组层级(以管理组"A"为例)
# 导出管理组A的所有策略分配(含继承、含notScopes)到JSON文件 az policy assignment list --management-group "A" --include-inherited --include-not-scopes --output json > mgmt-group-policies.json
订阅层级
# 替换<订阅ID/名称>为实际值 az policy assignment list --subscription <订阅ID/名称> --include-inherited --include-not-scopes --output json > subscription-policies.json
资源组层级
# 替换<资源组名称>为实际值 az policy assignment list --resource-group <资源组名称> --include-inherited --include-not-scopes --output json > rg-policies.json
3. 转换为CSV格式(方便导入Excel)
用jq工具提取关键字段并生成CSV(需提前安装jq):
# 处理管理组数据,生成CSV jq -r '[.[] | {层级类型:"管理组",层级名称:"A",分配名称:.name,策略ID:.policyDefinitionId,排除范围:(.notScopes | join(";"))}] | (first | keys_unsorted) as $keys | $keys, map([.[ $keys[] ]])[] | @csv' mgmt-group-policies.json > mgmt-group-policies.csv
订阅/资源组的CSV转换只需修改对应层级类型和层级名称字段即可。
三、PowerShell实现步骤(直接导出Excel兼容格式)
1. 基础准备
登录Azure账号:
Connect-AzAccount
2. 分层级导出CSV
管理组层级
$mgmtGroupPolicies = Get-AzPolicyAssignment -ManagementGroupName "A" -IncludeInherited -IncludeNotScopes $mgmtGroupPolicies | Select-Object ` @{Name="层级类型"; Expression={"管理组"}}, @{Name="层级名称"; Expression={"A"}}, @{Name="分配名称"; Expression={$_.Name}}, @{Name="策略ID"; Expression={$_.PolicyDefinitionId}}, @{Name="排除范围"; Expression={$_.NotScopes -join ";"}} | Export-Csv -Path "mgmt-group-policies.csv" -NoTypeInformation -Encoding UTF8
订阅层级
$subId = "<订阅ID>" $subName = (Get-AzSubscription -SubscriptionId $subId).Name $subPolicies = Get-AzPolicyAssignment -SubscriptionId $subId -IncludeInherited -IncludeNotScopes $subPolicies | Select-Object ` @{Name="层级类型"; Expression={"订阅"}}, @{Name="层级名称"; Expression={$subName}}, @{Name="分配名称"; Expression={$_.Name}}, @{Name="策略ID"; Expression={$_.PolicyDefinitionId}}, @{Name="排除范围"; Expression={$_.NotScopes -join ";"}} | Export-Csv -Path "subscription-policies.csv" -NoTypeInformation -Encoding UTF8
资源组层级
$rgName = "<资源组名称>" $rgPolicies = Get-AzPolicyAssignment -ResourceGroupName $rgName -IncludeInherited -IncludeNotScopes $rgPolicies | Select-Object ` @{Name="层级类型"; Expression={"资源组"}}, @{Name="层级名称"; Expression={$rgName}}, @{Name="分配名称"; Expression={$_.Name}}, @{Name="策略ID"; Expression={$_.PolicyDefinitionId}}, @{Name="排除范围"; Expression={$_.NotScopes -join ";"}} | Export-Csv -Path "rg-policies.csv" -NoTypeInformation -Encoding UTF8
四、REST API补充说明
如果必须用REST API,请求URL需添加$expand=notScopes和$filter=all()参数,确保返回全量数据:
GET https://management.azure.com/providers/Microsoft.Management/managementGroups/A/providers/Microsoft.Authorization/policyAssignments?api-version=2022-06-01&$expand=notScopes&$filter=all()
内容的提问来源于stack exchange,提问作者JBupan
相关产品推荐
相关产品推荐

