授权访问 Azure 存储中的数据

每次访问存储帐户中的数据时,客户端应用程序都会通过 HTTP/HTTPS 向 Azure 存储发出请求。 默认情况下,Azure 存储中的每个资源都受到保护,并且必须授权对安全资源的每个请求。 授权可确保客户端应用程序具有适当权限来访问存储帐户中的特定资源。

了解数据操作授权

下表介绍了 Azure 存储为授权数据访问权限而提供的选项:

Azure 项目 共享密钥(存储帐户密钥) 共享访问签名 (SAS) Microsoft Entra ID 本地 Active Directory 域服务 匿名读取访问 存储本地用户
Azure Blob 支持 支持 支持 不支持 支持,但不建议这样做 支持,仅适用于 SFTP
Azure 文件存储 (SMB) 支持 不支持 支持,但仅限于仅限云的 Microsoft Entra 域服务或适用于混合标识的 Microsoft Entra Kerberos 支持,但凭据必须同步到 Microsoft Entra ID 不支持 不支持
Azure 文件存储 (REST) 支持 支持 支持 不支持 不支持 不支持
Azure 队列 支持 支持 支持 不支持 不支持 不支持
Azure 表 支持 支持 支持 不支持 不支持 不支持

下面简要介绍每个授权选项:

  • 用于 blob、文件、队列和表的共享密钥授权。 使用共享密钥的客户端会随使用存储帐户访问密钥签名的每个请求传递一个标头。 有关详细信息,请参阅通过共享密钥进行授权

    Azure 建议禁止对存储帐户进行共享密钥授权。 禁止共享密钥授权时,客户端必须使用 Microsoft Entra ID 或用户委派 SAS 来为针对该存储帐户中的数据的请求授权。 有关详细信息,请参阅阻止对 Azure 存储帐户进行共享密钥授权

  • 用于 blob、文件、队列和表的共享访问签名。 共享访问签名 (SAS) 通过签名 URL 提供对存储帐户中的资源的有限委托访问权限。 签名 URL 指定授予资源的权限以及签名的有效期。 服务 SAS 或帐户 SAS 使用帐户密钥进行签名,而用户委派 SAS 使用 Microsoft Entra 凭据进行签名,并且仅适用于 Blob。 有关详细信息,请参阅使用共享访问签名 (SAS)

  • Microsoft Entra 集成,用于授权对 Blob、队列和表资源的请求。 Azure 建议尽可能使用 Microsoft Entra 凭据来授权数据请求,以获得最佳安全性和易用性。 有关 Microsoft Entra 集成的详细信息,请参阅有关 Blob队列资源的文章。

    可以使用 Azure 基于角色的访问控制 (Azure RBAC) 来管理安全主体对存储帐户中的 Blob、队列和表资源的权限。 还可以使用 Azure 基于属性的访问控制 (ABAC) 为 Blob 资源的 Azure 角色分配添加条件。

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

    有关 ABAC 及其功能状态的详细信息,请参阅:

    什么是 Azure 基于属性的访问控制 (Azure ABAC)?

    ABAC 条件功能的状态

    Azure 存储中的 ABAC 条件功能的状态

  • 针对 Azure 文件存储的 Microsoft Entra 域服务身份验证。 Azure 文件存储支持使用 Microsoft Entra 域服务通过服务器消息块 (SMB) 进行基于标识的授权。 可以使用 Azure RBAC 对客户端对存储帐户中的 Azure 文件存储资源的访问进行精细控制。 有关使用域服务进行 Azure 文件存储身份验证的详细信息,请参阅概述

  • Azure 文件存储的本地 Active Directory 域服务(AD DS 或本地 AD DS)身份验证。 Azure 文件支持通过 AD DS 使用 SMB 进行基于标识的授权。 AD DS 环境可以托管在本地计算机中,也可以托管在 Azure VM 中。 支持使用 AD DS 凭据从加入域的计算机在本地或 Azure 中对文件存储的 SMB 访问。 可以将 Azure RBAC 用于共享级访问控制,并将 NTFS DACL 用于目录/文件级权限执行。 有关使用域服务进行 Azure 文件存储身份验证的详细信息,请参阅概述

  • 支持 blob 数据的匿名读取访问,但不建议这样做。 配置匿名访问后,客户端无需授权即可读取 Blob 数据。 建议对所有存储帐户禁用匿名访问。 有关详细信息,请参阅概述:修正对 blob 数据的匿名读取访问

  • 存储本地用户可用于通过 SFTP 访问 blob 或通过 SMB 访问文件。 存储本地用户支持容器级别权限进行授权。 请参阅使用 SSH 文件传输协议 (SFTP) 连接到 Azure Blob 存储,详细了解如何将存储本地用户与 SFTP 结合使用。

保护访问密钥

存储帐户访问密钥提供对存储帐户配置以及数据的完全访问权限。 始终要小心保护访问密钥。 使用 Azure 密钥保管库安全地管理和轮换密钥。 通过获取共享密钥,用户可以获得对存储账户配置及其数据的完全访问权限。 应仔细限制和监视对共享密钥的访问。 在无法使用基于 Microsoft Entra ID 的授权的情况下,使用具有有限访问权限的 SAS 令牌。 避免对访问密钥进行硬编码,或将其以纯文本形式保存在其他人可以访问的任何位置。 如果认为访问密钥可能已被盗用,请轮换密钥。

重要

Azure 建议使用 Microsoft Entra ID 而不是使用帐户密钥(共享密钥授权)来为针对 Blob、队列和表数据的请求授权。 与共享密钥授权相比,使用 Microsoft Entra ID 进行授权提供了更高的安全性和易用性。 要详细了解如何从应用程序使用 Microsoft Entra 授权,请参阅如何使用 Azure 服务对 .NET 应用程序进行身份验证。 对于 SMB Azure 文件共享,Azure 建议使用本地 Active Directory 域服务 (AD DS) 集成或 Microsoft Entra Kerberos 身份验证。

若要防止用户使用共享密钥访问存储帐户中的数据,可以对存储帐户禁用共享密钥授权。 作为安全最佳做法,建议将对数据的精细访问限制为具有所选的最小特权。 应将基于 Microsoft Entra ID 的授权用于支持 OAuth 的方案。 应使用 Kerberos 或 SMTP 通过 SMB 用于 Azure 文件存储。 对于通过 REST 进行的 Azure 文件存储,可以使用 SAS 令牌。 如果不需要共享密钥访问权限以防止意外使用,则应禁用共享密钥访问。 有关详细信息,请参阅阻止对 Azure 存储帐户进行共享密钥授权

若要使用 Microsoft Entra 条件访问策略保护 Azure 存储帐户,必须禁止对存储帐户进行共享密钥授权。

如果你已禁用共享密钥访问,并且诊断日志中报告了共享密钥授权,则表示正在使用受信任的访问来访问存储。 有关更多信息,请参阅对订阅中注册的资源的受信任访问

后续步骤