首页 > 解决方案 > 导出所有订阅 RBAC,重点关注 Azure AD 组并解析分配的用户

问题描述

使用 RBAC 导出所有订阅但专注于 AAD 组和解决用户成员身份的最佳方式是什么?我似乎迷失在 if 语句中。

Get-AzSubscription | 

foreach-object {

    Write-Verbose -Message "Changing to Subscription $($_.Name)" -Verbose

    Set-AzContext -TenantId $_.TenantId -SubscriptionId $_.Id -Force
    $Name     = $_.Name
    $TenantId = $_.TenantId
    $SubId    = $_.SubscriptionId  

        Get-AzRoleAssignment -IncludeClassicAdministrators | Select-Object RoleDefinitionName,DisplayName,SignInName,ObjectType,Scope,
    @{name="TenantId";expression = {$TenantId}},@{name="SubscriptionName";expression = {$Name}},@{name="SubscriptionId";expression = {$SubId}
    } 

        if(Get-AzRoleAssignment.ObjectType -eq "Group") 
        {
        Get-AzADGroup -ObjectId.Id  | Select-Object DisplayName,SignInName,ObjectType,Scope | foreach-object { Get-AzADUser | Select-Object UserPrincipalName,ObjectType,Id
            }
        }
        else { continue }
    } 

-OutVariable ra
$ra | Export-Csv -Path .\Export-SubAzRolesGroups-$Name.csv -NoTypeInformation
}

标签: powershellazure-active-directoryazure-ad-powershell-v2

解决方案


最简单/最快的方法可能是使用带有 az 模块的 powershell,编写一个小脚本,获取该帐户有权访问的所有订阅(希望使用某种租户范围的读取权限用户),然后获取每个订阅的所有角色分配, 并做任何你需要做的事情来获取组,并为每个组获取成员。将其全部写入文件。

您要查看的 powershell 命令是: get-azsubscription get-azroleassignment get-azadgroup get-azaduser

其他选项包括,您可以使用 azure 资源管理器 Rest API 或其他一些 azurerm 库来编写执行相同操作的应用程序。

希望这能让你开始。

更新

Get-AzSubscription | 
foreach-object {
    Write-Verbose -Message "Changing to Subscription $($_.Name)" -Verbose

    Set-AzContext -TenantId $_.TenantId -SubscriptionId $_.Id -Force
    $Name     = $_.Name
    $TenantId = $_.TenantId
    $SubId    = $_.SubscriptionId  

    Get-AzRoleAssignment -IncludeClassicAdministrators | Select-Object RoleDefinitionName,DisplayName,SignInName,ObjectId,ObjectType,Scope,
    @{name="TenantId";expression = {$TenantId}},@{name="SubscriptionName";expression = {$Name}},@{name="SubscriptionId";expression = {$SubId}} | 
    foreach-object{ if($_.ObjectType -eq "Group") 
        {
            $_ | ft
            $group = Get-AzADGroup -ObjectId $_.ObjectId
            $group | Select-Object DisplayName,SignInName,ObjectType,Scope | ft
            $group | Get-azadgroupmember | Select-Object UserPrincipalName,ObjectType,Id | ft
        }
        else { $_ | ft}
    }
} -OutVariable ra
$ra | out-file .\Export-SubAzRolesGroups-$Name.csv

推荐阅读