您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

使用 Azure Active Directory 授予对 Blob 和队列的访问权限

Azure 存储支持使用 Azure Active Directory (Azure AD) 授予对 Blob 和队列存储的请求权限。 可以通过 Azure AD 使用 Azure 基于角色的访问控制 (Azure RBAC) 授予对安全主体的访问权限,该安全主体可能是用户、组或应用程序服务主体。 安全主体经 Azure AD 进行身份验证后会返回 OAuth 2.0 令牌。 然后,令牌可用于对针对 Blob 或队列存储的请求进行授权。

与共享密钥授权相比,使用 Azure AD 对针对 Azure 存储的请求进行授权提供了更高的安全性和易用性。 Microsoft 建议尽可能将 Azure AD 授权与 Blob 和队列应用程序一起使用,以最大程度地减少共享密钥中固有的潜在安全漏洞。

可以针对所有公共区域和国家/地区云的所有常规用途帐户和 Blob 存储帐户使用 Azure AD 进行授权。 仅通过 Azure 资源管理器部署模型创建的存储帐户支持 Azure AD 授权。

Blob 存储还支持创建通过 Azure AD 凭据签名的共享访问签名 (SAS)。 有关详细信息,请参阅向具有共享访问签名的数据授予有限的访问权限

Azure 文件支持 AD (预览版的授权) 或 Azure AD DS) (仅限已加入域的 Vm 的 SMB 上的 Azure。 若要了解如何使用 AD (预览版) 或 Azure AD DS (GA) over SMB for Azure 文件,请参阅 Azure 文件基于标识的 Azure 文件身份验证支持概述

Azure 表存储不支持通过 Azure AD 进行授权。 使用共享密钥授权对表存储的请求。

适用于 Blob 和队列的 Azure AD 概述

当某个安全主体(用户、组或应用程序)尝试访问 Blob 或队列资源时,除非该 Blob 可供匿名访问,否则必须为请求授权。 使用 Azure AD 是,访问资源的过程包括两个步骤。 首先,验证安全主体的身份并返回 OAuth 2.0 令牌。 接下来,将该令牌作为请求的一部分传递给 Blob 或队列服务,服务将使用它来授权访问指定的资源。

身份验证步骤要求应用程序在运行时请求 OAuth 2.0 访问令牌。 如果应用程序在 Azure 实体(如 Azure VM、虚拟机规模集或 Azure Functions 应用)中运行,则可以使用托管标识访问 blob 或队列。 若要了解如何授权托管标识向 Azure Blob 或队列服务发出的请求,请参阅使用 Azure Active Directory 和 Azure 资源的托管标识授权访问 Blob 和队列

授权步骤要求将一个或多个 Azure 角色分配给安全主体。 Azure 存储提供了 Azure 角色,这些角色涵盖了针对 Blob 和队列数据的通用权限集。 分配给安全主体的角色确定了该主体拥有的权限。 若要了解有关为 Azure 存储分配 Azure 角色的详细信息,请参阅 使用 AZURE RBAC 管理对存储数据的访问权限

向 Azure Blob 或队列服务发出请求的本机应用程序和 Web 应用程序也可以使用 Azure AD 进行访问授权。 若要了解如何请求访问令牌并使用它来授权对 Blob 或队列数据的请求,请参阅从 Azure 存储应用程序使用 Azure AD 授予对 Azure 存储的访问权限

分配 Azure 角色以授予访问权限

Azure Active Directory (Azure AD) 通过 Azure 基于角色的访问控制 (Azure RBAC) 授予对受保护资源的访问权限。 Azure 存储定义了一组内置的 Azure 角色,它们包含用于访问 Blob 和队列数据的通用权限集。 还可以定义自定义角色来访问 Blob 和队列数据。

将 Azure 角色分配到 Azure AD 安全主体后,Azure 会向该安全主体授予对这些资源的访问权限。 可以将访问权限限定于订阅、资源组、存储帐户、单个容器或队列级别。 Azure AD 安全主体可以是用户、组、应用程序服务主体,也可以是 Azure 资源的托管标识

适用于 Blob 和队列的内置 Azure 角色

Azure 提供了以下 Azure 内置角色,用于使用 Azure AD 和 OAuth 授予对 Blob 和队列数据的访问权限:

只有为数据访问明确定义的角色才允许安全主体访问 Blob 或队列数据。 内置角色(例如“所有者”、“参与者”和“存储帐户参与者”)允许安全主体管理存储帐户,但不通过 Azure AD 提供对该帐户内的 blob 或队列数据的访问权限 。 但是,如果角色包括 Microsoft.Storage/storageAccounts/listKeys/action,则分配了该角色的用户可以使用帐户访问密钥通过共享密钥授权来访问存储帐户中的数据。 有关详细信息,请参阅使用 Azure 门户访问 Blob 或队列数据

要详细了解数据服务和管理服务的 Azure 存储的 Azure 内置角色,请参阅 Azure RBAC 的 Azure 内置角色的“存储”部分。 此外,若要了解 Azure 中提供权限的不同类型的角色,请参阅经典订阅管理员角色、Azure 角色和 Azure AD 角色

重要

Azure 角色分配最多需要 30 分钟时间来进行传播。

若要了解如何将内置 Azure 角色分配给安全主体,请参阅以下文章之一:

有关如何为 Azure 存储定义内置角色的详细信息,请参阅了解角色定义。 若要了解如何创建 Azure 自定义角色,请参阅 Azure 自定义角色

数据操作访问权限

有关调用特定 Blob 或队列服务操作所需的权限的详细信息,请参阅用于调用 Blob 和队列数据操作的权限

资源范围

向安全主体分配 Azure RBAC 角色之前,请确定安全主体应具有的访问权限的范围。 最佳做法规定,始终最好只授予最小的可能范围。 在较广范围内中定义的 Azure RBAC 角色由其下的资源继承。

以下列表描述可以限定 Azure blob 和队列资源访问权限范围的等级,从最窄的范围开始:

  • 单个容器。 在此范围内,角色分配将应用于容器中的所有 blob,以及容器属性和元数据。
  • 单个队列。 在此范围内,角色分配将应用于队列中的消息,以及队列属性和元数据。
  • 存储帐户。 在此范围内,角色分配将应用于所有容器及其 blob,或者所有队列及其消息。
  • 资源组。 在此范围内,角色分配适用于资源组中所有存储帐户内的所有容器或队列。
  • 订阅。 在此范围内,角色分配适用于订阅中所有资源组内的所有存储帐户中的所有容器或队列。
  • 管理组。 在此范围内,角色分配将应用于管理组中所有订阅的所有资源组中的所有存储帐户中的所有容器或队列。

有关 Azure 角色分配和范围的详细信息,请参阅什么是 Azure 基于角色的访问控制 (Azure RBAC)?

使用 Azure AD 帐户访问数据

可以使用用户的 Azure AD 帐户或使用帐户访问密钥(共享密钥授权)来授权通过 Azure 门户、PowerShell 或 Azure CLI 访问 Blob 或队列数据。

通过 Azure 门户访问数据

Azure 门户可以使用 Azure AD 帐户或帐户访问密钥来访问 Azure 存储帐户中的 Blob 和队列数据。 Azure 门户使用哪种授权方案取决于分配给你的 Azure 角色。

当你尝试访问 Blob 或队列数据时,Azure 门户首先会检查你是否分配有一个包含“Microsoft.Storage/storageAccounts/listkeys/action”的 Azure 角色。 如果你拥有包含此操作的角色,则 Azure 门户将使用帐户密钥通过共享密钥授权来访问 Blob 和队列数据。 如果你不拥有包含此操作的角色,则 Azure 门户会尝试使用你的 Azure AD 帐户访问数据。

若要使用 Azure AD 帐户通过 Azure 门户访问 Blob 或队列数据,需要拥有访问 Blob 和队列数据的权限,另外还需要拥有在 Azure 门户中浏览存储帐户资源的权限。 Azure 存储提供的内置角色授予对 Blob 和队列资源的访问权限,但不授予对存储帐户资源的权限。 出于此原因,访问门户还需要分配范围为存储帐户或更高级别的 Azure 资源管理器角色,例如读取者角色。 “读取者”角色授予限制性最高的权限,但也接受可授予存储帐户管理资源访问权限的其他 Azure 资源管理器角色。 若要详细了解如何使用 Azure AD 帐户将 Azure 门户中的数据访问的权限分配给用户,请参阅 使用 Azure 门户分配 Azure 角色以访问 blob 和队列数据

当你导航到容器或队列时,Azure 门户会指示当前正在使用哪种授权方案。 有关门户中的数据访问的详细信息,请参阅在 Azure 门户中选择如何授予对 blob 数据的访问权限 ,以及 如何在 Azure 门户中授予对队列数据的访问权限

通过 PowerShell 或 Azure CLI 访问数据

Azure CLI 和 PowerShell 支持使用 Azure AD 凭据登录。 登录后,会话将在这些凭据下运行。 有关详细信息,请参阅使用 Azure AD 凭据运行 Azure CLI 或 PowerShell 命令以访问 Blob 或队列数据

后续步骤