使用资源锁来保护资源

已完成

在最近的一次谈话中,你的经理提到曾经存在错误删除关键 Azure 资源的情况。 由于他们的 Azure 环境中存在混乱,因此以清理不必要资源为目的的善意尝试导致了意外删除其他系统的重要资源。 你听说过 Azure 上的资源锁。 你向经理提到,你认为自己可以帮助防止这类事件在未来发生。 我们来看看如何使用资源锁来解决这个问题。

什么是资源锁?

资源锁是一种可应用于任何资源以阻止修改或删除的设置。 可以将资源锁设置为“删除”或“只读”。 “删除”允许对资源执行所有操作,但会阻止删除资源。 “只读”只允许对资源执行读取活动,阻止对资源进行任何修改或删除。 可以将资源锁应用于订阅、资源组和单个资源。 资源锁在更高级别上应用时可继承。

注意

应用“只读”可能会导致意外结果,因为某些看起来像读取操作的操作实际上需要执行其他操作。 例如,在存储帐户上置放“只读”锁会阻止所有用户列出密钥。 “列出密钥”操作通过 POST 请求进行处理,因为返回的密钥可用于写入操作。

如果应用了资源锁,必须先删除锁才能执行该活动。 通过在允许对资源执行操作之前执行额外的步骤,有助于保护资源免受意外操作的影响,并有助于防止管理员执行他们可能无意执行的操作。 无论 RBAC 权限如何,资源锁都适用。 即使你是资源的所有者,也必须先移除锁,才能执行受阻止的活动。

让我们看一看实际的资源锁工作原理。

创建资源锁

回想一下“msftlearn-core-infrastructure-rg”资源组。 现在,其中有两个虚拟网络和一个存储帐户。 你认为这些资源是 Azure 环境的关键部分,并希望确保不会错误地删除它们。 若要防止删除资源组及其包含的资源,请向资源组应用资源锁。

  1. 如果尚未应用,请导航到 Azure 门户。 在顶部导航栏的搜索框中,搜索“msftlearn-core-infrastructure-rg”,然后选择“资源组”。

  2. 在左侧菜单的“设置”部分中,选择“锁”。 应看到资源当前没有锁。 需要添加一个锁。

  3. 选择“+ 添加”。 将锁命名为“BlockDeletion”,然后选择“删除”作为“锁类型”。 选择“确定”

    Screenshot of Azure portal showing a new delete resource lock being configured.

    现在已将锁应用于资源组,该锁会阻止删除组。 此锁由资源组中的所有资源继承。 请尝试删除其中某个虚拟网络,看看会发生什么情况。

  4. 返回到“概述”,然后选择“msftlearn-vnet1”。

  5. 在 msftlearn-vnet1 的“概述”窗格顶部,选择“删除”。 你将收到一条错误消息,指示资源上的锁阻止了删除。

  6. 在左侧菜单的“设置”部分中,选择“锁”。 “msftlearn-vnet1”具有从资源组继承的锁。

  7. 返回到“msftlearn-core-infrastructure-rg”资源组,然后转到“锁”。 需要删除锁,以便清理。 选择“BlockDeletion”锁上的“删除”。

在实践中使用资源锁

你已了解资源锁如何防止意外删除。 若要删除虚拟网络,需要删除该锁。 这种协调一致的操作有助于确保你确实打算删除或修改相关资源。

使用资源锁来保护那些一旦被删除或修改会产生很大影响的 Azure 的关键部分。 例如,ExpressRoute 线路和虚拟网络、关键数据库和域控制器。 评估资源,并在希望获得额外保护措施以防止意外操作的位置应用锁。

清理资源

让我们清理所创建的资源。 你需要删除创建的资源组,以及策略分配和策略定义。

  1. 在 Web 浏览器中转到 Azure 门户

  2. 在顶部菜单栏的搜索框中,搜索“msftlearn-core-infrastructure-rg”,然后选择该资源组。

  3. 在“概述”窗格中,选择“删除资源组”。 输入“msftlearn-core-infrastructure-rg”资源组名称进行确认,然后选择“删除”。 再次选择“删除”以确认删除。

    注意

    由于你删除了分配的资源以及包含这些资源的资源组,因此该策略中将没有任何分配。 通常,如果将策略分配给某项资源,可在不删除此处的基本资源的情况下删除该分配。 为此,需要选择“分配”,为你的分配选择省略号 (...),然后选择“删除分配”。

  4. 在搜索框中,搜索“策略”并选择“策略”服务。

  5. 选择“定义”,然后搜索你创建的策略:“在资源上强制执行标记”。

  6. 为你的定义选择 ...,然后选择“删除定义”。 选择“是”确认删除。