使用 Azure CLI 列出 Azure 角色分配

Azure 基于角色的访问控制 (Azure RBAC) 是用于管理 Azure 资源访问权限的授权系统。 若要确定用户、组、服务主体或托管标识有权访问的资源,请列出其角色分配。 本文介绍如何使用 Azure CLI 列出角色分配。

注意

如果你的组织已将管理功能外包给使用 Azure Lighthouse 的服务提供商,则此处将不会显示该服务提供商授权的角色分配。 同样,服务提供商租户中的用户将看不到客户租户中用户的角色分配,无论为其分配的角色是什么样的。

先决条件

列出用户的角色分配

若要列出特定用户的角色分配,请使用 az role assignment list

az role assignment list --assignee {assignee}

默认情况下,将仅显示当前订阅的角色分配。 若要查看当前订阅和以下订阅的角色分配,请添加 --all 参数。 若要在父范围包含角色分配,请添加 --include-inherited 参数。 若要过渡地包括用户作为成员的组的角色分配,请添加 --include-groups 参数。

以下示例列出的角色分配是直接分配给 patlong@contoso.com 用户的:

az role assignment list --all --assignee patlong@contoso.com --output json --query '[].{principalName:principalName, roleDefinitionName:roleDefinitionName, scope:scope}'
[
  {
    "principalName": "patlong@contoso.com",
    "roleDefinitionName": "Backup Operator",
    "scope": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/pharma-sales"
  },
  {
    "principalName": "patlong@contoso.com",
    "roleDefinitionName": "Virtual Machine Contributor",
    "scope": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/pharma-sales"
  }
]

列出资源组的角色分配

若要列出存在于资源组范围的角色分配,请使用 az role assignment list

az role assignment list --resource-group {resourceGroup}

以下示例列出 pharma-sales 资源组的角色分配:

az role assignment list --resource-group pharma-sales --output json --query '[].{principalName:principalName, roleDefinitionName:roleDefinitionName, scope:scope}'
[
  {
    "principalName": "patlong@contoso.com",
    "roleDefinitionName": "Backup Operator",
    "scope": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/pharma-sales"
  },
  {
    "principalName": "patlong@contoso.com",
    "roleDefinitionName": "Virtual Machine Contributor",
    "scope": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/pharma-sales"
  },
  
  ...

]

列出订阅的角色分配

若要列出订阅范围内的所有角色分配,请使用 az role assignment list。 若要获取订阅 ID,可以在 Azure 门户中的“订阅”边栏选项卡上找到它,也可以使用 az account list

az role assignment list --scope "/subscriptions/{subscriptionId}"

示例:

az role assignment list --scope "/subscriptions/00000000-0000-0000-0000-000000000000" --output json --query '[].{principalName:principalName, roleDefinitionName:roleDefinitionName, scope:scope}'
[
  {
    "principalName": "admin@contoso.com",
    "roleDefinitionName": "Owner",
    "scope": "/subscriptions/00000000-0000-0000-0000-000000000000"
  },
  {
    "principalName": "Subscription Admins",
    "roleDefinitionName": "Owner",
    "scope": "/subscriptions/00000000-0000-0000-0000-000000000000"
  },
  {
    "principalName": "alain@contoso.com",
    "roleDefinitionName": "Reader",
    "scope": "/subscriptions/00000000-0000-0000-0000-000000000000"
  },

  ...

]

列出管理组的角色分配

若要列出管理组范围内的所有角色分配,请使用 az role assignment list。 若要获取管理组 ID,可以在 Azure 门户中的“管理组”边栏选项卡上找到它,也可以使用 az account management-group list

az role assignment list --scope /providers/Microsoft.Management/managementGroups/{groupId}

示例:

az role assignment list --scope /providers/Microsoft.Management/managementGroups/sales-group --output json --query '[].{principalName:principalName, roleDefinitionName:roleDefinitionName, scope:scope}'
[
  {
    "principalName": "admin@contoso.com",
    "roleDefinitionName": "Owner",
    "scope": "/providers/Microsoft.Management/managementGroups/sales-group"
  },
  {
    "principalName": "alain@contoso.com",
    "roleDefinitionName": "Reader",
    "scope": "/providers/Microsoft.Management/managementGroups/sales-group"
  }
]

列出托管标识的角色分配

  1. 获取系统分配的或用户分配的托管标识的主体 ID。

    若要获取用户分配的托管标识的主体 ID,可以使用 az ad sp listaz identity list

    az ad sp list --display-name "{name}" --query [].id --output tsv
    

    若要获取系统分配的托管标识的主体 ID,可以使用 az ad sp list

    az ad sp list --display-name "{vmname}" --query [].id --output tsv
    
  2. 若要列出角色分配,请使用 az role assignment list

    默认情况下,将仅显示当前订阅的角色分配。 若要查看当前订阅和以下订阅的角色分配,请添加 --all 参数。 若要查看继承的角色分配,请添加 --include-inherited 参数。

    az role assignment list --assignee {objectId}
    

后续步骤