如何防止删除 blob 容器?
How to protect against deletion of a blob container?
创建和删除 blob 数据都很容易。有一些方法可以防止意外数据丢失,例如:
- 防止意外删除存储帐户的资源锁
- Azure RBAC 限制对 account/keys 的访问。
- Soft delete 从意外删除的 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 容器备份实现技巧:
- Azure 数据工厂副本 activity can be configured copy only new files.
- Azcopy sync也可以做增量复制
如果您没有可从中恢复的备份,那么 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.
创建和删除 blob 数据都很容易。有一些方法可以防止意外数据丢失,例如:
- 防止意外删除存储帐户的资源锁
- Azure RBAC 限制对 account/keys 的访问。
- Soft delete 从意外删除的 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 容器备份实现技巧:
- Azure 数据工厂副本 activity can be configured copy only new files.
- Azcopy sync也可以做增量复制
如果您没有可从中恢复的备份,那么 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.