【问题标题】:How can I see a list of all users and the roles assigned to them in Azure?如何在 Azure 中查看所有用户的列表以及分配给他们的角色?
【发布时间】:2021-07-15 17:49:42
【问题描述】:

我是 Azure 管理员。

我想知道是否有一种简单的方法可以显示 Azure 中的用户列表以及他们针对哪些订阅、用户组和资源分配的角色?

基本上,我想要一份人们在任何事情上的所有角色分配的列表。

相反,我会接受订阅中每个资源组和资源的列表,并列出它们的角色分配。

听起来不是一个大问题?

最简单的方法是什么?

--李

【问题讨论】:

  • Azure 门户具有此功能。你试过了吗?只需转到订阅 -> IAM -> 角色分配。
  • 这不是只向我显示订阅中的角色分配......而不是子资源组或资源吗?我还想查看所有资源组和资源的角色分配

标签: azure


【解决方案1】:

正如评论中提到的,您可以直接在门户中查看。导航到门户中的资源/资源组/订阅 -> Access control (IAM) -> Role assignments,您可以使用所需的参数进行过滤。

或者您可以使用 Azure powershell Get-AzRoleAssignmentREST API,这取决于您的要求。

示例

1.你有一个用户的ObjectIds列表,你可以使用如下脚本。

[string[]]$ids = "5c2cf3xxx99e895","44b8xxxx0cd8","b2a9xxxxc34e"
foreach($id in $ids){
    Get-AzRoleAssignment -ObjectId $id
}

2.您拥有用户的登录名。

[string[]]$names = "xxxx@xxxxx.onmicrosoft.com","xxxx@xxxxx.onmicrosoft.com","xxxx@xxxxx.onmicrosoft.com"
foreach($name in $names){
    Get-AzRoleAssignment -SignInName $name
}

更新:

注意: Azure 中的角色分配是可继承的,例如如果您在subscription 范围内添加用户的角色分配,当您在resource group 中列出角色分配时,也会列出该用户的角色分配。资源组和组内资源的逻辑相同。

1.你有用户的SignInNames,想获取订阅中所有资源的角色分配。

[string[]]$names = "xxxx@xxxxx.onmicrosoft.com","xxxx@xxxxx.onmicrosoft.com","xxxx@xxxxx.onmicrosoft.com"
$rids = (Get-AzResource).ResourceId
foreach($rid in $rids){
    foreach($name in $names){
        Get-AzRoleAssignment -Scope $rid -SignInName $name 
    }   
}

2.您有用户的SignInNames,想要获取特定资源组中所有资源的角色分配。

[string[]]$names = "xxxx@xxxxx.onmicrosoft.com","xxxx@xxxxx.onmicrosoft.com","xxxx@xxxxx.onmicrosoft.com"
$rids = (Get-AzResource -ResourceGroupName <group-name>).ResourceId
foreach($rid in $rids){
    foreach($name in $names){
        Get-AzRoleAssignment -Scope $rid -SignInName $name 
    }   
}

3.您有用户的SignInNames,想要获取订阅中所有资源组的角色分配。

[string[]]$names = "xxxx@xxxxx.onmicrosoft.com","xxxx@xxxxx.onmicrosoft.com","xxxx@xxxxx.onmicrosoft.com"
$gids = (Get-AzResourceGroup).ResourceId
foreach($gid in $gids){
    foreach($name in $names){
        Get-AzRoleAssignment -Scope $gid -SignInName $name 
    }   
}

【讨论】:

  • 是的,我尝试了订阅 -> 访问控制 (IAM) -> 角色分配,但它没有显示子资源组和资源上的所有角色分配。你的脚本解决了我一半的问题。如果它能够获取订阅、资源组和资源的列表,然后遍历它们并输出角色分配,它将完全回答我的问题。
  • @LeeEnglestone 其实它们的逻辑是一样的,只是把脚本改成你自己的需求,你可以查看我的更新。
【解决方案2】:

#!/bin/bash
    
    
subscriptions_list=($(az account list --all --query "[].id" -o table  | grep -vi "resul\|--"))
    
#echo "These subscriptions are linked to Azure Account: $subscriptions_list"
    

    
echo ""
    
echo "Below is the list of <USERS> with direct role assignments to subscriptions"
    
echo ""
    

    
# Listing "Users" with direct tole assignments to subscriptions
    

    
for subscription in "${subscriptions_list[@]}"; do
    
 echo "************************************************************************************"
    
 echo "Direct Role Assignments(s) for subscription id: $subscription"
    
 echo ""
    
 az role assignment list --subscription $subscription --query "[?principalType=='User'].{Role:roleDefinitionName,Email:principalName}" -o table
    
 echo ""
    
done

“az account list”az cli 命令将输出(订阅列表)保存在一个变量中。然后一个 for 循环逐个遍历这些订阅,列出它们的所有者(“用户”类型)。不清楚的请追问。

【讨论】:

  • 欢迎来到 StackOverflow。虽然此代码可能会回答问题,但提供有关 如何 和/或 为什么 解决问题的附加上下文将提高​​答案的长期价值。
  • “az account list”az cli 命令将输出(订阅列表)保存在一个变量中。然后一个 for 循环逐个遍历这些订阅,列出它们的所有者(“用户”类型)。如果不清楚,请询问。
  • 谢谢@SvenEberth。 StackOverflow 的新手。
  • 请使用edit 按钮并将说明添加到您的答案中,而不是作为评论。
猜你喜欢
  • 2023-01-26
  • 2023-02-14
  • 2020-10-15
  • 1970-01-01
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
相关资源
最近更新 更多