

# 自定义查看 AWS IoT Device Defender 审计结果的时间和方式
<a name="dd-suppressions-example"></a>

AWS IoT Device Defender 审计提供定期安全检查以确认 AWS IoT 设备和资源都遵循了最佳实践。对于每次检查，审计结果都被归类为合规或不合规，其中不合规结果会导致控制台出现警告图标。为了减少重复已知问题产生的噪音，审计查找结果隐藏特征允许您临时将这些不合规通知静音。

您可以在预定时间段内隐藏指定资源或账户的特定审计检查。已隐藏的审计检查结果将被归类为隐藏的查找结果，与合规类别和不合规类别区分开。此新类别不会触发像不合规结果那样的告警。这样，您就可以在已知维护期间或计划完成更新之前减少不合规通知干扰。

## 开始使用
<a name="dd-gs-afs"></a>

以下各节详细介绍了如何使用审计查找结果隐藏功能来隐藏控制台和 CLI 中的 `Device certificate expiring` 检查。如果您想遵循其中一个演示，您必须首先创建两个即将到期的证书，以便 Device Defender 检测。

请使用以下命令创建您的证书。
+ 《AWS IoT Core 开发人员指南》**中的[创建和注册 CA 证书](https://docs.aws.amazon.com/iot/latest/developerguide/create-device-cert.html)
+ [使用您的 CA 证书创建客户端证书](https://docs.aws.amazon.com/iot/latest/developerguide/create-device-cert.html) 在步骤 3 中，将您的 `days` 参数设置为 **1**。

如果您正在使用 CLI 创建证书，请输入以下命令。

```
openssl x509 -req \ 
    -in device_cert_csr_filename \ 
    -CA root_ca_pem_filename \ 
    -CAkey root_ca_key_filename \     
    -CAcreateserial \
    -out device_cert_pem_filename \ 
    -days 1 -sha256
```

## 在控制台中自定义审计查找结果
<a name="dd-afs-example-console"></a>

以下演练使用具有两个过期设备证书的账户，这些证书将触发不合规审计检查。在这种情况下，我们希望禁用警告，因为我们的开发人员正在测试一项新特征来解决问题。我们为每个证书创建审计查找结果抑制，以阻止下周审计结果出现不合规的情况。

1. 我们将首先运行按需审计，以显示过期的设备证书检查不合规。

   从 [AWS IoT控制台](https://console.aws.amazon.com/iot)中，从左侧边栏选择 **Defend**（防护），然后 **Audit**（审计），随后选择 **Results**（结果）。在 **Audit Results**（审计结果）页面上，选择 **Create**（创建）。**Create a new audit**（创建新审计）窗口将会打开。选择**创建**。  
![\[运行按需审计，来显示到期的设备证书检查不合规。\]](http://docs.aws.amazon.com/zh_cn/iot-device-defender/latest/devguide/images/dd-afs-noncompliant.png)

   从按需审计结果中，我们可以看到两个资源的“设备证书即将到期”不合规。

1. 现在，我们希望禁用“设备证书即将过期”的不合规检查警告，因为我们的开发人员正在测试新特征来修复警告。

   从左侧边栏的 **Defend**（防护）下，选择 **Audit**（审计），然后选择 **Finding suppressions**（查找结果隐藏）。在 **Audit finding suppressions**（审计查找结果隐藏）页面上，选择 **Create**（创建）。  
![\[在控制台中创建“审计调查发现隐藏”的流程。\]](http://docs.aws.amazon.com/zh_cn/iot-device-defender/latest/devguide/images/dd-afs-suppressions.png)

1. 在 **Create an audit finding suppression**（创建审计查找结果隐藏）窗口中，我们需要填写以下内容。
   + **Audit check:**（审计检查）：我们选择 `Device certificate expiring`，因为这是我们想要隐藏的审计检查。
   + **Resource identifier**（资源标识符）：我们输入希望隐藏审计查找结果的证书之一的设备证书 ID。
   + **Suppression duration**（隐藏时长）：我们选择 `1 week`，因为这是我们希望将 `Device certificate expiring` 审计检查隐藏的时长。
   + **Description (optional)**（描述（可选））：我们添加了一个说明，描述了为什么我们要隐藏此审计查找结果。  
![\[“创建审计调查发现隐藏”页面，您需要在其中输入详细信息。\]](http://docs.aws.amazon.com/zh_cn/iot-device-defender/latest/devguide/images/dd-afs-create.png)

   填写完这些字段后，选择 **Create**（创建）。创建审计查找结果隐藏后，我们会看到一个成功的提示。

1. 我们隐藏了其中一个证书的审计查找结果，现在我们需要隐藏第二个证书的审计查找结果。我们可以使用与步骤 3 中相同的隐藏方法，但此次我们将使用不同的方法进行演示。

   从 **Defend**（防护）的左侧边栏中，选择 **Audit**（审计），然后选择 **Results**（结果）。在 **Audit results**（审计结果）页面上，选择包含不合规资源的审计。然后，在 **Non-compliant checks**（不合规检查）项下选择资源。在我们的例子中，我们选择“设备证书即将到期”。

1. 在 **Device certificate expiring**（设备证书即将到期）页面，在 **Non-compliant policy**（不合规的策略）项下选择需要隐藏的查找结果旁的选项按钮。接下来，选择 **Actions**（操作）下拉菜单，然后选择为要隐藏的查找结果选择时长。在我们的例子中，我们跟其它证书一样选择 `1 week`。在 **Confirm suppression**（确认隐藏）窗口中，选择 **Enable suppression**（启用隐藏）。  
![\[“创建审计隐藏”页面，您可以在其中完成流程。在创建审计调查发现隐藏后，您会看到成功提示。\]](http://docs.aws.amazon.com/zh_cn/iot-device-defender/latest/devguide/images/dd-afs-noncompliantcerts.png)

   创建审计查找结果隐藏后，我们会看到一个成功的提示。现在，两个审计查找结果均已被隐藏 1 周，同时我们的开发人员正在研制解决方案来解决警告。

## 在 CLI 中自定义您的审计查找结果
<a name="dd-afs-example-cli"></a>

以下演练使用具有过期设备证书并触发了不合规审计检查的账户。在这种情况下，我们希望禁用警告，因为我们的开发人员正在测试一项新特征来解决问题。我们为证书创建审计查找结果隐藏，以防下周的审计结果出现不合规的情况。

我们将使用以下 CLI 命令。
+ [create-audit-suppression](https://docs.aws.amazon.com/cli/latest/reference/iot/create-audit-suppression.html)
+ [describe-audit-suppression](https://docs.aws.amazon.com/cli/latest/reference/iot/describe-audit-suppression.html)
+ [update-audit-suppression](https://docs.aws.amazon.com/cli/latest/reference/iot/update-audit-suppression.html)
+ [delete-audit-suppression](https://docs.aws.amazon.com/cli/latest/reference/iot/delete-audit-suppression.html)
+ [list-audit-suppressions](https://docs.aws.amazon.com/cli/latest/reference/iot/list-audit-suppressions.html)

1. 使用以下命令来启用审计。

   ```
   aws iot update-account-audit-configuration \
      --audit-check-configurations "{\"DEVICE_CERTIFICATE_EXPIRING_CHECK\":{\"enabled\":true}}"
   ```

   输出：

   无。

1. 使用以下命令运行按需审计，以针对 `DEVICE_CERTIFICATE_EXPIRING_CHECK` 审计检查。

   ```
   aws iot start-on-demand-audit-task \
       --target-check-names DEVICE_CERTIFICATE_EXPIRING_CHECK
   ```

   输出：

   ```
   {
       "taskId": "787ed873b69cb4d6cdbae6ddd06996c5"
   }
   ```

1. 使用 [describe-account-audit-configuration](https://docs.aws.amazon.com/cli/latest/reference/iot/describe-account-audit-configuration.html) 命令来描述审计配置。我们希望确认我们已开启 `DEVICE_CERTIFICATE_EXPIRING_CHECK` 的审计检查。

   ```
   aws iot describe-account-audit-configuration
   ```

   输出：

   ```
   {
       "roleArn": "arn:aws:iam::<accountid>:role/service-role/project",
       "auditNotificationTargetConfigurations": {
           "SNS": {
               "targetArn": "arn:aws:sns:us-east-1:<accountid>:project_sns",
               "roleArn": "arn:aws:iam::<accountid>:role/service-role/project",
               "enabled": true
           }
       },
       "auditCheckConfigurations": {
           "AUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK": {
               "enabled": false
           },
           "CA_CERTIFICATE_EXPIRING_CHECK": {
               "enabled": false
           },
           "CA_CERTIFICATE_KEY_QUALITY_CHECK": {
               "enabled": false
           },
           "CONFLICTING_CLIENT_IDS_CHECK": {
               "enabled": false
           },
           "DEVICE_CERTIFICATE_EXPIRING_CHECK": {
               "enabled": true
           },
           "DEVICE_CERTIFICATE_KEY_QUALITY_CHECK": {
               "enabled": false
           },
           "DEVICE_CERTIFICATE_SHARED_CHECK": {
               "enabled": false
           },
           "IOT_POLICY_OVERLY_PERMISSIVE_CHECK": {
               "enabled": true
           },
           "IOT_ROLE_ALIAS_ALLOWS_ACCESS_TO_UNUSED_SERVICES_CHECK": {
               "enabled": false
           },
           "IOT_ROLE_ALIAS_OVERLY_PERMISSIVE_CHECK": {
               "enabled": false
           },
           "LOGGING_DISABLED_CHECK": {
               "enabled": false
           },
           "REVOKED_CA_CERTIFICATE_STILL_ACTIVE_CHECK": {
               "enabled": false
           },
           "REVOKED_DEVICE_CERTIFICATE_STILL_ACTIVE_CHECK": {
               "enabled": false
           },
           "UNAUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK": {
               "enabled": false
           }
       }
   }
   ```

   `DEVICE_CERTIFICATE_EXPIRING_CHECK` 应具有 `true` 值。

1. 使用 [list-audit-task](https://docs.aws.amazon.com/cli/latest/reference/iot/list-audit-task.html) 命令来标识已完成的审计任务。

   ```
   aws iot list-audit-tasks \
       --task-status "COMPLETED" \
       --start-time 2020-07-31 \
       --end-time 2020-08-01
   ```

   输出：

   ```
   {
       "tasks": [
           {
               "taskId": "787ed873b69cb4d6cdbae6ddd06996c5",
               "taskStatus": "COMPLETED",
               "taskType": "SCHEDULED_AUDIT_TASK"
           }
       ]
   }
   ```

   您在步骤 1 中运行的审计的 `taskId` 应该具有一个为 `COMPLETED` 的 `taskStatus`。

1. 使用 [describe-audit-task](https://docs.aws.amazon.com/cli/latest/reference/iot/describe-audit-task.html) 命令，获取有关使用来自前述步骤的 `taskId` 输出完成的审计的详细信息。此命令列出了有关审计的详细信息。

   ```
   aws iot describe-audit-task \
       --task-id "787ed873b69cb4d6cdbae6ddd06996c5"
   ```

   输出：

   ```
   {
       "taskStatus": "COMPLETED",
       "taskType": "SCHEDULED_AUDIT_TASK",
       "taskStartTime": 1596168096.157,
       "taskStatistics": {
           "totalChecks": 1,
           "inProgressChecks": 0,
           "waitingForDataCollectionChecks": 0,
           "compliantChecks": 0,
           "nonCompliantChecks": 1,
           "failedChecks": 0,
           "canceledChecks": 0
       },
       "scheduledAuditName": "AWSIoTDeviceDefenderDailyAudit",
       "auditDetails": {
           "DEVICE_CERTIFICATE_EXPIRING_CHECK": {
               "checkRunStatus": "COMPLETED_NON_COMPLIANT",
               "checkCompliant": false,
               "totalResourcesCount": 195,
               "nonCompliantResourcesCount": 2
           }
       }
   }
   ```

1. 使用 [list-audit-findings](https://docs.aws.amazon.com/cli/latest/reference/iot/list-audit-findings.html) 命令查找不合规的证书 ID，以便我们可以暂停此资源的审计提示。

   ```
   aws iot list-audit-findings \
       --start-time 2020-07-31 \
       --end-time 2020-08-01
   ```

   输出：

   ```
   {
       "findings": [
           {
               "findingId": "296ccd39f806bf9d8f8de20d0ceb33a1",
               "taskId": "787ed873b69cb4d6cdbae6ddd06996c5",
               "checkName": "DEVICE_CERTIFICATE_EXPIRING_CHECK",
               "taskStartTime": 1596168096.157,
               "findingTime": 1596168096.651,
               "severity": "MEDIUM",
               "nonCompliantResource": {
                   "resourceType": "DEVICE_CERTIFICATE",
                   "resourceIdentifier": {
                       "deviceCertificateId": "b4490<shortened>"
                   },
                   "additionalInfo": {
                   "EXPIRATION_TIME": "1582862626000"
                   }
               },
               "reasonForNonCompliance": "Certificate is past its expiration.",
               "reasonForNonComplianceCode": "CERTIFICATE_PAST_EXPIRATION",
               "isSuppressed": false
           },
           {
               "findingId": "37ecb79b7afb53deb328ec78e647631c",
               "taskId": "787ed873b69cb4d6cdbae6ddd06996c5",
               "checkName": "DEVICE_CERTIFICATE_EXPIRING_CHECK",
               "taskStartTime": 1596168096.157,
               "findingTime": 1596168096.651,
               "severity": "MEDIUM",
               "nonCompliantResource": {
                   "resourceType": "DEVICE_CERTIFICATE",
                   "resourceIdentifier": {
                       "deviceCertificateId": "c7691<shortened>"
                   },
                   "additionalInfo": {
                   "EXPIRATION_TIME": "1583424717000"
                   }
               },
               "reasonForNonCompliance": "Certificate is past its expiration.",
               "reasonForNonComplianceCode": "CERTIFICATE_PAST_EXPIRATION",
               "isSuppressed": false
           }
      ]
   }
   ```

1. 使用 [create-audit-suppression](https://docs.aws.amazon.com/cli/latest/reference/iot/create-audit-suppression.html) 命令将 ID 为 `c7691e<shortened>` 的设备证书隐藏 `DEVICE_CERTIFICATE_EXPIRING_CHECK` 审计检查的通知，直至 *2020-08-20*。

   ```
   aws iot create-audit-suppression \
       --check-name DEVICE_CERTIFICATE_EXPIRING_CHECK \
       --resource-identifier deviceCertificateId="c7691e<shortened>" \
       --no-suppress-indefinitely \ 
       --expiration-date 2020-08-20
   ```

1. 使用 [list-audit-suppression](https://docs.aws.amazon.com/cli/latest/reference/iot/list-audit-suppression.html) 命令确认审计隐藏设置并获取有关隐藏的详细信息。

   ```
   aws iot list-audit-suppressions
   ```

   输出：

   ```
   {
       "suppressions": [
           {
           "checkName": "DEVICE_CERTIFICATE_EXPIRING_CHECK",
               "resourceIdentifier": {
                   "deviceCertificateId": "c7691e<shortened>"
               },
           "expirationDate": 1597881600.0,
           "suppressIndefinitely": false
           }
       ]
   }
   ```

1. [update-audit-suppression](https://docs.aws.amazon.com/cli/latest/reference/iot/update-audit-suppression.html) 命令可用于更新审计查找结果隐藏。下面的示例将 `expiration-date` 更新为了 `08/21/20`。

   ```
   aws iot update-audit-suppression \
       --check-name DEVICE_CERTIFICATE_EXPIRING_CHECK \
       --resource-identifier deviceCertificateId=c7691e<shortened> \
       --no-suppress-indefinitely \
       --expiration-date 2020-08-21
   ```

1. [delete-audit-suppression](https://docs.aws.amazon.com/cli/latest/reference/iot/delete-audit-suppression.html) 命令可用于删除审计查找结果隐藏。

   ```
   aws iot delete-audit-suppression \
       --check-name DEVICE_CERTIFICATE_EXPIRING_CHECK \
       --resource-identifier deviceCertificateId="c7691e<shortened>"
   ```

   要确认删除，请使用 [list-audit-suppressions](https://docs.aws.amazon.com/cli/latest/reference/iot/list-audit-suppressions.html) 命令。

   ```
   aws iot list-audit-suppressions
   ```

   输出：

   ```
   {
    "suppressions": []
   }
   ```

在本教程中，我们向您展示了如何在控制台和 CLI 中隐藏 `Device certificate expiring` 检查。有关审计查找结果隐藏的更多信息，请参阅 [审计查找结果隐藏](audit-finding-suppressions.md)。