是否有任何 PowerShell 脚本或命令可以从 Azure 门户获取租户中所有用户访问角色的报告?

Posted

技术标签:

【中文标题】是否有任何 PowerShell 脚本或命令可以从 Azure 门户获取租户中所有用户访问角色的报告?【英文标题】:Is there any PowerShell script or command to get a report of all the user's access role in tenant wise from Azure portal? 【发布时间】:2022-01-15 19:10:40 【问题描述】:

我正在准备报告,其中包含来自 azure 的所有用户访问级别租户。

是否有任何一个命令或脚本可以从 Azure 租户获取所有用户的访问级别?

【问题讨论】:

“我正在准备报告”...你能告诉我们你已经尝试过什么吗?解释什么有效,什么无效,并在您的问题中添加任何错误消息。 【参考方案1】:

这有点小技巧:Azure 的 PS 库与 AD 的 PS 库不同。你必须交叉信息。

    您必须使用上面的命令从您的 AD 中获取所有用户并保存为变量

    $allUsers = Get-ADUsers -Filter *

    现在您可以导航到租户的所有订阅、所有资源组和资源,并为每个人获取 IAM(带有用户的 objectId)并与变量 $allUsers 交叉以识别每个人。

样本不是最好的,但也许可以帮助您:

Connect-AzAccount
$listIAM = New-Object System.Collections.ArrayList
$listSubscriptions = Get-AzSubscription
foreach($subscription in $listSubscriptions)
    Set-AzContext -SubscriptionId $subscription.SubscriptionId
    # Now you have all roleAssignements for this subscription
    $subscriptionIAM = Get-AzRoleAssignment -Scope /subscriptions/$subscription.SubscriptionId
    $listIAM.Add($subscriptionIAM) | Out-Null
    
    # Navigate into resource groups
    $listResourceGroups = Get-AzResourceGroup
    foreach($resourceGroup in $listResourceGroups)
        $rgIAM = Get-AzRoleAssignment -ResourceGroupName $resourceGroup.ResourceGroupName
        $listIAM.Add($rgIAM) | Out-Null

        # Navigate into resources
        $listResources = Get-AzResource -ResourceGroupName $resourceGroup
        foreach($resource in $listResources)
            $rIAM = Get-AzRoleAssignment -Scope $resouce.ResourceId
            $listIAM.Add($rIAM) | Out-Null
        
    

【讨论】:

【参考方案2】:

您可以在 PowerShellGraph API 中执行此操作。两种方法都处于预览阶段(图形 API 调用位于 beta 分支下)。

#Get the user
$userId = (Get-AzureADUser -Filter "userPrincipalName eq 'alice@contoso.com'").ObjectId

#Get direct role assignments to the user
$directRoles = (Get-AzureADMSRoleAssignment -Filter "principalId eq '$userId'").RoleDefinitionId

先决条件

使用 PowerShell 时的 AzureADPreview 模块 使用 PowerShell 时的 Microsoft.Graph 模块 使用 Graph Explorer for Microsoft Graph API 时的管理员同意

https://docs.microsoft.com/en-us/azure/active-directory/roles/list-role-assignments-users

【讨论】:

以上是关于是否有任何 PowerShell 脚本或命令可以从 Azure 门户获取租户中所有用户访问角色的报告?的主要内容,如果未能解决你的问题,请参考以下文章

我可以将退出代码 %errorlevel% 从 WSL Bash 返回到 Powershell 或命令提示符吗?

是否有任何命令行工具可以从 db 生成 Java 实体类(不是 Netbeans 或 Eclipse 向导)

PowerShell初级篇●执行策略

PowerShell - 将可执行文件的stderr重定向到文件或变量,但仍然有stdout转到控制台

如何从 PowerShell 脚本触发 T4 模板

我是否必须在powershell Runbook(azure)中导入模块?