

# 缓解操作
<a name="dd-mitigation-actions"></a>

您可以使用 AWS IoT Device Defender 以采取操作缓解 Audit 查找结果或 Detect 告警中发现的问题。

**注意**  
不会对被隐藏的审计查找结果执行缓解操作。有关审计查找结果隐藏的更多信息，请参阅 [审计查找结果隐藏](audit-finding-suppressions.md)。

## 审计缓解操作
<a name="dd-audit-mitigation-actions"></a>

AWS IoT Device Defender 为不同的审计检查提供了预定义的操作。您可以为您的AWS 账户配置这些操作，然后将其应用于一组查找结果。这些结果可以是：
+ 审核中发现的所有结果。此选项可通过 AWS IoT 控制台和 AWS CLI 来使用。
+ 各个结果的列表。此选项仅在使用 AWS CLI 的情况下可用。
+ 筛选的审核结果集。

下表列出了针对每种情况的审核检查类型和支持的缓解操作：


**审核检查到缓解操作映射**  

| 审核检查 | 支持的缓解操作 | 
| --- | --- | 
| REVOKED\$1CA\$1CERT\$1CHECK | PUBLISH\$1FINDING\$1TO\$1SNS、UPDATE\$1CA\$1CERTIFICATE | 
| INTERMEDIATE\$1CA\$1REVOKED\$1FOR\$1ACTIVE\$1DEVICE\$1CERTIFICATES\$1CHECK | PUBLISH\$1FINDING\$1TO\$1SNS、UPDATE\$1DEVICE\$1CERTIFICATE、ADD\$1THINGS\$1TO\$1THING\$1GROUP | 
| DEVICE\$1CERTIFICATE\$1SHARED\$1CHECK | PUBLISH\$1FINDING\$1TO\$1SNS、UPDATE\$1DEVICE\$1CERTIFICATE、ADD\$1THINGS\$1TO\$1THING\$1GROUP | 
| UNAUTHENTICATED\$1COGNITO\$1ROLE\$1OVERLY\$1PERMISSIVE\$1CHECK | PUBLISH\$1FINDING\$1TO\$1SNS | 
| AUTHENTICATED\$1COGNITO\$1ROLE\$1OVERLY\$1PERMISSIVE\$1CHECK | PUBLISH\$1FINDING\$1TO\$1SNS | 
| IOT\$1POLICY\$1OVERLY\$1PERMISSIVE\$1CHECK | PUBLISH\$1FINDING\$1TO\$1SNS、REPLACE\$1DEFAULT\$1POLICY\$1VERSION | 
| IOT\$1POLICY\$1POTENTIAL\$1MISCONFIGURATION\$1CHECK | PUBLISH\$1FINDING\$1TO\$1SNS、REPLACE\$1DEFAULT\$1POLICY\$1VERSION | 
| CA\$1CERTIFICATE\$1EXPIRING\$1CHECK | PUBLISH\$1FINDING\$1TO\$1SNS、UPDATE\$1CA\$1CERTIFICATE | 
| CONFLICTING\$1CLIENT\$1IDS\$1CHECK | PUBLISH\$1FINDING\$1TO\$1SNS | 
| DEVICE\$1CERTIFICATE\$1EXPIRING\$1CHECK | PUBLISH\$1FINDING\$1TO\$1SNS、UPDATE\$1DEVICE\$1CERTIFICATE、ADD\$1THINGS\$1TO\$1THING\$1GROUP | 
| REVOKED\$1DEVICE\$1CERTIFICATE\$1STILL\$1ACTIVE\$1CHECK | PUBLISH\$1FINDING\$1TO\$1SNS、UPDATE\$1DEVICE\$1CERTIFICATE、ADD\$1THINGS\$1TO\$1THING\$1GROUP | 
| LOGGING\$1DISABLED\$1CHECK | PUBLISH\$1FINDING\$1TO\$1SNS、ENABLE\$1IOT\$1LOGGING | 
| DEVICE\$1CERTIFICATE\$1KEY\$1QUALITY\$1CHECK | PUBLISH\$1FINDING\$1TO\$1SNS、UPDATE\$1DEVICE\$1CERTIFICATE、ADD\$1THINGS\$1TO\$1THING\$1GROUP | 
| CA\$1CERTIFICATE\$1KEY\$1QUALITY\$1CHECK | PUBLISH\$1FINDING\$1TO\$1SNS、UPDATE\$1CA\$1CERTIFICATE | 
| IOT\$1ROLE\$1ALIAS\$1OVERLY\$1PERMISSIVE\$1CHECK | PUBLISH\$1FINDING\$1TO\$1SNS | 
| IOT\$1ROLE\$1ALIAS\$1ALLOWS\$1ACCESS\$1TO\$1UNUSED\$1SERVICES\$1CHECK | PUBLISH\$1FINDING\$1TO\$1SNS | 

所有审计检查都支持向 Amazon SNS 发布审计查找结果，以便您可以采取自定义操作来响应通知。每种类型的审核检查可以支持其它缓解操作：

**REVOKED\$1CA\$1CERT\$1CHECK**  
+ 在 AWS IoT 中更改证书的状态以将其标记为非活动状态。

**DEVICE\$1CERTIFICATE\$1SHARED\$1CHECK**  
+ 在 AWS IoT 中更改设备证书的状态以将其标记为非活动状态。
+ 将使用该证书的设备添加到事物组。

**UNAUTHENTICATED\$1COGNITO\$1ROLE\$1OVERLY\$1PERMISSIVE\$1CHECK**  
+ 无额外受支持的操作。

**AUTHENTICATED\$1COGNITO\$1ROLE\$1OVERLY\$1PERMISSIVE\$1CHECK**  
+ 无额外受支持的操作。

**IOT\$1POLICY\$1OVERLY\$1PERMISSIVE\$1CHECK**  
+ 添加一个空白 AWS IoT 策略版本以限制权限。

**IOT\$1POLICY\$1POTENTIAL\$1MISCONFIGURATION\$1CHECK**  
+ 识别 AWS IoT 策略中的潜在错误配置。

**CA\$1CERT\$1APPROACHING\$1EXPIRATION\$1CHECK**  
+ 在 AWS IoT 中更改证书的状态以将其标记为非活动状态。

**CONFLICTING\$1CLIENT\$1IDS\$1CHECK**  
+ 无额外受支持的操作。

**DEVICE\$1CERT\$1APPROACHING\$1EXPIRATION\$1CHECK**  
+ 在 AWS IoT 中更改设备证书的状态以将其标记为非活动状态。
+ 将使用该证书的设备添加到事物组。

**DEVICE\$1CERTIFICATE\$1KEY\$1QUALITY\$1CHECK**  
+ 在 AWS IoT 中更改设备证书的状态以将其标记为非活动状态。
+ 将使用该证书的设备添加到事物组。

**CA\$1CERTIFICATE\$1KEY\$1QUALITY\$1CHECK**  
+ 在 AWS IoT 中更改证书的状态以将其标记为非活动状态。

**REVOKED\$1DEVICE\$1CERT\$1CHECK**  
+ 在 AWS IoT 中更改设备证书的状态以将其标记为非活动状态。
+ 将使用该证书的设备添加到事物组。

**LOGGING\$1DISABLED\$1CHECK**  
+ 启用日志记录。

AWS IoT Device Defender 支持对 Audit 查找结果执行以下类型的缓解操作：


****  

|  操作类型  | 备注 | 
| --- | --- | 
| ADD\$1THINGS\$1TO\$1THING\$1GROUP | 您指定要向其中添加设备的组。您还可以指定是否应覆盖一个或多个动态组中的成员身份（如果它超过了该事物可能所属组的最大数量）。 | 
| ENABLE\$1IOT\$1LOGGING | 您可以指定日志记录级别和具有日志记录权限的角色。您不能指定 DISABLED 日志记录级别。 | 
| PUBLISH\$1FINDING\$1TO\$1SNS | 您指定结果应发布到的主题。 | 
| REPLACE\$1DEFAULT\$1POLICY\$1VERSION | 您指定模板名称。使用默认策略或空白策略替换策略版本。目前仅支持值 BLANK\$1POLICY。 | 
| UPDATE\$1CA\$1CERTIFICATE | 您指定 CA 证书的新状态。目前仅支持值 DEACTIVATE。 | 
| UPDATE\$1DEVICE\$1CERTIFICATE | 您指定设备证书的新状态。目前仅支持值 DEACTIVATE。 | 

通过配置在审核期间发现问题时要执行的标准操作，您可以一致地响应这些问题。使用这些定义的缓解操作还可以帮助您更快地解决问题，并减少人为错误的可能性。

**重要**  
应用旨在更改证书、将事物添加到新事物组或替换策略的缓解操作可能会对您的设备和应用程序产生影响。例如，设备可能无法连接。请考虑缓解操作的影响，然后再应用这些操作。您可能需要采取其它操作来纠正该问题，然后您的设备和应用程序才可正常工作。例如，您可能需要提供更新的设备证书。缓解操作可帮助您快速限制您的风险，但您仍必须采取纠正措施以解决底层问题。

某些操作（例如重新激活设备证书）只能手动执行。 AWS IoT Device Defender 不提供机制来自动回滚已应用的缓解操作。

## 检测缓解操作
<a name="dd-detect-mitigation-actions"></a>

AWS IoT Device Defender 支持对 Detect 告警执行以下类型的缓解操作：


|  操作类型  | 备注 | 
| --- | --- | 
| ADD\$1THINGS\$1TO\$1THING\$1GROUP | 您指定要向其中添加设备的组。您还可以指定是否应覆盖一个或多个动态组中的成员身份（如果它超过了该事物可能所属组的最大数量）。 | 

## 如何定义和管理缓解操作
<a name="dd-manage-mitigation-actions"></a>

您可以使用 AWS IoT 控制台或 AWS CLI 为您的AWS 账户定义和管理缓解操作。

### 创建缓解操作
<a name="dd-create-mitigation-action"></a>

您定义的每个缓解操作是预定义的操作类型和特定于您账户的参数的组合。

**使用 AWS IoT 控制台创建缓解操作**

 

1. 打开 [AWS IoT 控制台中的“Mitigation actions”（缓解操作）页面](https://console.aws.amazon.com//iot/home#/dd/mitigationActionConfigsHub)。

1. 在 **Mitigation Actions**（缓解操作）页面上，选择 **Create**（创建）。

1. 在 **Create a new mitigation action**（创建新的缓解操作）页面上，在 **Action name**（操作名称）中输入缓解操作的唯一名称。

1. 在**操作类型**中，指定您要定义的操作的类型。

1. 在 **Permissions**（权限）中，选择应用操作的权限所属的 IAM 角色。

1. 每个活动类型请求不同的一组参数。输入操作的参数。例如，如果选择**将事物添加到事物组**操作类型，请选择目标组，然后选择或清除 **Override dynamic groups (覆盖动态组)**。

1. 选择 **Create**（创建）以将缓解操作保存到您的 AWS 账户。

**使用 AWS CLI 创建缓解操作**
+ 使用 [CreateMitigationAction](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateMitigationAction.html) 命令创建您的缓解操作。当您将操作应用于审核结果时，将使用您为该操作提供的唯一名称。选择一个有意义的名称。

**使用 AWS IoT 控制台查看和修改缓解操作**

1. 打开 [AWS IoT 控制台中的“Mitigation actions”（缓解操作）页面](https://console.aws.amazon.com//iot/home#/dd/mitigationActionConfigsHub)。

   **Mitigation actions**（缓解操作）页面显示为您的 AWS 账户定义的所有缓解操作的列表。

1. 选择您要更改的缓解操作的操作名称链接。

1. 选择 **Edit**（编辑），然后对缓解操作进行更改。由于缓解操作的名称用于标识此操作，因此，您不能更改此名称。

1. 选择 **Update**（更新）以将对缓解操作的更改保存到您的 AWS 账户。

**使用 AWS CLI 列出缓解操作**
+ 使用 [ListMitigationAction](https://docs.aws.amazon.com/iot/latest/apireference/API_ListMitigationAction.html) 命令可列出您的缓解操作。如果您想更改或删除缓解操作，请记下名称。

**使用 AWS CLI 更新缓解操作**
+ 使用 [UpdateMitigationAction](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateMitigationAction.html) 命令更改您的缓解操作。

**使用 AWS IoT 控制台删除迁移操作**

1. 打开 [AWS IoT 控制台中的“Mitigation actions”（缓解操作）页面](https://console.aws.amazon.com//iot/home#/dd/mitigationActionConfigsHub)。

   **Mitigation actions**（缓解操作）页面显示为您的 AWS 账户定义的所有缓解操作。

1. 选择要删除的缓解操作，然后选择 **Delete**（删除）。

1. 在 **Are you sure you want to delete**（是否确定要删除）窗口中，选择 **Delete**（删除）。

**使用 AWS CLI 删除缓解操作**
+ 使用 [UpdateMitigationAction](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateMitigationAction.html) 命令更改您的缓解操作。

**使用 AWS IoT 控制台查看缓解操作详细信息**

1. 打开 [AWS IoT 控制台中的“Mitigation actions”（缓解操作）页面](https://console.aws.amazon.com//iot/home#/dd/mitigationActionConfigsHub)。

   **Mitigation actions**（缓解操作）页面显示为您的 AWS 账户定义的所有缓解操作。

1. 选择您要查看的缓解操作的操作名称链接。

**使用 AWS CLI 查看缓解操作详细信息**
+ 使用 [DescribeMitigationAction](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeMitigationAction.html) 命令可查看您的缓解操作的详细信息。

## 应用缓解操作
<a name="dd-audit-apply-mitigation-actions"></a>

在定义了一组缓解操作后，您可以将这些操作应用于审核的结果。当您应用操作时，您就启动了审核缓解操作任务。此任务可能需要一些时间才能完成，具体取决于结果集和您应用于结果集的操作。例如，如果您有一个证书已过期的大型设备池，则可能需要一些时间来停用所有这些证书或将这些设备移到隔离组。其它操作（如启用日志记录）可以快速完成。

您可以查看操作执行的列表并取消尚未完成的执行。已作为已取消操作执行的一部分执行的操作不会回滚。如果您对一组结果应用多个操作而其中一个操作失败，则会对该结果跳过后续操作（但仍应用于其它结果）。结果的任务状态为 FAILED（失败）。如果在应用于结果时一个或多个操作失败，则 `taskStatus` 设置为失败。操作按指定的顺序应用。

每个操作执行将一组操作应用到目标。该目标可以是结果列表，也可以是来自某个审核的所有结果。

下图显示了您如何可以定义审核缓解任务，该任务从一个审核中获取所有结果并对这些结果应用一组操作。单次执行将一个操作应用于一个结果。审核缓解操作任务输出执行摘要。

![\[概念图显示审核缓解操作任务。\]](http://docs.aws.amazon.com/zh_cn/iot-device-defender/latest/devguide/images/conceptual-mitigation-actions-audit.png)


下图显示了您如何可以定义审核缓解任务，该任务从一个或多个审核中获取各个结果的列表并对这些结果应用一组操作。单次执行将一个操作应用于一个结果。审核缓解操作任务输出执行摘要。

![\[概念图显示审核缓解操作任务。\]](http://docs.aws.amazon.com/zh_cn/iot-device-defender/latest/devguide/images/conceptual-mitigation-actions-findings.png)


您可以使用 AWS IoT 控制台或 AWS CLI 以应用缓解操作。

**使用 AWS IoT 控制台通过启动操作执行以应用缓解操作**

1. 在 [AWS IoT 控制台中打开“Audit results”（审计结果）页面](https://console.aws.amazon.com//iot/home#/dd/auditResultsHub)。

1. 选择您要应用操作的审核的名称。

1. 选择 **Start mitigation actions**（启动缓解操作）。如果所有检查都符合要求，则此按钮不可用。

1. 在 **Start a new mitigation action**（启动新的缓解操作）中，任务名称默认为审核 ID，但您可以将其更改为更有意义的内容。

1. 对于在审核中具有一个或多个不合规结果的每种类型的检查，您可以选择一个或多个要应用的操作。仅显示对检查类型有效的操作。
**注意**  
如果尚未为AWS 账户配置操作，则操作列表为空。您可以选择 **Create mitigation action**（创建缓解操作）链接来创建一个或多个缓解操作。

1. 指定要应用的所有操作后，请选择 **Start task**（启动任务）。

**使用 AWS CLI 通过启动审核缓解操作执行以应用缓解操作**

1. 如果您要对审计的所有查找结果应用操作，请使用 [ListAuditTasks](https://docs.aws.amazon.com/iot/latest/apireference/API_ListAuditTasks.html) 命令查找任务 ID。

1. 如果您要仅对选定的查找结果应用操作，请使用 [ListAuditFindings](https://docs.aws.amazon.com/iot/latest/apireference/API_ListAuditFindings.html) 命令获取结果 ID。

1. 使用 [ListMitigationActions](https://docs.aws.amazon.com/iot/latest/apireference/API_ListMitigationActions.html) 命令，并记下要应用的缓解操作的名称。

1. 使用 [StartAuditMitigationActionsTask](https://docs.aws.amazon.com/iot/latest/apireference/API_StartAuditMitigationActionsTask.html) 命令将操作应用到目标。记下任务 ID。您可以使用该 ID 来检查操作执行的状态，查看详细信息，或取消它。

   

**使用 AWS IoT 控制台查看您的操作执行**

1. 打开 [AWS IoT 控制台中的“Action tasks”（操作任务）页面](https://console.aws.amazon.com//iot/home#/dd/auditTasksHub)。

   操作任务列表显示每个操作任务的启动时间和当前状态。

1. 选择**名称**链接以查看任务的详细信息。详细信息包括任务应用的所有操作、其目标及其状态。  
![\[审核缓解操作任务的详细信息。\]](http://docs.aws.amazon.com/zh_cn/iot-device-defender/latest/devguide/images/audit-action-execution-task-details.png)

   您可以使用 **Show executions for (显示的执行面向)** 筛选条件来重点关注某些类型的操作或操作状态。

1. 要查看任务的详细信息，请在 **Executions (执行)** 中选择 **Show (显示)**。  
![\[审核缓解操作任务的执行详细信息。\]](http://docs.aws.amazon.com/zh_cn/iot-device-defender/latest/devguide/images/audit-action-execution-task-executions.png)

**使用 AWS CLI 列出已启动的任务**

1. 使用 [ListAuditMitigationActionsTasks](https://docs.aws.amazon.com/iot/latest/apireference/API_ListAuditMitigationActionsTasks.html) 查看您的审计缓解操作任务。您可以提供筛选条件来缩小结果范围。如果要查看任务的详细信息，请记下任务 ID。

1. 使用 [ListAuditMitigationActionsExecutions](https://docs.aws.amazon.com/iot/latest/apireference/API_ListAuditMitigationActionsExecutions.html) 查看特定审计缓解操作任务的执行详细信息。

1. 使用 [DescribeAuditMitigationActionsTask](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeAuditMitigationActionsTask.html) 查看有关任务的详细信息，例如启动时指定的参数。

**使用 AWS CLI 取消正在运行的审核缓解操作任务**

1. 使用 [ListAuditMitigationActionsTasks](https://docs.aws.amazon.com/iot/latest/apireference/API_ListDetectMitigationActionsExecutions.html) 命令找到您要取消其执行的任务的 ID。您可以提供筛选条件来缩小结果范围。

1. 使用 [ListDetectMitigationActionsExecutions](https://docs.aws.amazon.com/iot/latest/apireference/API_CancelAuditMitigationActionsTask.html) 命令通过任务 ID 取消您的审计缓解操作任务。您无法取消已完成的任务。当您取消任务时，不会应用剩余的操作，但不会回滚已应用的缓解操作。

## 权限
<a name="dd-audit-mitigation-permissions"></a>

对于您定义的每个缓解操作，您必须提供用于应用该操作的角色。




**缓解操作的权限**  

| 操作类型 | 权限策略模板 | 
| --- | --- | 
|  UPDATE\$1DEVICE\$1CERTIFICATE  |    JSON   

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Effect":"Allow",
            "Action":[
                "iot:UpdateCertificate"
            ],
            "Resource":[
                "*"
            ]
        }
    ]
}
```      | 
| UPDATE\$1CA\$1CERTIFICATE |    JSON   

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Effect":"Allow",
            "Action":[
                "iot:UpdateCACertificate"
            ],
            "Resource":[
                "*"
            ]
        }
    ]
}
```      | 
| ADD\$1THINGS\$1TO\$1THING\$1GROUP |    JSON   

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Effect":"Allow",
            "Action":[
                "iot:ListPrincipalThings",
                "iot:AddThingToThingGroup"
            ],
            "Resource":[
                "*"
            ]
        }
    ]
}
```      | 
| REPLACE\$1DEFAULT\$1POLICY\$1VERSION |    JSON   

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Effect":"Allow",
            "Action":[
                "iot:CreatePolicyVersion"
            ],
            "Resource":[
                "*"
            ]
        }
    ]
}
```      | 
| ENABLE\$1IOT\$1LOGGING |    JSON   

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:SetV2LoggingOptions"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::123456789012:role/IoTLoggingRole"
    }
  ]
}
```      | 
| PUBLISH\$1FINDING\$1TO\$1SNS |    JSON   

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Effect":"Allow",
            "Action":[
                "sns:Publish"
            ],
            "Resource":[
                "arn:aws:sns:us-east-1:123456789012:example-topic"
            ]
        }
    ]
}
```      | 

对于所有缓解操作类型，请使用以下信任策略模板：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "iot.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "arn:aws:iot:*:123456789012::*"
        },
        "StringEquals": {
          "aws:SourceAccount": "123456789012:"
        }
      }
    }
  ]
}
```

------