授权访问 Azure 存储中的数据
每次访问存储帐户中的数据时,客户端应用程序都会通过 HTTP/HTTPS 向 Azure 存储发出请求。 默认情况下,Azure 存储中的每个资源都受到保护,并且必须授权对安全资源的每个请求。 授权可确保客户端应用程序具有适当权限来访问存储帐户中的特定资源。
重要
为了获得最佳安全性,Azure 建议尽可能使用具有托管标识的 Microsoft Entra ID 来授权针对 Blob、队列和表数据的请求。 与共享密钥授权相比,使用 Microsoft Entra ID 和托管标识进行授权提供了更高的安全性和易用性。 要详细了解托管标识,请参阅什么是 Azure 资源托管标识。 有关如何为 .NET 应用程序启用和使用托管标识的示例,请参阅使用 .NET 对 Azure 资源的 Azure 托管应用进行身份验证。
对于 Azure 外部托管的资源(例如本地应用程序),可以通过 Azure Arc 使用托管标识。例如,在已启用 Azure Arc 的服务器上运行的应用可以使用托管标识连接到 Azure 服务。 若要了解详细信息,请参阅使用已启用 Azure Arc 的服务器对 Azure 资源进行身份验证。
对于使用共享访问签名 (SAS) 的方案,Azure 建议使用用户委托 SAS。 用户委派 SAS 通过 Microsoft Entra 凭据(而不是帐户密钥)进行保护。 若要了解共享访问签名,请参阅使用共享访问签名授予有限的数据访问权限。 有关如何通过 .NET 创建和使用用户委托 SAS 的示例,请参阅使用 .NET 为 blob 创建用户委托 SAS。
数据操作授权
以下部分介绍每种 Azure 存储服务的授权支持和建议。
下表提供有关 blob 支持的授权选项的信息:
授权选项 | 指南 | 建议 |
---|---|---|
Microsoft Entra ID | 使用 Microsoft Entra ID 授予对 Azure 存储数据的访问权限 | Azure 建议将 Microsoft Entra ID 与托管标识配合使用来授权对 Blob 资源的请求。 |
共享密钥(存储帐户密钥) | 通过共享密钥进行授权 | Azure 建议禁止存储帐户的共享密钥授权。 |
共享访问签名 (SAS) | 使用共享访问签名 (SAS) | 如果需要 SAS 授权,Azure 建议使用用户委派 SAS 来限制对 Blob 资源的委派访问权限。 |
匿名读取访问 | 概述:修正对 blob 数据的匿名读取访问 | Azure 建议对所有存储帐户禁用匿名访问。 |
存储本地用户 | 仅 SFTP 支持。 若要了解详细信息,请参阅授权 SFTP 客户端访问 Blob 存储 | 请参阅有关选项的指南。 |
以下部分简要介绍了 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 条件功能的状态。
Microsoft Entra 域服务身份验证:适用于 Azure 文件存储。 Azure 文件存储支持使用 Microsoft Entra 域服务通过服务器消息块 (SMB) 进行基于标识的授权。 可以使用 Azure RBAC 对客户端对存储帐户中的 Azure 文件存储资源的访问进行精细控制。 有关使用域服务进行 Azure 文件存储身份验证的详细信息,请参阅实现 SMB 访问的 Azure 文件存储基于标识的身份验证选项概述。
本地 Active Directory 域服务(AD DS 或本地 AD DS)身份验证:适用于 Azure 文件存储。 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 结合使用。
保护访问密钥
存储帐户访问密钥提供对存储帐户数据的完全访问权限,以及生成 SAS 令牌的权限。 始终要小心保护访问密钥。 使用 Azure 密钥保管库安全地管理和轮换密钥。 对共享密钥的访问权限授予用户对存储帐户数据的完全访问权限。 应仔细限制和监视对共享密钥的访问。 在无法使用基于 Microsoft Entra ID 的授权的情况下,使用具有有限访问权限的用户委派 SAS 令牌。 避免对访问密钥进行硬编码,或将其以纯文本形式保存在其他人可以访问的任何位置。 如果认为访问密钥可能已被盗用,请轮换密钥。
重要
若要防止用户使用共享密钥访问存储帐户中的数据,可以对存储帐户禁用共享密钥授权。 作为安全最佳做法,建议将对数据的精细访问限制为具有所选的最小特权。 应将使用托管标识的基于 Microsoft Entra ID 的授权用于支持 OAuth 的场景。 应使用 Kerberos 或 SMTP 通过 SMB 用于 Azure 文件存储。 对于通过 REST 进行的 Azure 文件存储,可以使用 SAS 令牌。 如果不需要共享密钥访问权限以防止意外使用,则应禁用共享密钥访问。 有关详细信息,请参阅阻止对 Azure 存储帐户进行共享密钥授权。
若要使用 Microsoft Entra 条件访问策略保护 Azure 存储帐户,必须禁止对存储帐户进行共享密钥授权。
如果你已禁用共享密钥访问,并且诊断日志中报告了共享密钥授权,则表示正在使用受信任的访问来访问存储。 有关更多详细信息,请参阅对 Microsoft Entra 租户中注册的资源的受信任访问。
后续步骤
- 使用 Microsoft Entra ID 授权对 Blob、队列或表资源的访问。
- 通过共享密钥进行授权
- 使用共享访问签名 (SAS) 授予对 Azure 存储资源的有限访问权限