如何防止删除 blob 容器?

How to protect against deletion of a blob container?

创建和删除 blob 数据都很容易。有一些方法可以防止意外数据丢失,例如:

这已经是一个不错的包了,但是感觉还差了点link。据我所知,blob 容器缺乏 account/blobs 的安全性。

考虑到容器是用于 blob 枚举和批量删除的良好单元,这很糟糕。

如何防止 accidental/malicious 容器被删除并降低数据丢失的风险?

我考虑过的..

想法1:将所有数据同步副本到另一个存储帐户-但这会带来同步复杂性(增量副本?)和显着的成本增加。

想法 2: 锁定密钥并强制每个人都在仔细确定范围内的 SAS 密钥上工作,但对于数十个 SAS 令牌及其续订来说,这会带来很多麻烦,+ 有时容器删除实际上是需要和授权的。感觉复杂到足以打破。无论如何,我更喜欢安全。

想法三: 以某种方式撤消删除? 根据Delete Container documentation,容器数据没有立即消失:

The Delete Container operation marks the specified container for deletion. The container and any blobs contained within it are later deleted during garbage collection.

不过,没有关于 when/how 存储帐户垃圾收集工作或 if/how/for 容器数据可以恢复多长时间的信息。

还有什么更好的选择吗?

还有一个替代选项,您应该考虑使用为容器提供的访问策略。您可以使用 SAS 进行访问,并使用为您提供容器级策略的访问策略添加附加层。在那里你可以提供不包括删除选项的访问:

这更多是为了预防

Rbac 也是保护容器访问的好方法。

关于从数据丢失中恢复这些是官方建议:

块 blob。 创建每个块 blob 的时间点快照。有关详细信息,请参阅创建 Blob 的快照。对于每个快照,您只需为存储自上次快照状态以来 blob 内的差异所需的存储空间付费。快照依赖于它们所基于的原始 blob 的存在,因此建议对另一个 blob 甚至另一个存储帐户进行复制操作。这可确保备份数据得到适当保护,防止意外删除。您可以使用 AzCopy 或 Azure PowerShell 将 blob 复制到另一个存储帐户。

文件。使用共享快照,或使用 AzCopy 或 PowerShell 将文件复制到另一个存储帐户。

Tables. 使用 AzCopy 将 table 数据导出到另一个区域的另一个存储帐户中。 更多可以找到here

更新:

这类似于 Blob 级保护,允许从意外删除中恢复。作为要采取的额外措施,下面的原始答案仍然适用。


没有单一的灵丹妙药.. 回顾一下可以做什么:

预防措施

  • DO 应用存储帐户级别保护(资源锁定)。
  • DO 限制 account/container 删除仅对真正需要它的呼叫者的访问权限。
  • DO 将容器标记为 Leased for infinity.

尽可能将托管服务标识与 RBAC 结合使用 - 或 - 使用 SAS(和访问策略)以有限权限委派访问权限。这减少了首先可能发生 accidental/malicious 删除的参与者和场景。

租约不会阻止恶意删除,但会更清楚地声明“请勿删除”的意图,并且需要额外的步骤来删除租约,就像附加一层“你确定吗?”-问题。

恢复措施

据我所知,当整个容器已被删除时,不存在内置恢复工具。

  • DO实施灾难恢复的定期备份解决方案。
  • 如果您没有自己的备份,请考虑 立即联系 Azure 支持。

与所有备份解决方案一样,离线备份到不同安全上下文的位置 and/or 以避免在同一事件中丢失备份。一些 blob 容器备份实现技巧:

如果您没有可从中恢复的备份,那么 MS 仍然可以恢复该容器(如果您足够幸运且速度足够快)。根据 Delete Container documentation 容器数据不会立即消失:

The Delete Container operation marks the specified container for deletion. The container and any blobs contained within it are later deleted during garbage collection.