使用 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}

以下示例列出了 制药销售 资源组的角色分配:

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}
    

后续步骤

使用 Azure CLI 分配 Azure 角色