

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为您的 Amazon EC2 Auto Scaling 资源配置删除保护
<a name="resource-deletion-protection"></a>

 通过配置多层保护，保护您的 Amazon EC2 Auto Scaling 基础设施免遭意外删除。Auto Scaling 提供了多种方法来防止您的 Auto Scaling 群组及其管理的 Amazon EC2 实例删除不必要的资源。

**Topics**
+ [配置 Auto Scaling 群组删除保护](#asg-deletion-protection)
+ [使用 IAM 策略控制删除权限](#deletion-protection-iam-policies)

## 配置 Auto Scaling 群组删除保护
<a name="asg-deletion-protection"></a>

 删除保护是一种资源级设置，可防止您的 Amazon EC2 Auto Scaling 组被意外删除。启用删除保护后，会阻止 [ DeleteAutoScalingGroup](https://docs.amazonaws.cn/autoscaling/ec2/APIReference/API_DeleteAutoScalingGroup.html)API 操作成功，要求您先将删除保护设置更新到限制较少的级别，然后才能删除 Auto Scaling 组。

Amazon EC2 Auto Scaling 提供三个级别的删除保护：

**无**（默认）  
 未启用删除保护，这意味着无论是否使用该`ForceDelete`选项，都可以删除您的 Auto Scaling 组。使用时，由您`ForceDelete`的 Auto Scaling 组管理的所有 Amazon EC2 实例也将被强制终止，而不执行终止生命周期挂钩。

**防止强制删除**  
 使用该`ForceDelete`选项时，无法删除您的 Auto Scaling 群组。此配置允许删除空的 Auto Scaling 组（没有实例的组）。对于希望防止大规模实例终止但允许清理空组的生产工作负载，建议使用此选项。

**阻止所有删除**  
 无论是否使用该`ForceDelete`选项，都无法删除您的 Auto Scaling 群组。此选项为防止意外删除提供了最强的保护。在删除您的 Auto Scaling 组之前，需要明确禁用删除保护。对于很少或永远不应该删除的任务关键型 Auto Scaling 组，建议使用此选项。

### 删除保护的工作原理
<a name="deletion-protection-how-it-works"></a>

 当你在启用删除保护的情况下尝试 [ DeleteAutoScalingGroup](https://docs.amazonaws.cn/autoscaling/ec2/APIReference/API_DeleteAutoScalingGroup.html)API 操作时：

1.  Amazon EC2 Auto Scaling 会在处理请求之前验证删除保护设置。

1.  如果配置的删除保护级别阻止了删除尝试，则 Amazon EC2 Auto Scaling 会返回`ValidationError`。

1.  您的 Auto Scaling 组及其 Amazon EC2 实例保持不变。

1.  必须先将删除保护设置更新到限制较少的级别，然后才能删除 Auto Scaling 组。

 删除保护不会阻止其他操作，例如：
+  更新 Auto Scaling 组配置。
+  终止单个实例。
+  缩放操作（手动或自动）。
+  暂停或恢复进程。

 有关如何优雅地处理实例终止的更多信息，请参阅[设计您的应用程序以妥善处理实例终止](gracefully-handle-instance-termination.md)。

### 配置删除保护
<a name="configure-deletion-protection"></a>

 在创建 Auto Scaling 组或更新现有 Auto Scaling 组的设置时，可以设置删除保护。

------
#### [ Console ]

**创建具有删除保护的 Auto Scaling 组**

1. 在上打开 Amazon EC2 控制台 [https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)，然后从导航窗格中选择 A **uto Scaling Gro** ups。

1. 选择 **Create Auto Scaling group**（创建 Auto Scaling 组）。

1. 完成您的 Auto Scaling 组的配置步骤。

1. 在**配置群组大小和缩放比例**页面上，展开**其他设置**。

1. 对于 **Auto Scaling 组删除保护**，请选择所需的保护级别：
   + **无**-无删除保护（默认）
   + **防止强制删除**-阻止强制删除操作
   + **阻止所有删除**-阻止所有删除操作

1. 完成其余步骤以创建您的 Auto Scaling 组。

**更新现有 Auto Scaling 组的删除保护**

1. 在上打开 Amazon EC2 控制台 [https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)，然后从导航窗格中选择 A **uto Scaling Gro** ups。

1. 选中您的自动扩缩组旁边的复选框。

1. 选择 **Actions**（操作）和 **Edit**（编辑）。

1. 在 **“其他设置”** 下，更新 **Auto Scaling 组删除保护**设置。

1. 选择**更新**。

------
#### [ Amazon CLI ]

**创建具有删除保护的 Auto Scaling 组**  
将 [create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html) 命令与 `--deletion-protection` 参数一起使用：

```
aws autoscaling create-auto-scaling-group \
    --auto-scaling-group-name {{my-asg}} \
    --launch-template LaunchTemplateName={{my-template}},Version='$Latest' \
    --min-size {{1}} \
    --max-size {{5}} \
    --desired-capacity {{2}} \
    --vpc-zone-identifier "{{subnet-12345678,subnet-87654321}}" \
    --deletion-protection {{prevent-force-deletion}}
```

的有效值`--deletion-protection`为：`none`\| `prevent-force-deletion` \| `prevent-all-deletion`

**更新现有 Auto Scaling 组的删除保护**  
使用 [update-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/update-auto-scaling-group.html) 命令：

```
aws autoscaling update-auto-scaling-group \
    --auto-scaling-group-name {{my-asg}} \
    --deletion-protection {{prevent-all-deletion}}
```

**禁用删除保护**  
将删除保护设置为`none`：

```
aws autoscaling update-auto-scaling-group \
    --auto-scaling-group-name {{my-asg}} \
    --deletion-protection {{none}}
```

**验证删除保护状态**  
使用 [describe-auto-scaling-groups](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-groups.html) 命令：

```
aws autoscaling describe-auto-scaling-groups \
    --auto-scaling-group-names {{my-asg}}
```

------

## 使用 IAM 策略控制删除权限
<a name="deletion-protection-iam-policies"></a>

 使用 Amazon Identity and Access Management (IAM) 策略控制哪些用户和角色可以删除 Auto Scaling 群组。基于 IAM 的控件通过限制身份级别的权限来提供额外的安全保护。

当您想执行以下操作时，IAM 策略特别有用：
+  允许不同的用户对不同级别的 Auto Scaling 操作进行访问。
+  阻止特定用户使用该`ForceDelete`选项，即使他们可以执行其他 Auto Scaling 操作。
+  将删除权限限制为特定的 Auto Scaling 群组。

 以下策略仅允许在自动扩缩组具有标签时删除该组`environment=development`。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": "autoscaling:DeleteAutoScalingGroup",
      "Resource": "*",
      "Condition": {
          "StringEquals": { "aws:ResourceTag/{{environment}}": "{{development}}" }
      }
   }]
}
```

------

 以下策略使用`autoscaling:ForceDelete`条件密钥来控制对 `DeleteAutoScalingGroup` API 操作的访问权限。这可能会阻止某些用户使用该`ForceDelete`操作，该操作会终止 Auto Scaling 组中的所有 Amazon EC2 实例。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Effect": "Deny",
        "Action": "autoscaling:DeleteAutoScalingGroup",
        "Resource": "*",
        "Condition": {
            "Bool": {
                "autoscaling:ForceDelete": "true"
            }
        }
    }]
}
```

------

 或者，如果您不使用条件键来控制对 Auto Scaling 组 ARNs 的访问，则可以改为指定`Resource`元素中的资源来控制访问权限。

 以下策略向用户授予使用 `DeleteAutoScalingGroup` API 操作的权限，但仅适用于名称以开头的 Auto Scaling 群组`devteam-`。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "autoscaling:DeleteAutoScalingGroup",
            "Resource": "arn:aws:autoscaling:{{us-east-1}}:{{111122223333}}:autoScalingGroup:*:autoScalingGroupName/{{devteam-}}*"
        }
    ]
}
```

------

 您也可以 ARNs 通过将它们包含在列表中来指定多个。包括 UUID 可确保将访问权授予特定的 Auto Scaling 组。新群组的 UUID 与已删除的同名群组的 UUID 不同。

```
"Resource": [
    "arn:aws:autoscaling:{{region}}:{{account-id}}:autoScalingGroup:{{uuid}}:autoScalingGroupName/{{devteam-1}}",
    "arn:aws:autoscaling:{{region}}:{{account-id}}:autoScalingGroup:{{uuid}}:autoScalingGroupName/{{devteam-2}}",
    "arn:aws:autoscaling:{{region}}:{{account-id}}:autoScalingGroup:{{uuid}}:autoScalingGroupName/{{devteam-3}}"
]
```

 有关 Amazon EC2 Auto Scaling 的 IAM 策略的其他示例，包括控制删除权限的策略，请参阅[基于身份的策略示例](security_iam_id-based-policy-examples.md)。