You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取AD组关联的Azure资源/资源组列表,完成标签批量更新

获取与AD组关联的Azure资源/资源组列表的方法

针对你有17000+ Azure AD组、需要获取关联资源/资源组来批量更新标签的需求,下面提供两种实用的批量处理方案:

方法1:Azure PowerShell 脚本

适合熟悉PowerShell的场景,可直接导出结构化结果:

步骤:

  1. 登录Azure账号(自动化脚本建议用服务主体登录):
Connect-AzAccount
# 多订阅场景切换目标订阅:Set-AzContext -SubscriptionId "你的订阅ID"
  1. 导出目标AD组列表(已有AD组ObjectID列表可跳过):
# 可按组名前缀过滤,替换成你的实际规则
Get-AzADGroup -Filter "DisplayName starts with 'YourGroupPrefix'" | Select-Object ObjectID, DisplayName | Export-Csv -Path "ADGroups.csv" -NoTypeInformation
  1. 批量遍历AD组,抓取关联资源:
$adGroups = Import-Csv -Path "ADGroups.csv"
$results = @()

foreach ($group in $adGroups) {
    # 获取该组的所有RBAC权限分配(加 -IncludeInherited $false 仅取直接分配的权限)
    $roleAssignments = Get-AzRoleAssignment -ObjectId $group.ObjectID

    foreach ($ra in $roleAssignments) {
        # 判断是资源组还是单个资源
        $resourceType = if ($ra.Scope -match "/resourceGroups/([^/]+)$") { "ResourceGroup" } else { "Resource" }
        $resourceName = $resourceType -eq "ResourceGroup" ? $matches[1] : ($ra.Scope -split "/")[-1]

        $results += [PSCustomObject]@{
            ADGroupName       = $group.DisplayName
            ADGroupObjectID   = $group.ObjectID
            ResourceType      = $resourceType
            ResourceName      = $resourceName
            ResourceFullScope = $ra.Scope
            AssignedRole      = $ra.RoleDefinitionName
        }
    }
    # 加延迟避免API限流,17000个组建议保留此设置
    Start-Sleep -Milliseconds 500
}

# 导出结果到CSV,供你的标签更新脚本使用
$results | Export-Csv -Path "ADGroup_Associated_Resources.csv" -NoTypeInformation

注意事项:

  • 执行账号需要Reader或RBAC管理员权限,才能读取所有RBAC分配
  • 多订阅场景需在循环中切换订阅,或用Get-AzRoleAssignment -Scope "/subscriptions/订阅ID"指定订阅
  • 若遇API限流,可延长延迟时间,或拆分AD组列表分批次处理

方法2:Azure CLI + Bash 脚本

适合Linux/macOS环境或偏好CLI的用户:

步骤:

  1. 登录Azure账号:
az login
# 多订阅场景切换:az account set --subscription "你的订阅ID"
  1. 导出AD组列表:
# 按组名前缀过滤,替换成你的规则
az ad group list --filter "displayName starts with 'YourGroupPrefix'" --query "[].{objectId:objectId, displayName:displayName}" --output csv > ADGroups.csv
  1. 批量抓取关联资源(需提前安装jq处理JSON):
#!/bin/bash

# 初始化结果文件
echo "ADGroupName,ADGroupObjectID,ResourceType,ResourceName,ResourceFullScope,AssignedRole" > ADGroup_Associated_Resources.csv

# 遍历AD组列表
while IFS=, read -r objectId displayName
do
    # 获取该组的RBAC分配(加 --include-inherited false 仅取直接分配权限)
    az role assignment list --assignee "$objectId" --query "[].{scope:scope, roleDefinitionName:roleDefinitionName}" --output json | \
    jq -r --arg dn "$displayName" --arg oid "$objectId" '.[] |
        .resourceType = (if .scope | test("/resourceGroups/[^/]+$") then "ResourceGroup" else "Resource" end) |
        .resourceName = (if .resourceType == "ResourceGroup" then (.scope | split("/")[-1]) else (.scope | split("/")[-1]) end) |
        [$dn, $oid, .resourceType, .resourceName, .scope, .roleDefinitionName] | @csv' >> ADGroup_Associated_Resources.csv
    
    # 延迟避免限流
    sleep 0.5
done < ADGroups.csv

注意事项:

  • 安装jq:Ubuntu/Debian用sudo apt install jq,macOS用brew install jq
  • 跨订阅场景需遍历所有订阅:az account list --query "[].id" --output tsv | while read sub; do az account set --subscription "$sub"; ...; done

内容的提问来源于stack exchange,提问作者Shashwat Kumar Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 12:33:19