防止意外删除虚拟机

本文档介绍了如何通过在实例资源上设置 deletionProtection 属性来保护特定虚拟机实例免遭删除。要详细了解虚拟机实例,请参阅实例文档。

作为工作负载的一部分,可能存在某些对于运行应用或服务至关重要的虚拟机实例,例如运行 SQL Server 的实例、用作许可证管理器的服务器等。这些虚拟机实例可能需要无限期地保持运行,因此需要一种方法来保护这些虚拟机免遭删除。

通过设置 deletionProtection 标志,可以保护虚拟机实例免遭意外删除。如果用户尝试删除您已为其设置 deletionProtection 标志的虚拟机实例,则请求会失败。只有已被授予具有 compute.instances.create 权限的角色的用户才能重置该标志以允许删除资源。

准备工作

规范

  • 删除保护不会阻止以下操作:

  • 删除保护可以应用于常规虚拟机和抢占式虚拟机。

  • 删除保护不能应用于属于托管实例组的虚拟机,但可以应用于属于非托管实例组的实例。

  • 不能在实例模板中指定删除保护。

权限

要执行此任务,您必须已被授予资源的以下权限以下某个 IAM 角色

权限

  • compute.instances.create

角色

  • compute.admin
  • compute.instanceAdmin.v1

在实例创建期间设置删除保护

默认情况下,实例会停用删除保护。可使用以下说明启用删除保护。

Console

  1. 转到“虚拟机实例”页面。

    转到“虚拟机实例”页面

  2. 如果出现提示,请选择您的项目并点击继续
  3. 点击创建实例按钮。
  4. 展开管理、安全、磁盘、网络、单独租用部分。
  5. 管理下,勾选启用删除保护复选框。

    虚拟机删除复选框的屏幕截图

  6. 继续虚拟机创建过程。

gcloud

创建虚拟机实例时,请添加 --deletion-protectionno-deletion-protection 标志。默认情况下,删除保护处于停用状态,因此,要启用删除保护,请执行以下命令:

gcloud compute instances create [INSTANCE_NAME] --deletion-protection

其中 [INSTANCE_NAME] 是所需实例的名称。

要在创建期间停用删除保护,请执行以下命令:

gcloud compute instances create [INSTANCE_NAME] --no-deletion-protection

API

使用 API 创建虚拟机实例时,在请求正文中添加 deletionProtection 属性。例如:

POST https://www.googleapis.com/v1/compute/projects/[PROJECT_ID]/zones/[ZONE]/instances

{
  "name": "[INSTANCE_NAME]",
  "deletionProtection": "true",
  ...
}

要停用删除保护,请将 deletionProtection 设置为 false

切换现有实例的删除保护

无论实例的当前状态如何,您都可以切换现有实例的删除保护。具体而言,您不必在启用或停用删除保护之前停止实例。

Console

  1. 转到“虚拟机实例”页面。

    转到“虚拟机实例”页面

  2. 如果出现提示,请选择您的项目并点击继续
  3. 点击要切换删除保护的实例的名称。此时将显示实例详细信息页面。
  4. 在实例详细信息页面中,完成以下步骤:

    1. 点击页面顶部的修改按钮。
    2. 删除保护下,勾选复选框以启用删除保护,或取消勾选该框以停用删除保护。

      虚拟机删除复选框的屏幕截图

    3. 保存更改。

gcloud

使用 gcloud 工具运行带有 --deletion-protection--no-deletion-protection 标志的 update 命令:

gcloud compute instances update [INSTANCE_NAME] \
    [--deletion-protection | --no-deletion-protection]

例如,要为名为 example-vm 的实例启用删除保护,请执行以下命令:

gcloud compute instances update example-vm --deletion-protection

API

在 API 中,使用 delectionProtection 查询参数向 setDeletionProtection 方法发出 POST 请求。例如:

POST https://www.googleapis.com/v1/compute/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/setDeletionProtection?deletionProtection=true

要停用删除保护,请将 deletionProtection 设置为 false。请勿提供带有请求的请求正文。

确定实例是否启用了删除保护

您可以在 gcloud tool 或 API 中确定实例是否启用了删除保护。

Console

  1. 转到“虚拟机实例”页面。

    转到“虚拟机实例”页面

  2. 如果出现提示,请选择您的项目并点击继续
  3. 虚拟机实例页面上,将菜单往下拉并启用删除保护

    虚拟机删除选项的屏幕截图

  4. 随即出现一个带有删除保护图标的新列。如果虚拟机启用了删除保护,则此图标将显示在实例名称旁边。

gcloud

gcloud 工具中,运行 instances describe 命令并搜索删除保护字段。例如:

gcloud compute instances describe example-instance | grep "deletionProtection"

该工具将返回设置为 truefalsedeletionProtection 属性的值:

deletionProtection: false

API

在 API 中,发出 GET 请求并查找 deletionProtection 字段:

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine 文档