保护 Azure Blob 存储

Azure Blob 存储 在容器中存储大量非结构化对象数据。 它经常成为数据外泄、勒索软件和公众暴露事件的目标。 本文提供了针对 Blob 容器、Blob 和 Azure Data Lake Storage 分层命名空间的安全建议。

Note

本文介绍了Azure Blob 存储特有的安全实践。 关于账户级别的安全指导,请参见“保护您的 Azure 存储 账户”。

网络安全

  • 使用 Azure Front Door 为自定义域名、静态网站以及任何公开提供的 Blob 内容提供前端服务:使用托管证书在 Azure Front Door 终止 TLS 连接,启用 WAF,并限制存储账户的公共网络访问,使得只有 Front Door 可以访问源站。 Azure 存储 自己的自定义域功能不支持托管的 TLS 证书,而 Front Door 增加了 WAF 保护、速率限制和日志功能,而匿名容器访问则缺乏这些功能。 欲了解更多信息,请参见 Use Azure Front Door with Azure 存储 blobs。

  • 未使用时禁用静态网站终结点:启用静态网站功能时,false 容器仍可被公开读取,即使 allowBlobPublicAccess 为 $web。 关闭不需要的账户上的静态网站功能。 有关详细信息,请参阅 Azure 存储 中的静态网站托管。

身份和访问管理

匿名公众访问

  • 禁用存储账户的匿名公开读取权限:将属性false设置为allowBlobPublicAccess,使账户中无论容器级别配置如何,都不能有任何容器是公开的。 有关详细信息,请参阅概述:修正对 blob 数据的匿名读取访问。

  • 审计并整改任何现有的匿名访问:请参阅整改对 Blob 数据的匿名读取访问中的指导,查找允许公共访问的容器,并将其更改为专用访问,或改为基于 SAS 的显式共享。

blob级SAS和ABAC

  • 在blob访问中优先选择用户委派SAS而非服务SAS:用户委派共享访问签名(SAS)通过Microsoft Entra凭证签名。 撤销用户委托密钥会立即使基于该密钥签发的所有 SAS 失效,这为服务 SAS 和帐户 SAS 所不具备的撤销机制提供了实现途径。 有关详细信息,请参阅创建用户委托 SAS。

  • 通过存储访问策略限定服务 SAS 的范围,以实现可撤销性:如果你必须使用服务 SAS,请将其关联到容器上的存储访问策略。 然后你可以修改或删除策略,撤销所有引用它的SAS。 没有策略,服务SAS只能通过轮换账户密钥来撤销,这会影响账户内的其他所有SAS。 有关详细信息,请参阅定义存储的访问策略。

  • 使用blob索引标签通过ABAC进行条件访问:将blob索引标签与基于属性的访问控制(ABAC)条件结合,赋予具有特定标签值的blob仅读访问权限——例如。 Classification=Public 这种方法允许单一角色分配服务多个呼叫者,而无需访问敏感的标记数据。 更多信息请参见 “授权使用 ABAC 条件访问斑点”。

数据保护

  • 使用blob加密范围来隔离特定容器或blob的加密:加密范围允许你在单个账户内以容器级或blob级的粒度应用不同的密钥或密钥轮换策略。 该功能适用于共享账户但需要每个租户密钥控制的多租户工作负载。 更多信息请参见 Blob 存储 的加密范围。

  • 对于那些绝不能以明文形式出现在服务器上的 Blob 数据,请使用客户端加密:在上传前于客户端加密 Blob 内容。 SDK 与 Azure 密钥保管库 集成,以进行密钥管理。 与服务端CMK结合使用,实现分层保护。 更多信息请参见 “blobs客户端加密”。

不可变性与 WORM

  • 为受监管数据配置基于时间的保留策略:应用容器级或版本级的时间级保留,以在固定时间内防止对blob的修改或删除。 版本级别的不可变性提供了更细致的控制,你可以在单个版本上启用或扩展。 有关详细信息,请参阅使用不可变的存储来存储业务关键型 Blob 数据。

  • 使用由法律或调查需要驱动的无限期保留的法律保留:法律保留会阻止删除,直到获得授权的用户明确解除该保留,且没有固定期限。 有关详细信息,请参阅使用不可变的存储来存储业务关键型 Blob 数据。

  • 锁定保留策略使其不可修改:拥有适当权限的用户可以缩短或删除已解锁的保留策略。 锁定保单使得保留期变成单向承诺。 仅在确认保单期限后才进行锁定。 欲了解更多信息,请参见 配置容器的不可变性策略。

对象复制与复制操作

  • 限制对象复制到你控制的源账户:配置目标账户允许的源-账户列表,使只有已知且受信任的源账户能推送数据。 有关详细信息,请参阅 “配置对象复制”。

  • 防止跨租户对象复制:禁止其源账户和目的账户分别存在于不同 Microsoft Entra 租户中的复制策略。 这一限制阻止授权用户向外部租户配置复制。 有关详细信息,请参阅防止 Microsoft Entra 租户间的对象复制。

  • 限制允许的复制操作范围:配置账户仅允许同一租户或同一订阅内的源账户进行复制操作。 这种配置阻止了一条常见的泄露路径——从私人账户复制到攻击者控制的账户。 欲了解更多信息,请参见 “允许的复制操作范围”。

备份和恢复

  • 启用 blob 版本管理以保留写入和删除时的旧版本:启用版本控制后,每次写入或删除操作都会创建一个新版本,并保持之前的状态。 你可以寻址并恢复版本。 有关详细信息,请参阅 Blob 版本控制。

  • 启用软删除(软删除)用于blob和容器:软删除会保留已删除的blob和容器一段固定期限,这样你可以在这段时间内恢复它们。 分别设置容器级和blob级软删除,并启用两者。 更多信息请参见 针对blob的软删除 和 容器的软删除。

  • 为块 Blob 帐户启用时间点还原:时间点还原与版本控制和软删除配合使用,可将一定范围内的块 Blob 还原到特定的过去时间戳。 此功能对勒索软件恢复非常有帮助。 点点恢复需要启用版本控制、blob软删除和更改订阅源。 有关详细信息,请参阅块 Blob 的时间点还原。

  • 启用用于审核和取证的更改源:更改源是一个按顺序排列且不可更改的日志,用于记录帐户中 Blob 的每项更改。 除了实现时间点恢复外,它还为调查提供了可持久保存的审计记录。 有关详细信息,请参阅 Azure Blob 存储中的变更馈送支持。

Azure Data Lake Storage

Data Lake Storage 为 Blob 存储 添加了层级命名空间和类似 POSIX 的访问控制列表(ACL)。 ACL 与 RBAC 配合使用——通过 RBAC 授予粗粒度访问权限,再通过 ACL 在文件系统内进行细化。

  • 使用RBAC进行粗粒度访问,使用ACL进行细粒度访问:在容器或账户层面分配内置的blob RBAC角色,以授予广泛访问权限。 然后,在目录和文件上使用ACL限制容器内的访问。 不要仅用ACL来获取用户在整个容器中所需的权限。 RBAC在评估和审计方面更为高效。 有关详细信息,请参阅 Azure Data Lake Storage 中的访问控制模型。

  • 对目录应用默认ACL以继承新子项的权限:默认ACL适用于设置ACL后创建的文件和目录。 在目录层设置它们,以避免管理单个文件的ACL。 欲了解更多信息,请参见 Azure Data Lake Storage 中的访问控制列表。

  • 在创建账户时启用分层命名空间:你无法在现有账户上启用分层命名空间,除非迁移。 如果你知道某个工作负载使用 Data Lake Storage 语义,建议一开始就启用它,而不是事后迁移。 欲了解更多信息,请参见 Azure Data Lake Storage 层级命名空间。

日志记录和监控

  • 禁用匿名访问后针对匿名访问命中发出警报:当你将 allowBlobPublicAccess 设置为 false 时,筛选存储日志中的 AuthenticationType == "Anonymous",并对任何命中发出警报。 这些命中要么表明客户端配置错误,要么是探测尝试。 有关详细信息,请参阅监视 Azure 存储。

  • 追踪斑点索引标签的变异以实现分类漂移:如果你用斑点索引标签来驱动ABAC访问条件,这些标签的变化会直接改变谁可以读取斑点。 记录并对SetBlobTags针对敏感容器执行的操作发出警报。 欲了解更多信息,请参见“管理并查找带有blob索引标签的Azure Blob 存储数据。

后续步骤