了解 Azure RBAC 的范围

范围是访问权限应用到的资源集。 在分配角色时,请了解范围,以便为安全主体授予它真正需要的最低访问权限,这一点很重要。 通过限制范围,可以限制在安全主体受到入侵的情况下会有哪些资源面临风险。

范围级别

在 Azure 中,可以在四个级别指定范围:管理组、订阅、资源组和资源。 范围采用父子关系结构。 层次结构的每个级别都会使范围更具针对性。 可以在其中任何一个范围级别分配角色。 所选级别决定了角色的应用广泛程度。 较低级别继承较高级别的角色权限。

Scope for a role assignment

管理组是高于订阅的范围级别,但管理组支持更复杂的层次结构。 下图显示了可以定义的管理组和订阅的层次结构的示例。 有关管理组的详细信息,请参阅什么是 Azure 管理组?

Management group and subscription hierarchy

范围格式

如果使用命令行分配角色,则需要指定范围。 对于命令行工具,范围是一个可能会很长的字符串,用于标识角色分配的确切范围。 在 Azure 门户中,此范围通常作为资源 ID 列出。

范围由一系列标识符组成,标识符之间用斜杠 (/) 字符分隔。 可以将此字符串视为表示以下层次结构,其中没有占位符的文本 ({}) 是固定标识符:

/subscriptions
    /{subscriptionId}
        /resourcegroups
            /{resourceGroupName}
                /providers
                    /{providerName}
                        /{resourceType}
                            /{resourceSubType1}
                                /{resourceSubType2}
                                    /{resourceName}
  • {subscriptionId} 是要使用的订阅的 ID (GUID)。
  • {resourceGroupName} 是包含资源组的名称。
  • {providerName} 是处理资源的资源提供程序的名称,{resourceType}{resourceSubType*} 标识该资源提供程序内更多的级别。
  • {resourceName} 是标识特定资源的字符串的最后一部分。

管理组是高于订阅的级别,并且具有最广泛(针对性最低)的范围。 此级别的角色分配会应用于该管理组内的订阅。 管理组的范围具有以下格式:

/providers
    /Microsoft.Management
        /managementGroups
            /{managmentGroupName}

范围示例

范围 示例
管理组 /providers/Microsoft.Management/managementGroups/marketing-group
订阅 /subscriptions/00000000-0000-0000-0000-000000000000
资源组 /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg
/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/pharma-sales
资源 /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/azurestorage12345/blobServices/default/containers/blob-container-01
/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyVirtualNetworkResourceGroup/providers/Microsoft.Network/virtualNetworks/MyVirtualNetwork12345

如何确定资源的范围

确定管理组、订阅或资源组的范围是相当简单的。 只需知道名称和订阅 ID。 不过,确定资源范围时所需完成的工作会稍多一些。 以下是几种确定资源范围的方法。

  • 在 Azure 门户中,打开资源,然后查看属性。 该资源应该会列出可用于确定范围的资源 ID。 例如,以下是某个存储帐户的资源 ID。

    Screenshot that shows resource IDs for a storage account in Azure portal.

  • 另一种方法是,使用 Azure 门户在资源范围临时分配一个角色,然后使用 Azure PowerShellAzure CLI 来列出角色分配。 在输出中,该范围将会作为属性列出。

    RoleAssignmentId   : /subscriptions/<subscriptionId>/resourceGroups/test-rg/providers/Microsoft.Storage/storageAccounts/azurestorage12345/blobServices/default/containers/blob-container-01/pro
                         viders/Microsoft.Authorization/roleAssignments/<roleAssignmentId>
    Scope              : /subscriptions/<subscriptionId>/resourceGroups/test-rg/providers/Microsoft.Storage/storageAccounts/azurestorage12345/blobServices/default/containers/blob-container-01
    DisplayName        : User
    SignInName         : user@contoso.com
    RoleDefinitionName : Storage Blob Data Reader
    RoleDefinitionId   : 2a2b9908-6ea1-4ae2-8e65-a410df84e7d1
    ObjectId           : <principalId>
    ObjectType         : User
    CanDelegate        : False
    Description        :
    ConditionVersion   :
    Condition          :
    
    {
        "canDelegate": null,
        "condition": null,
        "conditionVersion": null,
        "description": null,
        "id": "/subscriptions/{subscriptionId}/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/azurestorage12345/blobServices/default/containers/blob-container-01/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
        "name": "{roleAssignmentId}",
        "principalId": "{principalId}",
        "principalName": "user@contoso.com",
        "principalType": "User",
        "resourceGroup": "test-rg",
        "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
        "roleDefinitionName": "Storage Blob Data Reader",
        "scope": "/subscriptions/{subscriptionId}/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/azurestorage12345/blobServices/default/containers/blob-container-01",
        "type": "Microsoft.Authorization/roleAssignments"
      }
    

范围和 ARM 模板

角色分配是 Azure 资源管理器中的一种特殊类型,称为扩展资源。 扩展资源是扩展另一资源的功能的资源。 它们始终作为另一资源的扩展(如子资源)存在。 例如,订阅范围的角色分配是订阅的扩展资源。 角色分配的名称始终是要扩展的资源的名称加上 /Microsoft.Authorization/roleAssignments/{roleAssignmentId}。 使用 Azure 资源管理器模板(ARM 模板)分配角色时,通常不需要提供范围。 原因在于范围字段最后始终为要扩展的资源的 ID。 范围可以根据角色分配本身的 ID 确定。 下表显示了角色分配 ID 和相应范围的示例:

角色分配 ID 范围
/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId} /subscriptions/{subscriptionId}
/subscriptions/{subscriptionId}/resourceGroups/Example-Storage-rg/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId} /subscriptions/{subscriptionId}/resourceGroups/Example-Storage-rg

有关范围和 ARM 模板详细信息,请参阅使用 Azure 资源管理器模板分配角色。 有关扩展资源类型的完整列表,请参阅用于扩展其他资源的功能的资源类型

后续步骤