

# 审核
<a name="device-defender-audit"></a>

AWS IoT Device Defender 审核会查看与账户相关的和与设备相关的设置及策略，以确保安全措施就绪。审核可帮助您检测与安全​最佳实践或访问策略的任何偏离（例如，使用同一身份的多个设备，或允许一个设备读取和更新许多其它设备数据的过度宽松的权限策略。） 您可以根据需要运行审核（*按需审核*）或安排审核定期运行（*计划审核*）。

AWS IoT Device Defender 审核会针对常见的 IoT 安全最佳实践和设备漏洞运行一组预定义检查。预定义检查示例包括，授权读取或更新多个设备上数据的策略、共享身份（X.509 证书）的设备或者即将过期或已吊销但仍处于活动状态的证书。​

## 问题严重性
<a name="device-defender-audit-severity"></a>

问题严重性指示与每个已标识的不合规实例关联的关注级别，以及建议的补救时间。

**重大**  
具有此严重性的不合规审计检查将标识需要迫切关注的问题。关键问题通常使得只掌握了少量高级知识且没有中间人知识或特殊凭证的不良行为者，可以轻松获取您资产的访问或控制权限。

**高**  
具有此严重性的不合规审计检查需要立即进行调查，并在解决关键问题之后提供补救计划。与关键问题一样，高严重性问题通常会向不良行为者提供对您资产的访问或控制权限。但是，高严重性问题通常更难以利用。它们可能需要特殊的工具、中间人知识或特定的设置。

**中**  
具有此严重性的不合规审计检查会提出问题，需要在持续的安保状况维护过程中加以注意。中等严重性问题可能会导致负面操作影响，例如由于安全控制故障而导致的意外中断。这些问题也可能向不良行为者提供对您资产的有限访问或控制，或者可能有助于其部分恶意行为的实施。

**低**  
具有此严重性的不合规审计检查通常表明忽略或绕过了安全最佳实践。虽然它们本身可能不会对安全造成直接影响，但这些失误可能被不良行为者利用。与中等严重性问题一样，低严重性问题需要在持续的安全状况维护过程中加以注意。

## 后续步骤
<a name="device-defender-audit-severity-next-steps"></a>

要了解可执行的审计检查类型，请参阅 [审计检查](device-defender-audit-checks.md)。有关适用于审计的服务配额的信息，请参阅 [Service Quotas](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#limits_iot)。

# 审计检查
<a name="device-defender-audit-checks"></a>

**注意**  
当您启用检查后，数据收集就会立即开始。如果账户中有大量数据需要收集，那么在启用检查之后可能需要等待一定时间才会获得结果。

以下为受支持的审核检查：
+ [已吊销中间 CA 以进行活动设备证书检查](audit-chk-active-intermediary-device-revoked-CA.md)
+ [已吊销的 CA 证书仍处于活动状态](audit-chk-revoked-ca-cert.md)
+ [共享设备证书](audit-chk-device-cert-shared.md)
+ [设备证书密钥质量](audit-chk-device-cert-key-quality.md)
+ [CA 证书密钥质量](audit-chk-ca-cert-key-quality.md)
+ [未经身份验证的 Cognito 角色过于宽容](audit-chk-unauth-cognito-role-permissive.md)
+ [经过身份验证的 Cognito 角色过于宽容](audit-chk-auth-cognito-role-permissive.md)
+ [AWS IoT 策略过于宽容](audit-chk-iot-policy-permissive.md)
+ [AWS IoT 策略可能配置错误](audit-chk-iot-misconfigured-policies.md)
+ [角色别名过于宽容](audit-chk-iot-role-alias-permissive.md)
+ [角色别名允许访问未使用的服务](audit-chk-role-alias-unused-svcs.md)
+ [CA 证书即将过期](audit-chk-ca-cert-approaching-expiration.md)
+ [冲突的 MQTT 客户端 ID](audit-chk-conflicting-client-ids.md)
+ [设备证书即将过期](audit-chk-device-cert-approaching-expiration.md)
+ [设备证书期限检查](device-certificate-age-check.md)
+ [已撤销的设备证书仍处于激活状态](audit-chk-revoked-device-cert.md)
+ [日志记录已禁用](audit-chk-logging-disabled.md)

# 已吊销中间 CA 以进行活动设备证书检查
<a name="audit-chk-active-intermediary-device-revoked-CA"></a>

使用此检查来识别尽管撤消了中间 CA，但仍处于活动状态的所有相关设备证书。

此检查在 CLI 和 API 中显示为 `INTERMEDIATE_CA_REVOKED_FOR_ACTIVE_DEVICE_CERTIFICATES_CHECK`。

**严重性：**严重

## Details
<a name="audit-chk-active-device-intermediary-revoked-CA-details"></a>

此检查发现不合规问题时，会返回以下原因代码：
+ INTERMEDIATE\$1CA\$1REVOKED\$1BY\$1ISSUER

## 为什么这非常重要
<a name="audit-chk-active-device-intermediary-revoked-CA-why-it-matters"></a>

已吊销中间 CA 以进行活动设备证书检查通过确定 CA 链中已吊销中间颁发 CA 的 AWS IoT Core 中是否存在活动设备证书来评估设备身份和信任度。

不应再使用已吊销的中间 CA 来签署 CA 链中的任何其他 CA 或设备证书。在吊销中间 CA 后，具有使用此 CA 证书签名的证书的新添加设备将构成安全威胁。

## 如何修复
<a name="audit-chk-active-device-intermediary-revoked-CA-how-to-fix"></a>

查看 CA 证书被吊销后一段时间的设备证书注册活动。按照您的安全最佳做法来缓解这种情况。您可能需要：

1. 为受影响的设备配置由其他 CA 签名的新证书。

1. 验证新证书是否有效，以及设备能否使用新证书进行连接。

1. 使用 [UpdateCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCertificate.html) 在 AWS IoT 中将旧证书标记为“REVOKED”。您还可以使用缓解操作实现以下目的：
   + 对您的审计查找结果应用 `UPDATE_DEVICE_CERTIFICATE` 缓解操作以进行此更改。
   + 应用 `ADD_THINGS_TO_THING_GROUP` 缓解操作，以将设备添加到可以对其执行操作的组。
   + 如果要实现自定义响应以响应 Amazon SNS 消息，请应用 `PUBLISH_FINDINGS_TO_SNS` 缓解操作。
   + 对吊销中间 CA 证书后的设备证书注册活动进行审核，并考虑吊销在此期间可能使用它颁发的任何设备证书。可以使用 [ListRelatedResourcesForAuditFinding](https://docs.aws.amazon.com/iot/latest/apireference/API_ListRelatedResourcesForAuditFinding.html) 列出通过该 CA 证书签发的设备证书，并使用 [UpdateCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCertificate.html) 吊销设备证书。
   + 将旧证书从设备分离。（请参阅 [DetachThingPrincipal](https://docs.aws.amazon.com/iot/latest/apireference/API_DetachThingPrincipal.html)。）

   有关更多信息，请参阅 [缓解操作](dd-mitigation-actions.md)。

# 已吊销的 CA 证书仍处于活动状态
<a name="audit-chk-revoked-ca-cert"></a>

CA 证书已被吊销，但在 AWS IoT 中仍处于活动状态。

此检查在 CLI 和 API 中显示为 `REVOKED_CA_CERTIFICATE_STILL_ACTIVE_CHECK`。

**严重性：**严重

## Details
<a name="audit-chk-revoked-ca-cert-details"></a>

CA 证书在发证机构所维护的证书吊销列表中标记为已吊销，但在 AWS IoT 中仍标记为“ACTIVE”或“PENDING\$1TRANSFER”。

此检查发现不合规的 CA 证书时，会返回以下原因代码：
+ CERTIFICATE\$1REVOKED\$1BY\$1ISSUER

## 为什么这非常重要
<a name="audit-chk-revoked-ca-cert-why-it-matters"></a>

已吊销的 CA 证书不应再用于签发设备证书。证书可能因遭破坏而被吊销。如果新添加的设备具有使用此 CA 证书签发的证书，可能会造成安全威胁。

## 如何修复
<a name="audit-chk-revoked-ca-cert-how-to-fix"></a>

1. 使用 [UpdateCACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCACertificate.html) 在 AWS IoT 中将该 CA 证书标记为“INACTIVE”。您还可以使用缓解操作实现以下目的：
   + 对您的审计查找结果应用 `UPDATE_CA_CERTIFICATE` 缓解操作以进行此更改。
   + 应用 `PUBLISH_FINDINGS_TO_SNS` 缓解操作，以实施自定义响应来响应 Amazon SNS 消息。

   有关更多信息，请参阅 [缓解操作](dd-mitigation-actions.md)。

1. 对吊销 CA 证书后的设备证书注册活动进行审核，并考虑吊销在此期间可能使用它颁发的任何设备证书。可以使用 [ListCertificatesByCA](https://docs.aws.amazon.com/iot/latest/apireference/API_ListCertificatesByCA.html) 列出通过该 CA 证书签发的设备证书，并使用 [UpdateCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCertificate.html) 吊销设备证书。

# 共享设备证书
<a name="audit-chk-device-cert-shared"></a>

多个并发连接使用相同的 X.509 证书向 AWS IoT 进行身份验证。

此检查在 CLI 和 API 中显示为 `DEVICE_CERTIFICATE_SHARED_CHECK`。

**严重性：**严重

## Details
<a name="audit-chk-device-cert-shared-details"></a>

在按需审计过程中进行此检查时，它会检查在审计开始之前 31 天至检查运行前 2 小时内设备用于连接的证书和客户端 ID。对于计划审计，此检查会查看从上次运行审计前 2 小时到该审计实例开始前 2 小时期间的数据。如果在检查期间已采取措施来缓解这种状况，请记录执行并行连接的时间，以判断问题是否持续存在。

此检查发现不合规的证书时，会返回以下原因代码：
+ CERTIFICATE\$1SHARED\$1BY\$1MULTIPLE\$1DEVICES

此外，此检查返回的查找结果还包含共享证书的 ID、使用证书进行连接的客户端的 ID，以及连接/连接断开次数。最近的结果列在最前面。

## 为什么这非常重要
<a name="audit-chk-device-cert-shared-why-it-matters"></a>

每个设备应具有唯一证书以向 AWS IoT 进行身份验证。如果多个设备使用相同的证书，这可能表示设备已遭破坏。其身份可能已遭克隆，会进一步危害系统。

## 如何修复
<a name="audit-chk-device-cert-shared-how-to-fix"></a>

验证设备证书是否已遭破坏。如果已遭破坏，请遵照安全最佳实践来缓解此情况。

如果在多个设备上使用同一证书，则需要执行以下操作：

1. 预置新的唯一证书并将其附加到每个设备。

1. 验证新证书是否有效，以及设备能否使用它们进行连接。

1. 使用 [UpdateCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCertificate.html) 在 AWS IoT 中将旧证书标记为“REVOKED”。您还可以使用缓解操作实现以下目的：
   + 对您的审计查找结果应用 `UPDATE_DEVICE_CERTIFICATE` 缓解操作以进行此更改。
   + 应用 `ADD_THINGS_TO_THING_GROUP` 缓解操作，以将设备添加到可以对其执行操作的组。
   + 如果要实现自定义响应以响应 Amazon SNS 消息，请应用 `PUBLISH_FINDINGS_TO_SNS` 缓解操作。

   有关更多信息，请参阅 [缓解操作](dd-mitigation-actions.md)。

1. 将旧证书从各个设备中分离。

# 设备证书密钥质量
<a name="audit-chk-device-cert-key-quality"></a>

AWS IoT 客户通常依赖使用 X.509 证书的 TLS 相互身份验证，用于对 AWS IoT 消息代理进行身份验证。这些证书及其证书颁发机构证书必须先在其 AWS IoT 账户中注册，然后才能使用。在注册这些证书时，AWS IoT 对这些证书执行基本的完整性检查。这些检查包括：
+ 必须采用有效的格式。
+ 必须由注册的证书颁发机构签名。
+ 必须仍然在其有效期内（换句话说，尚未过期）。
+ 其加密密钥大小必须满足所需的最小大小（对于 RSA 密钥，它们必须为 2048 位或更大）。

此审计检查为您的加密密钥质量提供了以下附加测试：
+ CVE-2008-0166 — 检查是否在基于 Debian 的操作系统上，使用 OpenSSL 0.9.8c-1 到 0.9.8g-9 之间的版本生成了密钥。这些版本的 OpenSSL 使用随机数生成器生成可预测的数字，使远程攻击者更容易对加密密钥进行暴力猜测攻击。
+ CVE-2017-15361 - 检查密钥是否由 Infineon RSA 库 1.02.013 在 Infineon Trusted Platform Module (TPM) 固件中生成，例如 0000000000000422 - 4.34 之前的版本、000000000000062b - 6.43 之前的版本以及 0000000000008521 - 133.33 之前的版本。该库不当地处理 RSA 密钥生成，使攻击者更容易通过针对性的攻击，破解某些加密保护机制。受影响的技术示例包括使用 TPM 1.2 的 BitLocker、YubiKey 4（4.3.5 之前）PGP 密钥生成以及 Chrome 操作系统中的缓存用户数据加密功能。

AWS IoT Device Defender如果证书未通过这些测试， 会将证书报告为不合规。

此检查在 CLI 和 API 中显示为 `DEVICE_CERTIFICATE_KEY_QUALITY_CHECK`。

**严重性：**严重

## Details
<a name="audit-chk-device-cert-key-quality-details"></a>

此检查适用于状态为“ACTIVE”或“PENDING\$1TRANSFER”的设备证书。

此检查发现不合规的证书时，会返回以下原因代码：
+ CERTIFICATE\$1KEY\$1VULNERABILITY\$1CVE-2017-15361
+ CERTIFICATE\$1KEY\$1VULNERABILITY\$1CVE-2008-0166

## 为什么这非常重要
<a name="audit-chk-device-cert-key-quality-why-it-matters"></a>

当设备使用易受攻击的证书时，攻击者会更容易盗用该设备。

## 如何修复
<a name="audit-chk-device-cert-key-quality-how-to-fix"></a>

更新您的设备证书以替换具有已知漏洞的这些证书。

如果在多个设备上使用同一证书，则需要执行以下操作：

1. 预置新的唯一证书并将其附加到每个设备。

1. 验证新证书是否有效，以及设备能否使用它们进行连接。

1. 使用 [UpdateCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCertificate.html) 在 AWS IoT 中将旧证书标记为“REVOKED”。您还可以使用缓解操作实现以下目的：
   + 对您的审计查找结果应用 `UPDATE_DEVICE_CERTIFICATE` 缓解操作以进行此更改。
   + 应用 `ADD_THINGS_TO_THING_GROUP` 缓解操作，以将设备添加到可以对其执行操作的组。
   + 如果要实现自定义响应以响应 Amazon SNS 消息，请应用 `PUBLISH_FINDINGS_TO_SNS` 缓解操作。

   有关更多信息，请参阅 [缓解操作](dd-mitigation-actions.md)。

1. 将旧证书从各个设备中分离。

# CA 证书密钥质量
<a name="audit-chk-ca-cert-key-quality"></a>

AWS IoT 客户通常依赖使用 X.509 证书的 TLS 相互身份验证，用于对 AWS IoT 消息代理进行身份验证。这些证书及其证书颁发机构证书必须先在其 AWS IoT 账户中注册，然后才能使用。在注册这些证书时，AWS IoT 对这些证书执行基本的完整性检查，包括：
+ 证书采用有效格式。
+ 证书必须在其有效期内（换句话说，尚未过期）。
+ 其加密密钥大小满足所需的最小大小（对于 RSA 密钥，它们必须为 2048 位或更大）。

此审计检查为您的加密密钥质量提供了以下附加测试：
+ CVE-2008-0166 — 检查是否在基于 Debian 的操作系统上，使用 OpenSSL 0.9.8c-1 到 0.9.8g-9 之间的版本生成了密钥。这些版本的 OpenSSL 使用随机数生成器生成可预测的数字，使远程攻击者更容易对加密密钥进行暴力猜测攻击。
+ CVE-2017-15361 - 检查密钥是否由 Infineon RSA 库 1.02.013 在 Infineon Trusted Platform Module (TPM) 固件中生成，例如 0000000000000422 - 4.34 之前的版本、000000000000062b - 6.43 之前的版本以及 0000000000008521 - 133.33 之前的版本。该库不当地处理 RSA 密钥生成，使攻击者更容易通过针对性的攻击，破解某些加密保护机制。受影响的技术示例包括使用 TPM 1.2 的 BitLocker、YubiKey 4（4.3.5 之前）PGP 密钥生成以及 Chrome 操作系统中的缓存用户数据加密功能。

AWS IoT Device Defender如果证书未通过这些测试， 会将证书报告为不合规。

此检查在 CLI 和 API 中显示为 `CA_CERTIFICATE_KEY_QUALITY_CHECK`。

**严重性：**严重

## Details
<a name="audit-chk-ca-cert-key-quality-details"></a>

此检查适用于状态为“ACTIVE”或“PENDING\$1TRANSFER”的 CA 证书。

此检查发现不合规的证书时，会返回以下原因代码：
+ CERTIFICATE\$1KEY\$1VULNERABILITY\$1CVE-2017-15361
+ CERTIFICATE\$1KEY\$1VULNERABILITY\$1CVE-2008-0166

## 为什么这非常重要
<a name="audit-chk-ca-cert-key-quality-why-it-matters"></a>

如果新添加的设备使用此 CA 证书签名，可能会造成安全威胁。

## 如何修复
<a name="audit-chk-ca-cert-key-quality-how-to-fix"></a>

1. 使用 [UpdateCACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCACertificate.html) 在 AWS IoT 中将该 CA 证书标记为“INACTIVE”。您还可以使用缓解操作实现以下目的：
   + 对您的审计查找结果应用 `UPDATE_CA_CERTIFICATE` 缓解操作以进行此更改。
   + 如果要实现自定义响应以响应 Amazon SNS 消息，请应用 `PUBLISH_FINDINGS_TO_SNS` 缓解操作。

   有关更多信息，请参阅 [缓解操作](dd-mitigation-actions.md)。

1. 对吊销 CA 证书后的设备证书注册活动进行审核，并考虑吊销在此期间可能使用它颁发的任何设备证书。（使用 [ListCertificatesByCA](https://docs.aws.amazon.com/iot/latest/apireference/API_ListCertificatesByCA.html) 列出通过该 CA 证书签发的设备证书，并使用 [UpdateCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCertificate.html) 吊销设备证书。）

# 未经身份验证的 Cognito 角色过于宽容
<a name="audit-chk-unauth-cognito-role-permissive"></a>

附加到未经身份验证的 Amazon Cognito 身份池角色的策略被视为过于宽容，因为它会授权执行以下任意 AWS IoT 操作：
+ 管理或修改事物。
+ 读取事物管理数据。
+ 管理非事物相关的数据或资源。

或者，因为它授权在一系列设备上执行以下 AWS IoT 操作：
+ 使用 MQTT 连接、发布或订阅预留主题（包括影子或任务执行数据）。
+ 使用 API 命令读取或修改影子或任务执行数据。

一般情况下，使用未经身份验证的 Amazon Cognito 身份池角色进行连接的设备只应具备有限的权限，发布和订阅事物特定 MQTT 主题，或者使用 API 命令读取和修改与影子或任务执行数据相关的事物特定数据。

此检查在 CLI 和 API 中显示为 `UNAUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK`。

**严重性：**严重

## Details
<a name="audit-chk-unauth-cognito-role-permissive-details"></a>

对于此检查，AWS IoT Device Defender 会审计在执行审计之前 31 天内用于连接到 AWS IoT 消息代理的所有 Amazon Cognito 身份池。经过身份验证或未经身份验证的 Amazon Cognito 身份连接的所有 Amazon Cognito 身份池都在审核范围内。

此检查发现不合规的未经身份验证的 Amazon Cognito 身份池角色时，会返回以下原因代码：
+ ALLOWS\$1ACCESS\$1TO\$1IOT\$1ADMIN\$1ACTIONS
+ ALLOWS\$1BROAD\$1ACCESS\$1TO\$1IOT\$1DATA\$1PLANE\$1ACTIONS

## 为什么这非常重要
<a name="audit-chk-unauth-cognito-role-permissive-why-it-matters"></a>

由于未经身份验证的身份从未经过用户的的身份验证，因此它们带来风险的可能性远远高于经过身份验证的 Amazon Cognito 身份。如果未经身份验证的身份遭到破坏，它可能使用管理操作来修改账户设置、删除资源或获取对敏感数据的访问权限。或者，凭借对设备设置宽泛的访问权限，它可以访问或修改您账户中所有设备的影子和任务。来宾用户可能使用这些权限破坏您的整个队列或通过消息发动 DDOS 攻击。

## 如何修复
<a name="audit-chk-unauth-cognito-role-permissive-how-to-fix"></a>

附加到未经身份验证的 Amazon Cognito 身份池角色的策略应仅为设备授予执行任务所需的这些权限。我们建议您完成以下步骤：

1. 创建新的合规角色。

1. 创建新的 Amazon Cognito 身份池并为其附加合规角色。

1. 验证您的身份能否使用新池访问 AWS IoT。

1. 验证完成后，将合规角色附加到标记为不合规的 Amazon Cognito 身份池。

您还可以使用缓解操作实现以下目的：
+ 应用 `PUBLISH_FINDINGS_TO_SNS` 缓解操作，以实施自定义响应来响应 Amazon SNS 消息。

有关更多信息，请参阅 [缓解操作](dd-mitigation-actions.md)。

## 管理或修改事物。
<a name="manage-modify-things-check"></a>

以下 AWS IoT API 操作用于管理或修改事物。不应向通过未经身份验证的 Amazon Cognito 身份池进行连接的设备授予执行这些操作的权限。
+ `AddThingToThingGroup` 
+ `AttachThingPrincipal` 
+ `CreateThing` 
+ `DeleteThing` 
+ `DetachThingPrincipal` 
+ `ListThings` 
+ `ListThingsInThingGroup` 
+ `RegisterThing` 
+ `RemoveThingFromThingGroup` 
+ `UpdateThing` 
+ `UpdateThingGroupsForThing` 

任何授权执行这些操作的角色，即便是在单一资源上执行这些操作，也会被视为不合规。

## 读取事物管理数据
<a name="read-thing-admin-data-check"></a>

以下 AWS IoT API 操作用于读取或修改事物数据。不应向通过未经身份验证的 Amazon Cognito 的身份池连接的设备授予执行这些操作的权限。
+ `DescribeThing`
+ `ListJobExecutionsForThing`
+ `ListThingGroupsForThing`
+ `ListThingPrincipals`

**Example**  
+ 不合规：

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

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Sid": "AllowIoTThingOperations",
        "Effect": "Allow",
        "Action": [ 
            "iot:DescribeThing",
            "iot:ListJobExecutionsForThing",
            "iot:ListThingGroupsForThing",
            "iot:ListThingPrincipals"
        ],
        "Resource": [
          "arn:aws:iot:us-east-1:123456789012:thing/name-of-thing"
        ]
      }
    ]
  }
  ```

------

  此示例允许设备执行指定操作，即便该设备仅获得了针对一个事物的权限。

## 管理非事物对象
<a name="manage-non-things-check"></a>

通过未经身份验证的 Amazon Cognito 身份池进行连接的设备，不应该被授予执行除这些部分中所述之外的 AWS IoT API 操作的权限。可以通过创建一个不供设备使用的单独身份池，使用通过未经身份验证的 Amazon Cognito 身份池进行连接的应用程序来管理账户。

## 订阅/发布到 MQTT 主题
<a name="audit-chk-unauth-cognito-role-permissive-mqtt-topics"></a>

MQTT 消息通过 AWS IoT 消息代理发送，并由设备用来执行多个操作，包括访问和修改影子状态和任务执行状态。为设备授权以连接、发布或订阅 MQTT 消息的策略，应该限定对特定资源执行如下操作：

**Connect**  
+ 不合规：

  ```
  arn:aws:iot:region:account-id:client/*
  ```

  通配符 \$1 允许任何设备连接到 AWS IoT。

  ```
  arn:aws:iot:region:account-id:client/${iot:ClientId}
  ```

  除非 `iot:Connection.Thing.IsAttached` 在条件键中设置为 True，这相当于上例中的通配符 \$1。
+ 合规：

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

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "iot:Connect"
        ],
        "Resource": [
          "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
        ]
      }
    ]
  }
  ```

------

  资源规范包含与用于连接的设备名称匹配的变量。条件语句通过检查 MQTT 客户端所用的证书是否与附加到使用此名称的事物的证书匹配，进一步限制权限。

**发布**  
+ 不合规：

  ```
  arn:aws:iot:region:account-id:topic/$aws/things/*/shadow/update
  ```

  此示例允许设备更新任何设备的影子（\$1 = 所有设备）。

  ```
  arn:aws:iot:region:account-id:topic/$aws/things/*
  ```

  此示例允许设备读取、更新或删除任何设备的影子。
+ 合规：

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "iot:Publish"
              ],
              "Resource": [
                  "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*"
              ]
          }
      ]
  }
  ```

------

  资源规范包含通配符，但仅匹配其事物名称用于连接的设备的任何影子相关主题。

**订阅**  
+ 不合规：

  ```
  arn:aws:iot:region:account-id:topicfilter/$aws/things/*
  ```

  此示例允许设备订阅为所有设备预留的影子或任务主题。

  ```
  arn:aws:iot:region:account-id:topicfilter/$aws/things/*
  ```

  与上一个示例相同，不过使用的是 \$1 通配符。

  ```
  arn:aws:iot:region:account-id:topicfilter/$aws/things/+/shadow/update
  ```

  此示例允许设备查看任何设备上的影子更新（\$1 = 所有设备）。
+ 合规：

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "iot:Subscribe"
              ],
              "Resource": [
                  "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*",
                  "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/jobs/*"
              ]
          }
      ]
  }
  ```

------

  资源规范包含通配符，但仅匹配其事物名称用于连接的设备的任何影子相关主题和任务相关主题。

**接收**  
+ 合规：

  ```
  arn:aws:iot:region:account-id:topicfilter/$aws/things/*
  ```

  这是允许的，因为设备只能从其有权订阅的主题接收消息。

## 读取/修改影子或任务数据
<a name="read-modify-shadow-job-data-check"></a>

为设备授予执行 API 操作权限以访问或修改设备影子或任务执行数据的策略，应该限定对特定资源执行以下操作。下面是一些 API 操作：
+ `DeleteThingShadow`
+ `GetThingShadow`
+ `UpdateThingShadow`
+ `DescribeJobExecution`
+ `GetPendingJobExecutions`
+ `StartNextPendingJobExecutio`n
+ `UpdateJobExecution`

**Example**  
+ 不合规：

  ```
  arn:aws:iot:region:account-id:thing/*
  ```

  此示例允许设备对任何事物执行指定操作。
+ 合规：

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

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [ 
            "iot:DeleteThingShadow",
            "iot:GetThingShadow",
            "iot:UpdateThingShadow",
            "iotjobsdata:DescribeJobExecution",
            "iotjobsdata:GetPendingJobExecutions",
            "iotjobsdata:StartNextPendingJobExecution",
            "iotjobsdata:UpdateJobExecution"
        ],
        "Resource": [
          "arn:aws:iot:us-east-1:123456789012:thing/MyThing1",
          "arn:aws:iot:us-east-1:123456789012:thing/MyThing2"
        ]
      }
    ]
  }
  ```

------

  此示例允许设备仅对两个事物执行指定操作。

# 经过身份验证的 Cognito 角色过于宽容
<a name="audit-chk-auth-cognito-role-permissive"></a>

附加到经身份验证的 Amazon Cognito 身份池角色的策略被视为过于宽容，因为它会授权执行以下 AWS IoT 操作：
+ 管理或修改事物。
+ 管理非事物相关的数据或资源。

或者，因为它授权在一系列设备上执行以下 AWS IoT 操作：
+ 读取事物管理数据。
+ 使用 MQTT 连接/发布/订阅预留主题（包括影子或任务执行数据）。
+ 使用 API 命令读取或修改影子或任务执行数据。

一般情况下，使用经身份验证的 Amazon Cognito 身份池角色进行连接的设备只应具备有限的权限，读取事物特定管理数据、发布和订阅事物特定 MQTT 主题，或使用 API 命令读取和修改与影子或任务执行数据相关的事物特定数据。

此检查在 CLI 和 API 中显示为 `AUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK`。

**严重性：**严重

## Details
<a name="audit-chk-auth-cognito-role-permissive-details"></a>

对于此检查，AWS IoT Device Defender 会审计在执行审计之前 31 天内用于连接到 AWS IoT 消息代理的所有 Amazon Cognito 身份池。经过身份验证或未经身份验证的 Amazon Cognito 身份连接的所有 Amazon Cognito 身份池都在审核范围内。

此检查发现不合规的经身份验证的 Amazon Cognito 身份池角色时，会返回以下原因代码：
+ ALLOWS\$1BROAD\$1ACCESS\$1TO\$1IOT\$1THING\$1ADMIN\$1READ\$1ACTIONS
+ ALLOWS\$1ACCESS\$1TO\$1IOT\$1NON\$1THING\$1ADMIN\$1ACTIONS
+ ALLOWS\$1ACCESS\$1TO\$1IOT\$1THING\$1ADMIN\$1WRITE\$1ACTIONS

## 为什么这非常重要
<a name="audit-chk-auth-cognito-role-permissive-why-it-matters"></a>

如果经身份验证的身份遭到破坏，它可能使用管理操作来修改账户设置、删除资源或获取对敏感数据的访问权限。

## 如何修复
<a name="audit-chk-auth-cognito-role-permissive-how-to-fix"></a>

附加到经过身份验证的 Amazon Cognito 身份池角色的策略应仅为设备授予执行任务所需的这些权限。我们建议您完成以下步骤：

1. 创建新的合规角色。

1. 创建新的 Amazon Cognito 身份池并为其附加合规角色。

1. 验证您的身份能否使用新池访问 AWS IoT。

1. 验证完成后，将合规角色附加到标记为不合规的 Amazon Cognito 身份池。

您还可以使用缓解操作实现以下目的：
+ 应用 `PUBLISH_FINDINGS_TO_SNS` 缓解操作，以实施自定义响应来响应 Amazon SNS 消息。

有关更多信息，请参阅 [缓解操作](dd-mitigation-actions.md)。

## 管理或修改事物。
<a name="audit-chk-auth-cognito-role-permissive-manage-things"></a>

以下 AWS IoT API 操作可用于管理或修改事物，因此不应该为通过经身份验证的 Amazon Cognito 身份池进行连接的设备授予执行以下操作的权限：
+ `AddThingToThingGroup` 
+ `AttachThingPrincipal` 
+ `CreateThing` 
+ `DeleteThing` 
+ `DetachThingPrincipal` 
+ `ListThings`
+ `ListThingsInThingGroup` 
+ `RegisterThing` 
+ `RemoveThingFromThingGroup` 
+ `UpdateThing` 
+ `UpdateThingGroupsForThing`

任何授权执行这些操作的角色，即便是在单一资源上执行这些操作，也会被视为不合规。

## 管理非事物对象
<a name="audit-chk-auth-cognito-role-permissive-manage-non-things"></a>

通过经身份验证的 Amazon Cognito 身份池进行连接的设备，不应该被授予执行除这些部分中所述之外的 AWS IoT API 操作的权限。要使用通过经身份验证 Amazon Cognito 身份池进行连接的应用程序来管理账户，请创建一个不供设备使用的单独身份池。

## 读取事物管理数据
<a name="audit-chk-auth-cognito-role-permissive-read-things-admin-data"></a>

以下 AWS IoT API 操作可用于读取事物数据，因此应该为通过经身份验证的 Amazon Cognito 身份池进行连接的设备授予仅对有限事物集执行以下操作的权限：
+ `DescribeThing`
+ `ListJobExecutionsForThing`
+ `ListThingGroupsForThing`
+ `ListThingPrincipals`
+ 不合规：

  ```
  arn:aws:iot:region:account-id:thing/*
  ```

  此示例允许设备对任何事物执行指定操作。
+ 合规：

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

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [ 
            "iot:DescribeThing",
            "iot:ListJobExecutionsForThing",
            "iot:ListThingGroupsForThing",
            "iot:ListThingPrincipals"
        ],
        "Resource": [
          "arn:aws:iot:us-east-1:123456789012:thing/MyThing"
        ]
      }
    ]
  }
  ```

------

  此示例允许设备仅对一个事物执行指定操作。
+ 合规：

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "iot:DescribeThing",
                  "iot:ListJobExecutionsForThing",
                  "iot:ListThingGroupsForThing",
                  "iot:ListThingPrincipals"
              ],
              "Resource": [
                  "arn:aws:iot:us-east-1:123456789012:thing/MyThing*"
              ]
          }
      ]
  }
  ```

------

  此示例之所以合规，是因为尽管该资源是使用通配符 (\$1) 指定的，但它的前面是特定字符串，这将仅限名称包含给定前缀的设备访问事物集。
+ 不合规：

  ```
  arn:aws:iot:region:account-id:thing/*
  ```

  此示例允许设备对任何事物执行指定操作。
+ 合规：

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

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [ 
            "iot:DescribeThing",
            "iot:ListJobExecutionsForThing",
            "iot:ListThingGroupsForThing",
            "iot:ListThingPrincipals"
        ],
        "Resource": [
          "arn:aws:iot:us-east-1:123456789012:thing/MyThing"
        ]
      }
    ]
  }
  ```

------

  此示例允许设备仅对一个事物执行指定操作。
+ 合规：

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "iot:DescribeThing",
                  "iot:ListJobExecutionsForThing",
                  "iot:ListThingGroupsForThing",
                  "iot:ListThingPrincipals"
              ],
              "Resource": [
                  "arn:aws:iot:us-east-1:123456789012:thing/MyThing*"
              ]
          }
      ]
  }
  ```

------

  此示例之所以合规，是因为尽管该资源是使用通配符 (\$1) 指定的，但它的前面是特定字符串，这将仅限名称包含给定前缀的设备访问事物集。

## 订阅/发布到 MQTT 主题
<a name="audit-chk-auth-cognito-role-permissive-mqtt-topic"></a>

MQTT 消息通过 AWS IoT 消息代理发送，并由设备用来执行许多不同的操作，包括访问和修改影子状态和任务执行状态。为设备授权以连接、发布或订阅 MQTT 消息的策略，应该限定对特定资源执行如下操作：

**Connect**  
+ 不合规：

  ```
  arn:aws:iot:region:account-id:client/*
  ```

  通配符 \$1 允许任何设备连接到 AWS IoT。

  ```
  arn:aws:iot:region:account-id:client/${iot:ClientId}
  ```

  除非 `iot:Connection.Thing.IsAttached` 在条件键中设置为 True，这相当于上例中的通配符 \$1。
+ 合规：

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

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "iot:Connect"
        ],
        "Resource": [
          "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
        ]
      }
    ]
  }
  ```

------

  资源规范包含与用于连接的设备名称匹配的变量，且条件语句通过检查 MQTT 客户端所用的证书是否与附加到使用此名称的事物的证书匹配，进一步限制权限。

**发布**  
+ 不合规：

  ```
  arn:aws:iot:region:account-id:topic/$aws/things/*/shadow/update
  ```

  此示例允许设备更新任何设备的影子（\$1 = 所有设备）。

  ```
  arn:aws:iot:region:account-id:topic/$aws/things/*
  ```

  此示例允许设备读取/更新/删除任何设备的影子。
+ 合规：

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "iot:Publish"
              ],
              "Resource": [
                  "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*"
              ]
          }
      ]
  }
  ```

------

  资源规范包含通配符，但仅匹配其事物名称用于连接的设备的任何影子相关主题。

**订阅**  
+ 不合规：

  ```
  arn:aws:iot:region:account-id:topicfilter/$aws/things/*
  ```

  此示例允许设备订阅为所有设备预留的影子或任务主题。

  ```
  arn:aws:iot:region:account-id:topicfilter/$aws/things/#
  ```

  与上一个示例相同，不过使用的是 \$1 通配符。

  ```
  arn:aws:iot:region:account-id:topicfilter/$aws/things/+/shadow/update
  ```

  此示例允许设备查看任何设备上的影子更新（\$1 = 所有设备）。
+ 合规：

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "iot:Subscribe"
              ],
              "Resource": [
                  "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*",
                  "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/jobs/*"
              ]
          }
      ]
  }
  ```

------

  资源规范包含通配符，但仅匹配其事物名称用于连接的设备的任何影子相关主题和任务相关主题。

**接收**  
+ 合规：

  ```
  arn:aws:iot:region:account-id:topicfilter/$aws/things/*
  ```

  这是合规的，因为设备只能从其有权订阅的主题接收消息。

## 读取或修改影子或任务数据
<a name="audit-chk-auth-cognito-role-permissive-shadow-job-data"></a>

为设备授予执行 API 操作权限以访问或修改设备影子或任务执行数据的策略，应该限定对特定资源执行以下操作。下面是一些 API 操作：
+ `DeleteThingShadow`
+ `GetThingShadow`
+ `UpdateThingShadow`
+ `DescribeJobExecution`
+ `GetPendingJobExecutions`
+ `StartNextPendingJobExecution`
+ `UpdateJobExecution`

**示例**
+ 不合规：

  ```
  arn:aws:iot:region:account-id:thing/*
  ```

  此示例允许设备对任何事物执行指定操作。
+ 合规：

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

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "iot:DeleteThingShadow",
          "iot:GetThingShadow",
          "iot:UpdateThingShadow",
          "iot:DescribeJobExecution",
          "iotjobsdata:DescribeJobExecution",
          "iotjobsdata:UpdateJobExecution"
        ],
        "Resource": [
          "arn:aws:iot:us-east-1:123456789012:thing/MyThing1",
          "arn:aws:iot:us-east-1:123456789012:thing/MyThing2"
        ]
      }
    ]
  }
  ```

------

  此示例允许设备仅对两个事物执行指定操作。

# AWS IoT 策略过于宽容
<a name="audit-chk-iot-policy-permissive"></a>

AWS IoT 策略提供的权限过于宽泛或不受限制。它为一系列设备授予发送或接收 MQTT 消息的权限，或为一系列设备授予访问或修改影子和任务执行数据的权限。

一般而言，针对某个设备的策略应该授予仅与该设备关联的资源的访问权限，而不应该牵涉其它设备，或只牵涉少量其他设备。除了某些例外情况，在此类策略中使用通配符（例如“\$1”）指定资源被视为过于宽泛或不受限制。

此检查在 CLI 和 API 中显示为 `IOT_POLICY_OVERLY_PERMISSIVE_CHECK`。

**严重性：**严重

## Details
<a name="audit-chk-iot-policy-permissive-details"></a>

此检查发现不合规的 AWS IoT 策略时，会返回以下原因代码：
+ ALLOWS\$1BROAD\$1ACCESS\$1TO\$1IOT\$1DATA\$1PLANE\$1ACTIONS

## 为什么这非常重要
<a name="audit-chk-iot-policy-permissive-why-it-matters"></a>

策略过于宽容的证书、Amazon Cognito 身份或事物组一旦遭到破坏，就会影响您的整个账户。攻击者可以使用此类宽泛的访问权限，读取或修改所有设备的影子、任务或任务执行数据。或者，攻击者可以使用已遭破坏的证书连接您网络中的恶意设备或发动 DDOS 攻击。

## 如何修复
<a name="audit-chk-iot-policy-permissive-how-to-fix"></a>

按照以下步骤来修复附加到事物、事物组或其它实体的任何不合规策略：

1. 使用 [CreatePolicyVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_CreatePolicyVersion.html) 创建新的兼容版本的策略。将 `setAsDefault` 标记设置为 True。（这可使此新版本适用于使用策略的所有实体。）

1. 使用 [ListTargetsForPolicy](https://docs.aws.amazon.com/iot/latest/apireference/API_ListTargetsForPolicy.html) 获取策略附加到的目标列表（证书、事物组），并确定组中包含的设备或使用证书进行连接的设备。

1. 验证所有关联的设备能否连接到 AWS IoT。如果设备无法连接，使用 [SetPolicyVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_SetPolicyVersion.html) 将默认策略回滚到之前的版本，修改策略，然后重试。

您可以使用缓解操作实现以下目的：
+ 对您的审计查找结果应用 `REPLACE_DEFAULT_POLICY_VERSION` 缓解操作以进行此更改。
+ 如果要实现自定义响应以响应 Amazon SNS 消息，请应用 `PUBLISH_FINDINGS_TO_SNS` 缓解操作。

有关更多信息，请参阅 [缓解操作](dd-mitigation-actions.md)。

使用 [AWS IoT Core 策略变量](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-variables.html)在策略中动态引用 AWS IoT 资源。

## MQTT 权限
<a name="audit-chk-iot-policy-permissive-mqtt-permissions"></a>

MQTT 消息通过 AWS IoT 消息代理发送，并由设备用来执行多个操作，包括访问和修改影子状态和任务执行状态。为设备授权以连接、发布或订阅 MQTT 消息的策略，应该限定对特定资源执行如下操作：

**Connect**  
+ 不合规：

  ```
  arn:aws:iot:region:account-id:client/*
  ```

  通配符 \$1 允许任何设备连接到 AWS IoT。

  ```
  arn:aws:iot:region:account-id:client/${iot:ClientId}
  ```

  除非 `iot:Connection.Thing.IsAttached` 在条件键中设置为 True，这相当于上例中的通配符 \$1。
+ 合规：

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

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "iot:Connect"
        ],
        "Resource": [
          "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
        ]
      }
    ]
  }
  ```

------

  资源规范包含与用于连接的设备名称匹配的变量。条件语句通过检查 MQTT 客户端所用的证书是否与附加到使用此名称的事物的证书匹配，进一步限制权限。

**发布**  
+ 不合规：

  ```
  arn:aws:iot:region:account-id:topic/$aws/things/*/shadow/update
  ```

  此示例允许设备更新任何设备的影子（\$1 = 所有设备）。

  ```
  arn:aws:iot:region:account-id:topic/$aws/things/*
  ```

  此示例允许设备读取、更新或删除任何设备的影子。
+ 合规：

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "iot:Publish"
              ],
              "Resource": [
                  "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*"
              ]
          }
      ]
  }
  ```

------

  资源规范包含通配符，但仅匹配其事物名称用于连接的设备的任何影子相关主题。

**订阅**  
+ 不合规：

  ```
  arn:aws:iot:region:account-id:topicfilter/$aws/things/*
  ```

  此示例允许设备订阅为所有设备预留的影子或任务主题。

  ```
  arn:aws:iot:region:account-id:topicfilter/$aws/things/*
  ```

  与上一个示例相同，不过使用的是 \$1 通配符。

  ```
  arn:aws:iot:region:account-id:topicfilter/$aws/things/+/shadow/update
  ```

  此示例允许设备查看任何设备上的影子更新（\$1 = 所有设备）。
+ 合规：

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "iot:Subscribe"
              ],
              "Resource": [
                  "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*",
                  "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/jobs/*"
              ]
          }
      ]
  }
  ```

------

  资源规范包含通配符，但仅匹配其事物名称用于连接的设备的任何影子相关主题和任务相关主题。

**接收**  
+ 合规：

  ```
  arn:aws:iot:region:account-id:topic/$aws/things/*
  ```

  这是合规的，因为设备只能从其有权订阅的主题接收消息。

## 影子和任务权限
<a name="shadow-job-permissions"></a>

为设备授予执行 API 操作权限以访问或修改设备影子或任务执行数据的策略，应该限定对特定资源执行以下操作。下面是一些 API 操作：
+ `DeleteThingShadow`
+ `GetThingShadow`
+ `UpdateThingShadow`
+ `DescribeJobExecution`
+ `GetPendingJobExecutions`
+ `StartNextPendingJobExecution`
+ `UpdateJobExecution`

**示例**
+ 不合规：

  ```
  arn:aws:iot:region:account-id:thing/*
  ```

  此示例允许设备对任何事物执行指定操作。
+ 合规：

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

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [ 
            "iot:DeleteThingShadow",
            "iot:GetThingShadow",
            "iot:UpdateThingShadow",
            "iotjobsdata:DescribeJobExecution",
            "iotjobsdata:GetPendingJobExecutions",
            "iotjobsdata:StartNextPendingJobExecution",
            "iotjobsdata:UpdateJobExecution"
        ],
        "Resource": [
          "arn:aws:iot:us-east-1:123456789012:thing/MyThing1",
          "arn:aws:iot:us-east-1:123456789012:thing/MyThing2"
        ]
      }
    ]
  }
  ```

------

  此示例允许设备仅对两个事物执行指定操作。

# AWS IoT 策略可能配置错误
<a name="audit-chk-iot-misconfigured-policies"></a>

已确定某项 AWS IoT 策略可能配置错误。错误配置的策略，包括过于宽松的策略，可能会导致安全事件，例如允许设备访问意外资源。

**可能配置错误的 AWS IoT 策略**检查是一种警告，提醒您确保在更新策略之前仅允许预期的操作。

在此 CLI 和 API 中，该检查显示为 `IOT_POLICY_POTENTIAL_MISCONFIGURATION_CHECK`。

**严重性：**中

## Details
<a name="audit-chk-iot-misconfigured-policies-details"></a>

当此检查发现可能配置错误的 AWS IoT 策略时，AWS IoT 会返回以下原因代码：
+ POLICY\$1CONTAINS\$1MQTT\$1WILDCARDS\$1IN\$1DENY\$1STATEMENT
+ TOPIC\$1FILTERS\$1INTENDED\$1TO\$1DENY\$1ALLOWED\$1USING\$1WILDCARDS

## 为什么这非常重要
<a name="audit-chk-iot-misconfigured-policies-why-it-matters"></a>

错误配置的策略可能会向设备提供超出所需的权限，从而导致意外后果。我们建议仔细考虑该政策，以限制对资源的访问并防止安全威胁。

### 策略在拒绝语句示例中包含 MQTT 通配符
<a name="example-section-id"></a>

**可能配置错误的 AWS IoT 策略**检查会检查 deny 语句中是否有 MQTT 通配符（`+` 或 `#`）。通配符被 AWS IoT 策略视为文字字符串，可能会使策略过于宽松。

以下示例旨在通过在策略中使用 MQTT 通配符 `#` 来拒绝订阅与 `building/control_room` 相关的主题。但是，MQTT 通配符在 AWS IoT 策略中没有通配符含义，设备可以订阅 `building/control_room/data1`。

**可能配置错误的 AWS IoT 策略**检查将使用原因代码 `POLICY_CONTAINS_MQTT_WILDCARDS_IN_DENY_STATEMENT` 标记此策略。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/building/*"
        },
        {
            "Effect": "Deny",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/building/control_room/#"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Receive",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topic/building/*"
        }
    ]
}
```

------

以下是正确配置的策略的示例。设备无权订阅 `building/control_room/` 的子主题，也无权接收来自 `building/control_room/` 的子主题的消息。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:Subscribe",
      "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/building/*"
    },
    {
      "Effect": "Deny",
      "Action": "iot:Subscribe",
      "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/building/control_room/*"
    },
    {
      "Effect": "Allow",
      "Action": "iot:Receive",
      "Resource": "arn:aws:iot:us-east-1:123456789012:topic/building/*"
    },
    {
      "Effect": "Deny",
      "Action": "iot:Receive",
      "Resource": "arn:aws:iot:us-east-1:123456789012:topic/building/control_room/*"
    }
  ]
}
```

------

### 旨在拒绝使用通配符允许的主题筛选条件示例
<a name="example-section-id2"></a>

以下示例策略旨在通过拒绝资源 `building/control_room/*` 来拒绝订阅与 `building/control_room` 相关的主题。但是，设备可以发送 `building/#` 订阅请求，并接收来自与 `building` 相关的所有主题的消息，包括 `building/control_room/data1`。

**可能配置错误的 AWS IoT 策略**检查将使用原因代码 `TOPIC_FILTERS_INTENDED_TO_DENY_ALLOWED_USING_WILDCARDS` 标记此策略。

以下示例策略有权接收关于 `building/control_room topics` 的消息：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/building/*"
        },
        {
            "Effect": "Deny",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/building/control_room/*"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Receive",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topic/building/*"
        }
    ]
}
```

------

以下是正确配置的策略的示例。设备无权订阅 `building/control_room/` 的子主题，也无权接收来自 `building/control_room/` 的子主题的消息。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/building/*"
        },
        {
            "Effect": "Deny",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/building/control_room/*"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Receive",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topic/building/*"
        },
        {
            "Effect": "Deny",
            "Action": "iot:Receive",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topic/building/control_room/*"
        }
    ]
}
```

------

**注意**  
此检查可能会误报。我们建议您评估所有已标记的策略，并使用审计抑制功能标记误报资源。

## 如何修复
<a name="audit-chk-iot-misconfigured-policies-how-to-fix"></a>

此检查会标记可能配置错误的策略，因此可能会出现误报。使用[审计抑制功能](audit-finding-suppressions.md)标记所有误报，这样以后就不会再标记误报。

您可以按照以下步骤来修复附加到事物、事物组或其他实体的任何不合规策略：

1. 使用 [CreatePolicyVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_CreatePolicyVersion.html) 创建新的兼容版本的策略。将 `setAsDefault` 标记设置为 True。（这可使此新版本适用于使用策略的所有实体。）

   有关为常见用例创建 AWS IoT 策略的示例，请参阅 *AWS IoT Core 开发者指南*中的[发布/订阅策略示例](https://docs.aws.amazon.com/iot/latest/developerguide/pub-sub-policy.html)。

1. 验证所有关联的设备能否连接到 AWS IoT。如果设备无法连接，使用 [SetPolicyVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_SetPolicyVersion.html) 将默认策略回滚到之前的版本，修改策略，然后重试。

您可以使用缓解操作实现以下目的：
+ 对您的审计查找结果应用 `REPLACE_DEFAULT_POLICY_VERSION` 缓解操作以进行此更改。
+ 如果要实现自定义响应以响应 Amazon SNS 消息，请应用 `PUBLISH_FINDINGS_TO_SNS` 缓解操作。

有关更多信息，请参阅 [缓解操作](dd-mitigation-actions.md)。

使用《AWS IoT Core 开发人员指南》**中的 [IoT Core 策略变量](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-variables.html)在策略中动态引用 AWS IoT 资源。

# 角色别名过于宽容
<a name="audit-chk-iot-role-alias-permissive"></a>

AWS IoT 角色别名提供了一种机制，让连接的设备使用 X.509 证书对 AWS IoT 进行身份验证，然后从与 AWS IoT 角色别名关联的 IAM 角色获取短期 AWS 凭证。必须使用带有身份验证上下文变量的访问策略缩小这些凭证的权限范围。如果您的策略配置不当，您可能会使自己暴露在权限升级攻击中。此审计检查确保 AWS IoT 角色别名提供的临时凭证不会过于宽松。

如果发现以下其中一种条件，将触发此检查：
+ 该策略针对此角色别名（例如，“iot:\$1”、“dynamodb:\$1”、“iam:\$1” 等）在过去一年中使用的任何服务提供管理权限。
+ 该策略提供对事物元数据操作的广泛访问权限、对受限 AWS IoT 操作的访问权限或对 AWS IoT 数据层面操作的广泛访问权限。
+ 该策略提供对“iam”、“cloudtrail”、“guardduty”、“inspector”或“trustedadvisor”等安全审计服务的访问权限。

此检查在 CLI 和 API 中显示为 `IOT_ROLE_ALIAS_OVERLY_PERMISSIVE_CHECK`。

**严重性：**严重

## Details
<a name="audit-chk-iot-role-alias-permissive-details"></a>

此检查发现不合规的 IoT 策略时，会返回以下原因代码：
+ ALLOWS\$1BROAD\$1ACCESS\$1TO\$1USED\$1SERVICES
+ ALLOWS\$1ACCESS\$1TO\$1SECURITY\$1AUDITING\$1SERVICES
+ ALLOWS\$1BROAD\$1ACCESS\$1TO\$1IOT\$1THING\$1ADMIN\$1READ\$1ACTIONS
+ ALLOWS\$1ACCESS\$1TO\$1IOT\$1NON\$1THING\$1ADMIN\$1ACTIONS
+ ALLOWS\$1ACCESS\$1TO\$1IOT\$1THING\$1ADMIN\$1WRITE\$1ACTIONS
+ ALLOWS\$1BROAD\$1ACCESS\$1TO\$1IOT\$1DATA\$1PLANE\$1ACTIONS

## 为什么这非常重要
<a name="audit-chk-iot-role-alias-permissive-why-it-matters"></a>

通过将权限限制为设备执行其正常操作所需的权限，您可以降低设备受到威胁时账户的风险。

## 如何修复
<a name="audit-chk-iot-role-alias-permissive-how-to-fix"></a>

按照以下步骤来修复附加到事物、事物组或其它实体的任何不合规策略：

1. 按照[使用 AWS IoT Core 凭证提供商授予直接调用 AWS 服务的权限](https://docs.aws.amazon.com/iot/latest/developerguide/authorizing-direct-aws.html)中的步骤对您的角色别名应用限制更严的策略。

您可以使用缓解操作实现以下目的：
+ 如果要实现自定义操作以响应 Amazon SNS 消息，请应用 `PUBLISH_FINDINGS_TO_SNS` 缓解操作。

有关更多信息，请参阅 [缓解操作](dd-mitigation-actions.md)。

# 角色别名允许访问未使用的服务
<a name="audit-chk-role-alias-unused-svcs"></a>

AWS IoT 角色别名提供了一种机制，让连接的设备使用 X.509 证书对 AWS IoT 进行身份验证，然后从与 AWS IoT 角色别名关联的 IAM 角色获取短期 AWS 凭证。必须使用带有身份验证上下文变量的访问策略缩小这些凭证的权限范围。如果您的策略配置不当，您可能会使自己暴露在权限升级攻击中。此审计检查确保 AWS IoT 角色别名提供的临时凭证不会过于宽松。

如果角色别名有权访问过去一年未用于 AWS IoT 设备的服务，则会触发此检查。例如，如果您的 IAM 角色链接到过去一年中仅使用了 AWS IoT 的角色别名，但附加到角色的策略也授予了对 `"iam:getRole"` 和 `"dynamodb:PutItem"` 的权限，则审计报告问题。

此检查在 CLI 和 API 中显示为 `IOT_ROLE_ALIAS_ALLOWS_ACCESS_TO_UNUSED_SERVICES_CHECK`。

**严重性：**中

## Details
<a name="audit-chk-role-alias-unused-svcs-details"></a>

此检查发现不合规的 AWS IoT 策略时，会返回以下原因代码：
+ ALLOWS\$1ACCESS\$1TO\$1UNUSED\$1SERVICES

## 为什么这非常重要
<a name="audit-chk-role-alias-unused-svcs-why-it-matters"></a>

通过将权限限制为设备执行其正常操作所需的服务，您可以降低设备受到威胁时账户的风险。

## 如何修复
<a name="audit-chk-role-alias-unused-svcs-how-to-fix"></a>

按照以下步骤来修复附加到事物、事物组或其它实体的任何不合规策略：

1. 按照[使用 AWS IoT Core 凭证提供商授予直接调用 AWS 服务的权限](https://docs.aws.amazon.com/iot/latest/developerguide/authorizing-direct-aws.html)中的步骤对您的角色别名应用限制更严的策略。

您可以使用缓解操作实现以下目的：
+ 如果要实现自定义操作以响应 Amazon SNS 消息，请应用 `PUBLISH_FINDINGS_TO_SNS` 缓解操作。

有关更多信息，请参阅 [缓解操作](dd-mitigation-actions.md)。

# CA 证书即将过期
<a name="audit-chk-ca-cert-approaching-expiration"></a>

CA 证书将在 30 天内过期或已经过期。

此检查在 CLI 和 API 中显示为 `CA_CERTIFICATE_EXPIRING_CHECK`。

**严重性：**中

## Details
<a name="audit-chk-ca-cert-approaching-expiration-details"></a>

此检查适用于状态为“ACTIVE”或“PENDING\$1TRANSFER”的 CA 证书。

此检查发现不合规的 CA 证书时，会返回以下原因代码：
+ CERTIFICATE\$1APPROACHING\$1EXPIRATION
+ CERTIFICATE\$1PAST\$1EXPIRATION

## 为什么这非常重要
<a name="audit-chk-ca-cert-approaching-expiration-why-it-matters"></a>

已过期的 CA 证书不应被用于签发新设备证书。

## 如何修复
<a name="audit-chk-ca-cert-approaching-expiration-how-to-fix"></a>

有关如何继续，请参阅安全最佳实践。您可能需要：

1. 向 AWS IoT 注册新的 CA 证书。

1. 验证能否使用新的 CA 证书签发设备证书。

1. 使用 [UpdateCACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCACertificate.html) 在 AWS IoT 中将旧的 CA 证书标记为“INACTIVE”。您还可以使用缓解操作实现以下目的：
   + 对您的审计查找结果应用 `UPDATE_CA_CERTIFICATE` 缓解操作以进行此更改。
   + 如果要实现自定义响应以响应 Amazon SNS 消息，请应用 `PUBLISH_FINDINGS_TO_SNS` 缓解操作。

   有关更多信息，请参阅 [缓解操作](dd-mitigation-actions.md)。

# 冲突的 MQTT 客户端 ID
<a name="audit-chk-conflicting-client-ids"></a>

多个设备使用同一客户端 ID 连接。

此检查在 CLI 和 API 中显示为 `CONFLICTING_CLIENT_IDS_CHECK`。

**严重性：**高

## Details
<a name="audit-chk-conflicting-client-ids-details"></a>

使用同一客户端 ID 建立了多个连接，从而导致已连接的设备断开连接。MQTT 规范只允许每个客户端 ID 有一个活动连接，因此当另一个设备使用同一客户端 ID 连接时，它会使前一个连接断开。

在按需审核过程中进行此检查时，它会检查在审核开始之前 31 天内客户端 ID 是如何用于连接的。对于计划审核，此检查会查看从上次运行审核到该审核实例开始期间的数据。如果您已在检查期间采取措施来缓解这种状况，请记录连接/连接断开的时间，以判断问题是否持续存在。

此检查发现不合规问题时，会返回以下原因代码：
+ DUPLICATE\$1CLIENT\$1ID\$1ACROSS\$1CONNECTIONS

此检查返回的查找结果还包含用于连接的客户端 ID、委托人 ID 和连接断开次数。最近的结果列在最前面。

## 为什么这非常重要
<a name="audit-chk-conflicting-client-ids-why-it-matters"></a>

ID 相冲突的设备将被迫不断重新连接，这可能导致消息丢失或致使设备无法连接。

这可能表示设备或设备的凭证已遭破坏，并可能是 DDoS 攻击的一部分。也有可能是设备未在账户中得到正确配置，或者设备连接效果不佳，被迫每分钟重新连接多次。

## 如何修复
<a name="audit-chk-conflicting-client-ids-how-to-fix"></a>

将每个设备注册为 AWS IoT 中的唯一事物，并使用事物名称作为客户端 ID 进行连接。或者，在通过 MQTT 连接设备时使用 UUID 作为客户端 ID。您还可以使用缓解操作实现以下目的：
+ 如果要实现自定义响应以响应 Amazon SNS 消息，请应用 `PUBLISH_FINDINGS_TO_SNS` 缓解操作。

有关更多信息，请参阅 [缓解操作](dd-mitigation-actions.md)。

# 设备证书即将过期
<a name="audit-chk-device-cert-approaching-expiration"></a>

设备证书将在配置的阈值期限内到期或已到期。证书到期检查阈值可以配置在 30 天（最短）到 3652 天（10 年，最长）之间，默认值为 30 天。

此检查在 CLI 和 API 中显示为 `DEVICE_CERTIFICATE_EXPIRING_CHECK`。

**严重性：**中

## Details
<a name="audit-chk-device-cert-approaching-expiration-details"></a>

此检查适用于状态为“ACTIVE”或“PENDING\$1TRANSFER”的设备证书。

此检查发现不合规的设备证书时，会返回以下原因代码：
+ CERTIFICATE\$1APPROACHING\$1EXPIRATION
+ CERTIFICATE\$1PAST\$1EXPIRATION

## 为什么这非常重要
<a name="audit-chk-device-cert-approaching-expiration-why-it-matters"></a>

设备证书过期后不应再投入使用。

## 配置设备证书到期检查
<a name="w2aab9c11c43c13"></a>

此配置使您能够监控设备队列中即将到期的证书和接收其提醒。例如，如果您想在证书到期的 30 天内收到通知，则可以按以下方式配置检查：

```
{
    "roleArn": "your-audit-role-arn",
    "auditCheckConfigurations": {
        "DEVICE_CERTIFICATE_EXPIRING_CHECK": {
            "enabled": true,
            "configuration": {
                "CERT_EXPIRATION_THRESHOLD_IN_DAYS": "30"
            }
        }
    }
}
```

## 如何修复
<a name="audit-chk-device-cert-approaching-expiration-how-to-fix"></a>

有关如何继续，请参阅安全最佳实践。您可能需要：

1. 预置新证书并将它附加到设备。

1. 验证新证书是否有效以及设备能否使用它进行连接。

1. 使用 [UpdateCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCertificate.html) 在 AWS IoT 中将旧证书标记为“INACTIVE”。您还可以使用缓解操作实现以下目的：
   + 对您的审计查找结果应用 `UPDATE_DEVICE_CERTIFICATE` 缓解操作以进行此更改。
   + 应用 `ADD_THINGS_TO_THING_GROUP` 缓解操作，以将设备添加到可以对其执行操作的组。
   + 如果要实现自定义响应以响应 Amazon SNS 消息，请应用 `PUBLISH_FINDINGS_TO_SNS` 缓解操作。

   有关更多信息，请参阅 [缓解操作](dd-mitigation-actions.md)。

1. 将旧证书从设备分离。（请参阅 [DetachThingPrincipal](https://docs.aws.amazon.com/iot/latest/apireference/API_DetachThingPrincipal.html)。）

# 设备证书期限检查
<a name="device-certificate-age-check"></a>

当设备证书处于活动状态的天数大于或等于您指定的天数时，此审计检查会提醒您。此检查有助于您随时了解证书的状态，无论证书何时达到其使用寿命的终点，都能定期及时采取行动，通过降低证书泄露的风险来提高安全性。

证书期限检查阈值可以配置在 30 天（最短）到 3652 天（10 年，最长）之间，默认值为 365 天。

此检查在 CLI 和 API 中显示为 `DEVICE_CERTIFICATE_AGE_CHECK`。默认情况下，此检查处于禁用状态。严重性：**低** 

## Details
<a name="w2aab9c11c45b9"></a>

此检查适用于状态为“ACTIVE”或“PENDING\$1TRANSFER”的设备证书。此检查发现不合规的设备证书时，会返回以下原因代码：
+ CERTIFICATE\$1PAST\$1AGE\$1THRESHOLD

## 配置设备证书期限检查
<a name="w2aab9c11c45c11"></a>

此配置可让您根据设备队列的特定需求定制证书轮换提醒，有助于您在所有设备上保持强大的安全态势。您可以使用 `UpdateAccountAuditConfiguration` API 配置此检查。例如，如果您希望在证书处于活动状态超过 365 天时收到提醒，可以按如下方式配置检查：

```
{
    "roleArn": "your-audit-role-arn",
    "auditCheckConfigurations": {
        "DEVICE_CERTIFICATE_AGE_CHECK": {
            "enabled": true,
            "configuration": {
                "CERT_AGE_THRESHOLD_IN_DAYS": "365"
            }
        }
    }
}
```

# 已撤销的设备证书仍处于激活状态
<a name="audit-chk-revoked-device-cert"></a>

已吊销的设备证书仍处于活动状态。

此检查在 CLI 和 API 中显示为 `REVOKED_DEVICE_CERTIFICATE_STILL_ACTIVE_CHECK`。

**严重性：**中

## Details
<a name="audit-chk-revoked-device-cert-details"></a>

设备证书位于其 CA 的[证书吊销列表](https://en.wikipedia.org/wiki/Certificate_revocation_list)中，但它在 AWS IoT 中仍处于活动状态。

此检查适用于状态为“ACTIVE”或“PENDING\$1TRANSFER”的设备证书。

此检查发现不合规问题时，会返回以下原因代码：
+ CERTIFICATE\$1REVOKED\$1BY\$1ISSUER

## 为什么这非常重要
<a name="audit-chk-revoked-device-cert-why-it-matters"></a>

设备证书通常因为遭到破坏而被吊销。证书也可能因为错误或疏忽而尚未在 AWS IoT 中吊销。

## 如何修复
<a name="audit-chk-revoked-device-cert-how-to-fix"></a>

验证设备证书是否已遭破坏。如果已遭破坏，请遵照安全最佳实践来缓解此情况。您可能需要：

1. 为设备预置新证书。

1. 验证新证书是否有效以及设备能否使用它进行连接。

1. 使用 [UpdateCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCertificate.html) 在 AWS IoT 中将旧证书标记为“REVOKED”。您还可以使用缓解操作实现以下目的：
   + 对您的审计查找结果应用 `UPDATE_DEVICE_CERTIFICATE` 缓解操作以进行此更改。
   + 应用 `ADD_THINGS_TO_THING_GROUP` 缓解操作，以将设备添加到可以对其执行操作的组。
   + 如果要实现自定义响应以响应 Amazon SNS 消息，请应用 `PUBLISH_FINDINGS_TO_SNS` 缓解操作。

   有关更多信息，请参阅 [缓解操作](dd-mitigation-actions.md)。

1. 将旧证书从设备分离。（请参阅 [DetachThingPrincipal](https://docs.aws.amazon.com/iot/latest/apireference/API_DetachThingPrincipal.html)。）

# 日志记录已禁用
<a name="audit-chk-logging-disabled"></a>

AWS IoTAmazon CloudWatch 中未启用 日志。验证 V1 和 V2 日志记录。

此检查在 CLI 和 API 中显示为 `LOGGING_DISABLED_CHECK`。

**严重性：**低

## Details
<a name="audit-chk-logging-disabled-details"></a>

此检查发现不合规问题时，会返回以下原因代码：
+ LOGGING\$1DISABLED

## 为什么这非常重要
<a name="audit-chk-logging-disabled-why-it-matters"></a>

借助 CloudWatch 中的 AWS IoT 日志，您可以了解 AWS IoT 中的行为，包括身份验证失败、意外的连接和连接断开，这些行为可能表明设备遭到破坏。

## 如何修复
<a name="audit-chk-logging-disabled-how-to-fix"></a>

在 CloudWatch 中启用 AWS IoT 日志。请参阅《AWS IoT Core 开发人员指南》**中的[日志记录和监控](https://docs.aws.amazon.com/iot/latest/developerguide/security-logging.html)。您还可以使用缓解操作实现以下目的：
+ 对您的审计查找结果应用 `ENABLE_IOT_LOGGING` 缓解操作以进行此更改。
+ 如果要实现自定义响应以响应 Amazon SNS 消息，请应用 `PUBLISH_FINDINGS_TO_SNS` 缓解操作。

有关更多信息，请参阅 [缓解操作](dd-mitigation-actions.md)。

# 审核命令
<a name="AuditCommands"></a>

## 管理审核设置
<a name="AuditCommandsManageSettings"></a>

使用`UpdateAccountAuditConfiguration` 为账户配置审核设置。通过此命令，您可以启用希望用于审核、设置可选通知及配置权限的检查。

使用 `DescribeAccountAuditConfiguration` 检查这些设置。

使用 `DeleteAccountAuditConfiguration` 删除审核设置。这会还原所有默认值，并有效地禁用审核，因为所有检查默认处于禁用状态。

### UpdateAccountAuditConfiguration
<a name="dd-api-iot-UpdateAccountAuditConfiguration"></a>

针对此账户配置或重新配置 Device Defender 审核设置。设置包括审核通知的发送方式以及启用或禁用的审核检查类型。

 **摘要**

```
aws iot  update-account-audit-configuration \
    [--role-arn <value>] \
    [--audit-notification-target-configurations <value>] \
    [--audit-check-configurations <value>]  \
    [--cli-input-json <value>] \
    [--generate-cli-skeleton]
```

 `cli-input-json` 格式

```
{
  "roleArn": "string",
  "auditNotificationTargetConfigurations": {
    "string": {
      "targetArn": "string",
      "roleArn": "string",
      "enabled": "boolean"
    }
  },
  "auditCheckConfigurations": {
    "string": {
      "enabled": "boolean"
    }
  }
}
```


**`cli-input-json` 字段**  

|  名称 |  类型 |  描述 | 
| --- | --- | --- | 
|  roleArn |  字符串  最大长度：2048，最小长度：20  |  角色的 ARN，该角色授权 AWS IoT 在执行审核时访问设备、策略、证书及其它项相关信息。  | 
|  auditNotificationTargetConfigurations |  映射 |  审核通知要发送到的目标的相关信息。 | 
|  targetArn |  字符串 |  审核通知要发送到的目标（SNS 主题）的 ARN。 | 
|  roleArn |  字符串  最大长度：2048，最小长度：20  |  可授权向目标发送通知的角色的 ARN。 | 
|  已启用 |  布尔值 |  如果已启用向目标发送通知，则为 true。 | 
|  auditCheckConfigurations |  映射 |  为此账户指定要启用和禁用的审核检查。使用 `DescribeAccountAuditConfiguration` 查看所有检查的列表，包括当前已启用的检查。 某些检查在启用后，可能会立即启动某些数据收集。如果禁用某项检查，则将删除迄今为止收集的与该检查有关的所有数据。 任何计划审核所使用的检查无法禁用。必须先从计划审核中删除检查，或删除计划审核自身。 第一次调用 `UpdateAccountAuditConfiguration` 时，必须提供此参数，且必须至少指定一个已启用的检查。  | 
|  已启用 |  布尔值 |  如果已为此账户启用审核检查，则为 true。 | 
|  configuration |  映射  |  （可选）特定审计检查的自定义配置，例如 `CERT_AGE_THRESHOLD_IN_DAYS` 和 `CERT_EXPIRATION_THRESHOLD_IN_DAYS`，可让您定义想何时收到有关证书期限和即将到期的提醒。  | 

输出

无

 **错误**

`InvalidRequestException`  
请求的内容无效。

`ThrottlingException`  
速率超过限制。

`InternalFailureException`  
出现意外错误。

### DescribeAccountAuditConfiguration
<a name="dd-api-iot-DescribeAccountAuditConfiguration"></a>

获取此账户的 Device Defender 审核设置信息。设置包括审核通知的发送方式以及启用或禁用的审核检查类型。

 **摘要**

```
aws iot  describe-account-audit-configuration  \
    [--cli-input-json <value>] \
    [--generate-cli-skeleton]
```

 `cli-input-json` 格式

```
{
}
```

输出

```
{
  "roleArn": "string",
  "auditNotificationTargetConfigurations": {
    "string": {
      "targetArn": "string",
      "roleArn": "string",
      "enabled": "boolean"
    }
  },
  "auditCheckConfigurations": {
    "string": {
      "enabled": "boolean"
    }
  }
}
```


**CLI 输出字段**  

|  名称 |  类型 |  描述 | 
| --- | --- | --- | 
|  roleArn |  字符串  最大长度：2048，最小长度：20  |  角色的 ARN，该角色授权 AWS IoT 在执行审核时访问设备、策略、证书及其它项相关信息。 第一次调用 `UpdateAccountAuditConfiguration` 时，必须提供此参数。  | 
|  auditNotificationTargetConfigurations |  映射 |  有关此账户的审核通知要发送到的目标的相关信息。  | 
|  targetArn |  字符串 |  审核通知要发送到的目标（SNS 主题）的 ARN。 | 
|  roleArn |  字符串  最大长度：2048，最小长度：20  |  可授权向目标发送通知的角色的 ARN。 | 
|  已启用 |  布尔值 |  如果已启用向目标发送通知，则为 true。 | 
|  auditCheckConfigurations |  映射 |  针对此账户启用和禁用的审核检查。 | 
|  已启用 |  布尔值 |  如果已为此账户启用审核检查，则为 true。 | 
|  configuration |  映射 |  （可选）为某些审计检查提供特定配置，例如证书支持的最大期限或应触发提醒的到期前天数。 | 

 **错误**

`ThrottlingException`  
速率超过限制。

`InternalFailureException`  
出现意外错误。

### DeleteAccountAuditConfiguration
<a name="dd-api-iot-DeleteAccountAuditConfiguration"></a>

还原此账户的默认 Device Defender 审核设置。您输入的所有配置数据将被删除，所有审计检查均重置为已禁用。

 **摘要**

```
aws iot  delete-account-audit-configuration \
    [--delete-scheduled-audits | --no-delete-scheduled-audits]  \
    [--cli-input-json <value>] \
    [--generate-cli-skeleton]
```

 `cli-input-json` 格式

```
{
  "deleteScheduledAudits": "boolean"
}
```


**`cli-input-json` 字段**  

|  名称 |  类型 |  描述 | 
| --- | --- | --- | 
|  deleteScheduledAudits |  布尔值 |  如果为 True，则所有计划审核都将被删除。 | 

输出

无

 **错误**

`InvalidRequestException`  
请求的内容无效。

`ResourceNotFoundException`  
指定的资源不存在。

`ThrottlingException`  
速率超过限制。

`InternalFailureException`  
出现意外错误。

## 计划审核
<a name="device-defender-AuditCommandsManageSchedules"></a>

使用 `CreateScheduledAudit` 创建一个或多个计划审核。通过此命令，您可以指定在审核期间要执行的检查以及审核应该运行的频率。

使用 `ListScheduledAudits` 和 `DescribeScheduledAudit` 跟踪计划审核。

使用 `UpdateScheduledAudit` 更改现有的计划审核，或使用 `DeleteScheduledAudit` 将其删除。

### CreateScheduledAudit
<a name="dd-api-iot-CreateScheduledAudit"></a>

创建计划审核，使之按指定的时间间隔运行。

 **摘要**

```
aws iot  create-scheduled-audit \
    --frequency <value> \
    [--day-of-month <value>] \
    [--day-of-week <value>] \
    --target-check-names <value> \
    [--tags <value>] \
    --scheduled-audit-name <value>  \
    [--cli-input-json <value>] \
    [--generate-cli-skeleton]
```

 `cli-input-json` 格式

```
{
  "frequency": "string",
  "dayOfMonth": "string",
  "dayOfWeek": "string",
  "targetCheckNames": [
    "string"
  ],
  "tags": [
    {
      "Key": "string",
      "Value": "string"
    }
  ],
  "scheduledAuditName": "string"
}
```


**`cli-input-json` 字段**  

|  名称 |  类型 |  描述 | 
| --- | --- | --- | 
|  frequency |  字符串 |  计划审核的运行频率。可以是以下任一值：“DAILY”、“WEEKLY”、“BIWEEKLY”或“MONTHLY”。每个审核的实际开始时间取决于系统。  枚举：DAILY \$1 WEEKLY \$1 BIWEEKLY \$1 MONTHLY  | 
|  dayOfMonth |  字符串  模式：^([1-9]\$1[12][0-9]\$13[01])\$1\$1^LAST\$1  |  运行计划审核当月的具体日期。可以是“1”到“31”的任意值或“LAST”。如果 `frequency` 参数设置为“MONTHLY”，则此字段为必填字段。如果指定第 29-31 日，但当月没有那么多天，那么系统会在当月的最后一天运行审核。  | 
|  dayOfWeek |  字符串 |  运行计划审核当周的具体日期。可以是以下任一值：“SUN”、“MON”、“TUE”、“WED”、“THU”、“FRI”或“SAT”。如果 `frequency` 参数段设置为“WEEKLY”或“BIWEEKLY”，则此字段为必填字段。  枚举：SUN \$1 MON \$1 TUE \$1 WED \$1 THU \$1 FRI \$1 SAT  | 
|  targetCheckNames |  列表  成员：AuditCheckName  |  计划审核期间执行的检查。账户必须已启用检查。（使用 `DescribeAccountAuditConfiguration` 查看所有检查的列表，包括已启用的检查，或使用 `UpdateAccountAuditConfiguration` 选择启用的检查。）  | 
|  tags |  列表  成员：Tag  java 类：java.util.List  |  可用于管理计划审核的元数据。 | 
|  键 |  字符串 |  标签的键。 | 
|  值 |  字符串 |  标签的值。 | 
|  scheduledAuditName |  字符串  最大长度：128，最小长度：1  模式：[a-zA-Z0-9\$1-]\$1  |  要为计划审核指定的名称。（最多 128 个字符） | 

输出

```
{
  "scheduledAuditArn": "string"
}
```


**CLI 输出字段**  

|  名称 |  类型 |  描述 | 
| --- | --- | --- | 
|  scheduledAuditArn |  字符串 |  计划审核的 ARN。 | 

 **错误**

`InvalidRequestException`  
请求的内容无效。

`ThrottlingException`  
速率超过限制。

`InternalFailureException`  
出现意外错误。

`LimitExceededException`  
已超出限制。

### ListScheduledAudits
<a name="dd-api-iot-ListScheduledAudits"></a>

列出所有计划审核。

 **摘要**

```
aws iot  list-scheduled-audits \
    [--next-token <value>] \
    [--max-results <value>]  \
    [--cli-input-json <value>] \
    [--generate-cli-skeleton]
```

 `cli-input-json` 格式

```
{
  "nextToken": "string",
  "maxResults": "integer"
}
```


**`cli-input-json` 字段**  

|  名称 |  类型 |  描述 | 
| --- | --- | --- | 
|  nextToken |  字符串 |  用于获取下一组结果的令牌。 | 
|  maxResults |  整数  范围 - 最大值：250，最小值：1  |  一次性返回的最大结果数。默认值为 25。 | 

输出

```
{
  "scheduledAudits": [
    {
      "scheduledAuditName": "string",
      "scheduledAuditArn": "string",
      "frequency": "string",
      "dayOfMonth": "string",
      "dayOfWeek": "string"
    }
  ],
  "nextToken": "string"
}
```


**CLI 输出字段**  

|  名称 |  类型 |  描述 | 
| --- | --- | --- | 
|  scheduledAudits |  列表  成员：ScheduledAuditMetadata  java 类：java.util.List  |  计划审核的列表。 | 
|  scheduledAuditName |  字符串  最大长度：128，最小长度：1  模式：[a-zA-Z0-9\$1-]\$1  |  计划审核的名称。 | 
|  scheduledAuditArn |  字符串 |  计划审核的 ARN。 | 
|  frequency |  字符串 |  计划审核的运行频率。  枚举：DAILY \$1 WEEKLY \$1 BIWEEKLY \$1 MONTHLY  | 
|  dayOfMonth |  字符串  模式：^([1-9]\$1[12][0-9]\$13[01])\$1\$1^LAST\$1  |  运行计划审核当月的具体日期（如果 `frequency` 为“MONTHLY”）。如果指定第 29-31 日，但当月没有那么多天，那么系统会在当月的最后一天运行审核。  | 
|  dayOfWeek |  字符串 |  运行计划审核当周的具体日期（如果 `frequency` 为“WEEKLY”或“BIWEEKLY”）。  枚举：SUN \$1 MON \$1 TUE \$1 WED \$1 THU \$1 FRI \$1 SAT  | 
|  nextToken |  字符串 |  用于检索下一组结果的令牌，没有更多结果时为 `null`。  | 

 **错误**

`InvalidRequestException`  
请求的内容无效。

`ThrottlingException`  
速率超过限制。

`InternalFailureException`  
出现意外错误。

### DescribeScheduledAudit
<a name="dd-api-iot-DescribeScheduledAudit"></a>

获取有关计划审核的信息。

 **摘要**

```
aws iot  describe-scheduled-audit \
    --scheduled-audit-name <value>  \
    [--cli-input-json <value>] \
    [--generate-cli-skeleton]
```

 `cli-input-json` 格式

```
{
  "scheduledAuditName": "string"
}
```


**`cli-input-json` 字段**  

|  名称 |  类型 |  描述 | 
| --- | --- | --- | 
|  scheduledAuditName |  字符串  最大长度：128，最小长度：1  模式：[a-zA-Z0-9\$1-]\$1  |  要获取其信息的计划审核的名称。 | 

输出

```
{
  "frequency": "string",
  "dayOfMonth": "string",
  "dayOfWeek": "string",
  "targetCheckNames": [
    "string"
  ],
  "scheduledAuditName": "string",
  "scheduledAuditArn": "string"
}
```


**CLI 输出字段**  

|  名称 |  类型 |  描述 | 
| --- | --- | --- | 
|  frequency |  字符串 |  计划审核的运行频率。可以是以下任一值：“DAILY”、“WEEKLY”、“BIWEEKLY”或“MONTHLY”。每个审核的实际开始时间取决于系统。  枚举：DAILY \$1 WEEKLY \$1 BIWEEKLY \$1 MONTHLY  | 
|  dayOfMonth |  字符串  模式：^([1-9]\$1[12][0-9]\$13[01])\$1\$1^LAST\$1  |  运行计划审核当月的具体日期。可以是“1”到“31”的任意值或“LAST”。如果指定第 29-31 日，但当月没有那么多天，那么系统会在当月的最后一天运行审核。  | 
|  dayOfWeek |  字符串 |  运行计划审核当周的具体日期。可以是以下任一值：“SUN”、“MON”、“TUE”、“WED”、“THU”、“FRI”或“SAT”。  枚举：SUN \$1 MON \$1 TUE \$1 WED \$1 THU \$1 FRI \$1 SAT  | 
|  targetCheckNames |  列表  成员：AuditCheckName  |  计划审核期间执行的检查。账户必须已启用检查。（使用 `DescribeAccountAuditConfiguration` 查看所有检查的列表，包括已启用的检查，或使用 `UpdateAccountAuditConfiguration` 选择启用的检查。）  | 
|  scheduledAuditName |  字符串  最大长度：128，最小长度：1  模式：[a-zA-Z0-9\$1-]\$1  |  计划审核的名称。 | 
|  scheduledAuditArn |  字符串 |  计划审核的 ARN。 | 

 **错误**

`InvalidRequestException`  
请求的内容无效。

`ResourceNotFoundException`  
指定的资源不存在。

`ThrottlingException`  
速率超过限制。

`InternalFailureException`  
出现意外错误。

### UpdateScheduledAudit
<a name="dd-api-iot-UpdateScheduledAudit"></a>

更新计划审核，包括执行的检查和审核执行的频率。

 **摘要**

```
aws iot  update-scheduled-audit \
    [--frequency <value>] \
    [--day-of-month <value>] \
    [--day-of-week <value>] \
    [--target-check-names <value>] \
    --scheduled-audit-name <value>  \
    [--cli-input-json <value>] \
    [--generate-cli-skeleton]
```

 `cli-input-json` 格式

```
{
  "frequency": "string",
  "dayOfMonth": "string",
  "dayOfWeek": "string",
  "targetCheckNames": [
    "string"
  ],
  "scheduledAuditName": "string"
}
```


**`cli-input-json` 字段**  

|  名称 |  类型 |  描述 | 
| --- | --- | --- | 
|  frequency |  字符串 |  计划审核的运行频率。可以是以下任一值：“DAILY”、“WEEKLY”、“BIWEEKLY”或“MONTHLY”。每个审核的实际开始时间取决于系统。  枚举：DAILY \$1 WEEKLY \$1 BIWEEKLY \$1 MONTHLY  | 
|  dayOfMonth |  字符串  模式：^([1-9]\$1[12][0-9]\$13[01])\$1\$1^LAST\$1  |  运行计划审核当月的具体日期。可以是“1”到“31”的任意值或“LAST”。如果 `frequency` 参数设置为“MONTHLY”，则此字段为必填字段。如果指定第 29-31 日，但当月没有那么多天，那么系统会在当月的最后一天运行审核。  | 
|  dayOfWeek |  字符串 |  运行计划审核当周的具体日期。可以是以下任一值：“SUN”、“MON”、“TUE”、“WED”、“THU”、“FRI”或“SAT”。如果 `frequency` 参数段设置为“WEEKLY”或“BIWEEKLY”，则此字段为必填字段。  枚举：SUN \$1 MON \$1 TUE \$1 WED \$1 THU \$1 FRI \$1 SAT  | 
|  targetCheckNames |  列表  成员：AuditCheckName  |  计划审核期间执行的检查。账户必须已启用检查。（使用 `DescribeAccountAuditConfiguration` 查看所有检查的列表，包括已启用的检查，或使用 `UpdateAccountAuditConfiguration` 选择启用的检查。）  | 
|  scheduledAuditName |  字符串  最大长度：128，最小长度：1  模式：[a-zA-Z0-9\$1-]\$1  |  计划审核的名称。（最多 128 个字符） | 

输出

```
{
  "scheduledAuditArn": "string"
}
```


**CLI 输出字段**  

|  名称 |  类型 |  描述 | 
| --- | --- | --- | 
|  scheduledAuditArn |  字符串 |  计划审核的 ARN。 | 

 **错误**

`InvalidRequestException`  
请求的内容无效。

`ResourceNotFoundException`  
指定的资源不存在。

`ThrottlingException`  
速率超过限制。

`InternalFailureException`  
出现意外错误。

### DeleteScheduledAudit
<a name="dd-api-iot-DeleteScheduledAudit"></a>

删除计划审核。

 **摘要**

```
aws iot  delete-scheduled-audit \
    --scheduled-audit-name <value>  \
    [--cli-input-json <value>] \
    [--generate-cli-skeleton]
```

 `cli-input-json` 格式

```
{
  "scheduledAuditName": "string"
}
```


**`cli-input-json` 字段**  

|  名称 |  类型 |  描述 | 
| --- | --- | --- | 
|  scheduledAuditName |  字符串  最大长度：128，最小长度：1  模式：[a-zA-Z0-9\$1-]\$1  |  要删除的计划审核的名称。 | 

输出

无

 **错误**

`InvalidRequestException`  
请求的内容无效。

`ResourceNotFoundException`  
指定的资源不存在。

`ThrottlingException`  
速率超过限制。

`InternalFailureException`  
出现意外错误。

## 运行按需审核
<a name="device-defender-AuditCommandsOnDemand"></a>

使用 `StartOnDemandAuditTask` 指定要执行的检查并立即开始运行审核。

### StartOnDemandAuditTask
<a name="dd-api-iot-StartOnDemandAuditTask"></a>

启动按需 Device Defender 审核。

 **摘要**

```
aws iot  start-on-demand-audit-task \
    --target-check-names <value>  \
    [--cli-input-json <value>] \
    [--generate-cli-skeleton]
```

 `cli-input-json` 格式

```
{
  "targetCheckNames": [
    "string"
  ]
}
```


**`cli-input-json` 字段**  

|  名称 |  类型 |  描述 | 
| --- | --- | --- | 
|  targetCheckNames |  列表  成员：AuditCheckName  |  在审核过程中执行的检查。必须为账户启用指定的检查，否则会出现异常。（使用 `DescribeAccountAuditConfiguration` 查看所有检查的列表，包括已启用的检查，或使用 `UpdateAccountAuditConfiguration` 选择启用的检查。）  | 

输出

```
{
  "taskId": "string"
}
```


**CLI 输出字段**  

|  名称 |  类型 |  描述 | 
| --- | --- | --- | 
|  taskId |  字符串  最大长度：40，最小长度：1  模式：[a-zA-Z0-9-]\$1  |  启动的按需审核的 ID。 | 

 **错误**

`InvalidRequestException`  
请求的内容无效。

`ThrottlingException`  
速率超过限制。

`InternalFailureException`  
出现意外错误。

`LimitExceededException`  
已超出限制。

## 管理审核实例
<a name="device-defender-AuditCommandsManageInstances"></a>

使用 `DescribeAuditTask` 获取关于特定审核实例的信息。如果审核已经运行，则结果会包括失败的检查、通过的检查、系统无法完成的检查，以及仍在运行中的检查（如果审核仍在进行中）。

使用 `ListAuditTasks` 查找在特定时间间隔内运行的审核。

使用 `CancelAuditTask` 停止正在进行的审核。

### DescribeAuditTask
<a name="dd-api-iot-DescribeAuditTask"></a>

获取有关 Device Defender 审核的信息。

 **摘要**

```
aws iot  describe-audit-task \
    --task-id <value>  \
    [--cli-input-json <value>] \
    [--generate-cli-skeleton]
```

 `cli-input-json` 格式

```
{
  "taskId": "string"
}
```


**`cli-input-json` 字段**  

|  名称 |  类型 |  描述 | 
| --- | --- | --- | 
|  taskId |  字符串  最大长度：40，最小长度：1  模式：[a-zA-Z0-9-]\$1  |  要获取其信息的审核的 ID。 | 

输出

```
{
  "taskStatus": "string",
  "taskType": "string",
  "taskStartTime": "timestamp",
  "taskStatistics": {
    "totalChecks": "integer",
    "inProgressChecks": "integer",
    "waitingForDataCollectionChecks": "integer",
    "compliantChecks": "integer",
    "nonCompliantChecks": "integer",
    "failedChecks": "integer",
    "canceledChecks": "integer"
  },
  "scheduledAuditName": "string",
  "auditDetails": {
    "string": {
      "checkRunStatus": "string",
      "checkCompliant": "boolean",
      "totalResourcesCount": "long",
      "nonCompliantResourcesCount": "long",
      "errorCode": "string",
      "message": "string"
    }
  }
}
```


**CLI 输出字段**  

|  名称 |  类型 |  描述 | 
| --- | --- | --- | 
|  taskStatus |  字符串 |  审核的状态，可以是以下任一值：“IN\$1PROGRESS”、“COMPLETED”、“FAILED”或“CANCELED”。  枚举：IN\$1PROGRESS \$1 COMPLETED \$1 FAILED \$1 CANCELED  | 
|  taskType |  字符串 |  审核的类型：“ON\$1DEMAND\$1AUDIT\$1TASK”或“SCHEDULED\$1AUDIT\$1TASK”。  枚举：ON\$1DEMAND\$1AUDIT\$1TASK \$1 SCHEDULED\$1AUDIT\$1TASK  | 
|  taskStartTime |  timestamp |  审核的开始时间。 | 
|  taskStatistics |  TaskStatistics |  有关审核的统计信息。 | 
|  totalChecks |  整数 |  此审核中检查的数量。 | 
|  inProgressChecks |  整数 |  正在进行的检查的数量。 | 
|  waitingForDataCollectionChecks |  整数 |  等待数据收集的检查的数量。 | 
|  compliantChecks |  整数 |  发现合规资源的检查的数量。 | 
|  nonCompliantChecks |  整数 |  发现不合规资源的检查的数量。 | 
|  failedChecks |  整数 |  检查的数量。 | 
|  canceledChecks |  整数 |  因审核取消而未运行的检查的数量。 | 
|  scheduledAuditName |  字符串  最大长度：128，最小长度：1  模式：[a-zA-Z0-9\$1-]\$1  |  计划审核的名称（仅当审核是计划审核时）。 | 
|  auditDetails |  映射 |  有关在此审核过程中执行的每项检查的详细信息。 | 
|  checkRunStatus |  字符串 |  此检查的完成状态，可以是以下任一值：“IN\$1PROGRESS”、“WAITING\$1FOR\$1DATA\$1COLLECTION”、“CANCELED”、“COMPLETED\$1COMPLIANT”、“COMPLETED\$1NON\$1COMPLIANT”或“FAILED”。  枚举：IN\$1PROGRESS \$1 WAITING\$1FOR\$1DATA\$1COLLECTION \$1 CANCELED \$1 COMPLETED\$1COMPLIANT \$1 COMPLETED\$1NON\$1COMPLIANT \$1 FAILED  | 
|  checkCompliant |  布尔值 |  如果检查完成并找到所有合规资源，则为 True。 | 
|  totalResourcesCount |  长整数 |  已执行检查的资源的数量。 | 
|  nonCompliantResourcesCount |  长整数 |  检查发现不合规的资源的数量。 | 
|  errorCode |  字符串 |  在此审核过程中执行此检查时遇到的所有错误代码。可以是以下任一值：“INSUFFICIENT\$1PERMISSIONS”或“AUDIT\$1CHECK\$1DISABLED”。  | 
|  message |  字符串  最大长度：2048  |  与在此审核过程中执行此检查时遇到的所有错误相关的消息。 | 

 **错误**

`InvalidRequestException`  
请求的内容无效。

`ResourceNotFoundException`  
指定的资源不存在。

`ThrottlingException`  
速率超过限制。

`InternalFailureException`  
出现意外错误。

### ListAuditTasks
<a name="dd-api-iot-ListAuditTasks"></a>

列出已在指定时间段内执行的 Device Defender 审核。

 **摘要**

```
aws iot  list-audit-tasks \
    --start-time <value> \
    --end-time <value> \
    [--task-type <value>] \
    [--task-status <value>] \
    [--next-token <value>] \
    [--max-results <value>]  \
    [--cli-input-json <value>] \
    [--generate-cli-skeleton]
```

 `cli-input-json` 格式

```
{
  "startTime": "timestamp",
  "endTime": "timestamp",
  "taskType": "string",
  "taskStatus": "string",
  "nextToken": "string",
  "maxResults": "integer"
}
```


**`cli-input-json` 字段**  

|  名称 |  类型 |  描述 | 
| --- | --- | --- | 
|  startTime |  timestamp |  时间段的开始时间。审核信息只保留有限的时间（180 天）。在保留信息之前请求开始时间将引发 `InvalidRequestException`。  | 
|  endTime |  timestamp |  时间段的结束时间。 | 
|  taskType |  字符串 |  筛选条件，用于将输出限定到指定审核类型，可以是以下任一值：“ON\$1DEMAND\$1AUDIT\$1TASK”或“SCHEDULED\$1\$1AUDIT\$1TASK”。  枚举：ON\$1DEMAND\$1AUDIT\$1TASK \$1 SCHEDULED\$1AUDIT\$1TASK  | 
|  taskStatus |  字符串 |  筛选条件，用于将输出限定到具有指定完成状态的审核，可以是以下任一值：“IN\$1PROGRESS”、“COMPLETED”、“FAILED”或“CANCELED”。  枚举：IN\$1PROGRESS \$1 COMPLETED \$1 FAILED \$1 CANCELED  | 
|  nextToken |  字符串 |  用于获取下一组结果的令牌。 | 
|  maxResults |  整数  范围 - 最大值：250，最小值：1  |  一次性返回的最大结果数。默认值为 25。 | 

输出

```
{
  "tasks": [
    {
      "taskId": "string",
      "taskStatus": "string",
      "taskType": "string"
    }
  ],
  "nextToken": "string"
}
```


**CLI 输出字段**  

|  名称 |  类型 |  描述 | 
| --- | --- | --- | 
|  任务 |  列表  成员：AuditTaskMetadata  java 类：java.util.List  |  在指定时间段内执行的审核。 | 
|  taskId |  字符串  最大长度：40，最小长度：1  模式：[a-zA-Z0-9-]\$1  |  此审核的 ID。 | 
|  taskStatus |  字符串 |  此审核的状态，可以是以下任一值：“IN\$1PROGRESS”、“COMPLETED”、“FAILED”或“CANCELED”。  枚举：IN\$1PROGRESS \$1 COMPLETED \$1 FAILED \$1 CANCELED  | 
|  taskType |  字符串 |  此审核的类型，可以是以下任一值：“ON\$1DEMAND\$1AUDIT\$1TASK”或“SCHEDULED\$1AUDIT\$1TASK”。  枚举：ON\$1DEMAND\$1AUDIT\$1TASK \$1 SCHEDULED\$1AUDIT\$1TASK  | 
|  nextToken |  字符串 |  用于检索下一组结果的令牌，没有更多结果时为 `null`。  | 

 **错误**

`InvalidRequestException`  
请求的内容无效。

`ThrottlingException`  
速率超过限制。

`InternalFailureException`  
出现意外错误。

### CancelAuditTask
<a name="dd-api-iot-CancelAuditTask"></a>

取消正在进行的审核。审核可能是计划审核，也可能是按需审核。如果审核未处于进行中，则将引发 `InvalidRequestException`。

 **摘要**

```
aws iot  cancel-audit-task \
    --task-id <value>  \
    [--cli-input-json <value>] \
    [--generate-cli-skeleton]
```

 `cli-input-json` 格式

```
{
  "taskId": "string"
}
```


**`cli-input-json` 字段**  

|  名称 |  类型 |  描述 | 
| --- | --- | --- | 
|  taskId |  字符串  最大长度：40，最小长度：1  模式：[a-zA-Z0-9-]\$1  |  要取消的审核的 ID。只能取消状态为“IN\$1PROGRESS”的审核。  | 

输出

无

 **错误**

`ResourceNotFoundException`  
指定的资源不存在。

`InvalidRequestException`  
请求的内容无效。

`ThrottlingException`  
速率超过限制。

`InternalFailureException`  
出现意外错误。

## 检查审核结果
<a name="device-defender-AuditCommandsFindings"></a>

使用 `ListAuditFindings` 查看审核结果。可以按照检查类型、特定资源或审核时间筛选结果。您可以使用此信息来解决发现的任何问题。

您可以定义缓解操作并将其应用于审核的结果。有关更多信息，请参阅 [缓解操作](dd-mitigation-actions.md)。

### ListAuditFindings
<a name="dd-api-iot-ListAuditFindings"></a>

列出 Device Defender 审核的结果或在指定时间段内审核执行的结果。（结果保留 180 天。）

 **摘要**

```
aws iot  list-audit-findings \
    [--task-id <value>] \
    [--check-name <value>] \
    [--resource-identifier <value>] \
    [--max-results <value>] \
    [--next-token <value>] \
    [--start-time <value>] \
    [--end-time <value>]  \
    [--cli-input-json <value>] \
    [--generate-cli-skeleton]
```

 `cli-input-json` 格式

```
{
  "taskId": "string",
  "checkName": "string",
  "resourceIdentifier": {
    "deviceCertificateId": "string",
    "caCertificateId": "string",
    "cognitoIdentityPoolId": "string",
    "clientId": "string",
    "policyVersionIdentifier": {
      "policyName": "string",
      "policyVersionId": "string"
    },
   
    "roleAliasArn": "string",
    "account": "string"
  },
  "maxResults": "integer",
  "nextToken": "string",
  "startTime": "timestamp",
  "endTime": "timestamp"
}
```


**`cli-input-json` 字段**  

|  名称 |  类型 |  描述 | 
| --- | --- | --- | 
|  taskId  |  字符串  最大长度：40，最小长度：1  模式：[a-zA-Z0-9-]\$1  |  筛选条件，用于将结果限定到具有指定 ID 的审核。必须指定 taskId 或 startTime 和 endTime，但不能同时指定这两项。  | 
|  checkName  |  字符串  |  筛选条件，用于将结果限定到指定审核检查结果。  | 
|  resourceIdentifier  |  ResourceIdentifier  |  用于标识不合规资源的信息。  | 
|  deviceCertificateId  |  字符串  最大长度：64，最小长度：64  模式：(0x)?[a-fA-F0-9]\$1  |  附加到资源的证书的 ID。  | 
|  caCertificateId  |  字符串  最大长度：64，最小长度：64  模式：(0x)?[a-fA-F0-9]\$1  |  授权证书所用的 CA 证书的 ID。  | 
|  cognitoIdentityPoolId  |  字符串  |  Amazon Cognito 身份池的 ID。  | 
|  clientId  |  字符串  |  客户端 ID。  | 
|  policyVersionIdentifier  |  PolicyVersionIdentifier  |  与资源关联的策略的版本。  | 
|  policyName  |  字符串  最大长度：128，最小长度：1  模式：[w\$1=,.@-]\$1  |  策略的名称。  | 
|  policyVersionId  |  字符串  模式：[0-9]\$1  |  与资源关联的策略的版本 ID。  | 
|  roleAliasArn  |  字符串  |  具有过于宽松操作的角色别名的 ARN。  最大长度：2048，最小长度：1  | 
|  账户  |  字符串  最大长度：12，最小长度：12  模式：[0-9]\$1  |  资源所关联的账户。  | 
|  maxResults  |  整数  范围 - 最大值：250，最小值：1  |  一次性返回的最大结果数。默认值为 25。  | 
|  nextToken  |  字符串  |  用于获取下一组结果的令牌。  | 
|  startTime  |  timestamp  |  筛选条件，用于将结果限定到在指定时间之后发现的结果。必须指定 startTime 和 endTime 或 taskId，但不能同时指定这两项。  | 
|  endTime  |  timestamp  |  筛选条件，用于将结果限定到在指定时间之前发现的结果。必须指定 startTime 和 endTime 或 taskId，但不能同时指定这两项。  | 

输出

```
{
  "findings": [
    {
      "taskId": "string",
      "checkName": "string",
      "taskStartTime": "timestamp",
      "findingTime": "timestamp",
      "severity": "string",
      "nonCompliantResource": {
        "resourceType": "string",
        "resourceIdentifier": {
          "deviceCertificateId": "string",
          "caCertificateId": "string",
          "cognitoIdentityPoolId": "string",
          "clientId": "string",
          "policyVersionIdentifier": {
            "policyName": "string",
            "policyVersionId": "string"
          },
          "account": "string"
        },
        "additionalInfo": {
          "string": "string"
        }
      },
      "relatedResources": [
        {
          "resourceType": "string",
          "resourceIdentifier": {
            "deviceCertificateId": "string",
            "caCertificateId": "string",
            "cognitoIdentityPoolId": "string",
            "clientId": "string",
    
            "iamRoleArn": "string",
    
            "policyVersionIdentifier": {
              "policyName": "string",
              "policyVersionId": "string"
            },
            "account": "string"
          },
    
          "roleAliasArn": "string",
    
          "additionalInfo": {
            "string": "string"
          }
        }
      ],
      "reasonForNonCompliance": "string",
      "reasonForNonComplianceCode": "string"
    }
  ],
  "nextToken": "string"
}
```


**CLI 输出字段**  

|  名称 |  类型 |  描述 | 
| --- | --- | --- | 
|  findings  |  列表  成员：AuditFinding  |  审核的结果。  | 
|  taskId  |  字符串  最大长度：40，最小长度：1  模式：[a-zA-Z0-9-]\$1  |  生成此结果的审核的 ID。  | 
|  checkName  |  字符串  |  生成此结果的审核检查。  | 
|  taskStartTime  |  timestamp  |  审核的开始时间。  | 
|  findingTime  |  timestamp  |  结果的发现时间。  | 
|  severity  |  字符串  |  结果的严重性。  枚举：CRITICAL \$1 HIGH \$1 MEDIUM \$1 LOW  | 
|  nonCompliantResource  |  NonCompliantResource  |  经发现不符合审核检查规定的资源。  | 
|  resourceType  |  字符串  |  不合规资源的类型。  枚举：DEVICE\$1CERTIFICATE \$1 CA\$1CERTIFICATE \$1 IOT\$1POLICY \$1 COGNITO\$1IDENTITY\$1POOL \$1 CLIENT\$1ID \$1 ACCOUNT\$1SETTINGS  | 
|  resourceIdentifier  |  ResourceIdentifier  |  用于标识不合规资源的信息。  | 
|  deviceCertificateId  |  字符串  最大长度：64，最小长度：64  模式：(0x)?[a-fA-F0-9]\$1  |  附加到资源的证书的 ID。  | 
|  caCertificateId  |  字符串  最大长度：64，最小长度：64  模式：(0x)?[a-fA-F0-9]\$1  |  授权证书所用的 CA 证书的 ID。  | 
|  cognitoIdentityPoolId  |  字符串  |  Amazon Cognito 身份池的 ID。  | 
|  clientId  |  字符串  |  客户端 ID。  | 
|  policyVersionIdentifier  |  PolicyVersionIdentifier  |  与资源关联的策略的版本。  | 
|  policyName  |  字符串  最大长度：128，最小长度：1  模式：[w\$1=,.@-]\$1  |  策略的名称。  | 
|  policyVersionId  |  字符串  模式：[0-9]\$1  |  与资源关联的策略的版本 ID。  | 
|  账户  |  字符串  最大长度：12，最小长度：12  模式：[0-9]\$1  |  资源所关联的账户。  | 
|  additionalInfo  |  映射  |  有关不合规资源的其它信息。  | 
|  relatedResources  |  列表  成员：RelatedResource  |  相关资源的列表。  | 
|  resourceType  |  字符串  |  资源的类型。  枚举：DEVICE\$1CERTIFICATE \$1 CA\$1CERTIFICATE \$1 IOT\$1POLICY \$1 COGNITO\$1IDENTITY\$1POOL \$1 CLIENT\$1ID \$1 ACCOUNT\$1SETTINGS  | 
|  resourceIdentifier  |  ResourceIdentifier  |  用于标识资源的信息。  | 
|  deviceCertificateId  |  字符串  最大长度：64，最小长度：64  模式：(0x)?[a-fA-F0-9]\$1  |  附加到资源的证书的 ID。  | 
|  caCertificateId  |  字符串  最大长度：64，最小长度：64  模式：(0x)?[a-fA-F0-9]\$1  |  授权证书所用的 CA 证书的 ID。  | 
|  cognitoIdentityPoolId  |  字符串  |  Amazon Cognito 身份池的 ID。  | 
|  clientId  |  字符串  |  客户端 ID。  | 
|  policyVersionIdentifier  |  PolicyVersionIdentifier  |  与资源关联的策略的版本。  | 
|  iamRoleArn  |  字符串  最大长度：2048，最小长度：20  |  具有过于宽松操作的 IAM 角色的 ARN。  | 
|  policyName  |  字符串  最大长度：128，最小长度：1  模式：[w\$1=,.@-]\$1  |  策略的名称。  | 
|  policyVersionId  |  字符串  模式：[0-9]\$1  |  与资源关联的策略的版本 ID。  | 
|  roleAliasArn  |  字符串  最大长度：2048，最小长度：1  |  具有过于宽松操作的角色别名的 ARN。  | 
|  账户  |  字符串  最大长度：12，最小长度：12  模式：[0-9]\$1  |  资源所关联的账户。  | 
|  additionalInfo  |  映射  |  有关资源的其它信息。  | 
|  reasonForNonCompliance  |  字符串  |  资源不合规的原因。  | 
|  reasonForNonComplianceCode  |  字符串  |  用于表明资源不合规原因的代码。  | 
|  nextToken  |  字符串  |  用于检索下一组结果的令牌，没有更多结果时为 `null`。  | 

 **错误**

`InvalidRequestException`  
请求的内容无效。

`ThrottlingException`  
速率超过限制。

`InternalFailureException`  
出现意外错误。

# 审计查找结果隐藏
<a name="audit-finding-suppressions"></a>

当您运行审计时，它会报告所有不合规资源的查找结果。这意味着您的审计报告包含您正在努力缓解问题的资源的查找结果以及已知不合规资源（如测试设备或损坏设备）的查找结果。审计将继续报告在连续审计运行中仍然不合规的资源的查找结果，这可能会向您的报告中添加不需要的信息。使用审计查找结果，您可以在定义的时间段内隐藏或筛选出查找结果，直到资源的问题被解决，若是针对与测试或损坏设备关联的资源，则可无限期地隐藏结果。

**注意**  
缓解操作不适用于被隐藏的审计结果。有关缓解操作的更多信息，请参阅 [缓解操作](dd-mitigation-actions.md)。

有关审计检查结果隐藏配额的信息，请参阅 [AWS IoT Device Defender 端点与配额](https://docs.aws.amazon.com/general/latest/gr/iot_device_defender.html)。

## 审计查找结果隐藏的工作原理
<a name="how-suppressions-work"></a>

当您为不合规的资源创建审计查找结果隐藏时，您的审计报告和通知的行为会有所不同。

您的审计报告将包含一个新部分，其中列出与报告关联的所有隐藏的查找结果。当我们评估审计检查是否合规时，不会考虑隐藏查找结果。当您在命令行界面 (CLI) 中使用 [describe-audit-task](https://docs.aws.amazon.com/cli/latest/reference/iot/describe-audit-task.html) 命令时，每个审计检查也会返回隐藏的资源计数。

对于审计通知，当我们评估审计检查是否合规时，不会考虑隐藏的查找结果。AWS IoT Device Defender 发布到 Amazon CloudWatch 和 Amazon Simple Notification Service (Amazon SNS) 的每个审计检查通知中也包含隐藏资源计数。

## 如何在控制台中使用审计查找结果隐藏
<a name="audit-finding-suppressions-console"></a>

**要隐藏审计报告中的查找结果**

以下流程介绍了如何在 AWS IoT 控制台中创建审计查找结果隐藏。

1. 在 [AWS IoT 控制台](https://console.aws.amazon.com/iot)的导航窗格中，展开 **Defend**（防护），然后选择 **Audit**（审计）、**Results**（结果）。

1. 选择您要查看的审计报告。  
![\[AWS IoT Device Defender 审计结果表显示了最近日期内多项审计的合规性状态，其中大多数审计标记为不合规。\]](http://docs.aws.amazon.com/zh_cn/iot-device-defender/latest/devguide/images/audit-results.png)

1. 在 **Non-compliant checks**（不合规检查）部分，在 **Check name**（检查名称）项下，选择您感兴趣的审计检查。  
![\[审计报告显示了一项针对“日志记录已禁用”的不合规检查，以及 13 项针对某项 AWS 服务的严重、高和中等严重性级别的合规检查。\]](http://docs.aws.amazon.com/zh_cn/iot-device-defender/latest/devguide/images/audit-results-details.png)

1. 在审计检查详细信息屏幕上，如果存在您不想看到的查找结果，请选择查找结果旁边的选项按钮。然后，选择 **Actions**（操作），接着选择您希望审计查找结果隐藏持续的时长。
**注意**  
您可以在控制台中选择 *1 week*（1 周）、*1 month*（1 个月）、*3 months*（3 个月）、*6 months*（6 个月）或 *Indefinitely*（无限期），作为审计查找结果隐藏的到期日期。如果要设置特定的到期日期，则只能在 CLI 或 API 中执行此操作。无论到期日期为何，您都可以随时取消审计查找结果隐藏。  
![\[AWS IoT Device Defender 审计调查发现显示了“日志记录已禁用”和 1 个不合规账户（含详细信息和缓解措施）。\]](http://docs.aws.amazon.com/zh_cn/iot-device-defender/latest/devguide/images/non-compliant-check.png)

1. 确认隐藏详细信息，然后选择 **Enable suppresion**（启用隐藏）。  
![\[“确认隐藏”对话框，其中检查名称为“日志记录已禁用”、具有账户设置编号、有效期为 3 个月以及到期日期为 2020-10-28。\]](http://docs.aws.amazon.com/zh_cn/iot-device-defender/latest/devguide/images/confirm-suppression.png)

1. 创建审计查找结果隐藏后，将显示一个提示，确认审计查找结果隐藏已创建。  
![\[AWS IoT Device Defender 审计调查发现页面显示了一个不合规账户及“日志记录已禁用”，以及启用 CloudWatch Logs 的缓解步骤。\]](http://docs.aws.amazon.com/zh_cn/iot-device-defender/latest/devguide/images/suppression-created-successfully.png)

**在审计报告中查看隐藏的结果**

1. 在 [AWS IoT 控制台](https://console.aws.amazon.com/iot)的导航窗格中，展开 **Defend**（防护），然后选择 **Audit**（审计）、**Results**（结果）。

1. 选择您要查看的审计报告。

1. 在 **Suppressed findings**（隐藏查找结果）部分，查看已针对您选择的审计报告隐藏了哪些审计结果。  
![\[AWS IoT Device Defender 审计报告显示了合规性检查及严重性级别和调查发现摘要。\]](http://docs.aws.amazon.com/zh_cn/iot-device-defender/latest/devguide/images/audit-report-findings.png)

**列出审计查找结果隐藏**
+ 在 [AWS IoT 控制台](https://console.aws.amazon.com/iot)的导航窗格中，展开 **Defend**（防护），然后选择 **Audit**（审计）、**Finding suppressions**（查找结果隐藏）。  
![\[AWS IoT Device Defender 审计调查发现隐藏表，其中单个隐藏对应于 2020 年 10 月 28 日到期的检查“日志记录已禁用”。\]](http://docs.aws.amazon.com/zh_cn/iot-device-defender/latest/devguide/images/list-suppressions.png)

**要编辑审计查找结果隐藏**

1. 在 [AWS IoT 控制台](https://console.aws.amazon.com/iot)的导航窗格中，展开 **Defend**（防护），然后选择 **Audit**（审计）、**Finding suppressions**（查找结果隐藏）。

1. 选择要编辑的审计查找结果隐藏旁边的选项按钮。下一步，选择 **Actions**（操作）、**Edit**（编辑）。

1. 在 **Edit audit finding suppression**（编辑查找结果隐藏）窗口中，您可以更改 **Suppression duration**（隐藏时长）或者 **Description (optional)**（描述（可选））。  
![\[“编辑审计调查发现隐藏”对话框，其中包含对指定资源隐藏“日志记录已禁用”检查达 6 个月的选项以及描述字段。\]](http://docs.aws.amazon.com/zh_cn/iot-device-defender/latest/devguide/images/edit-suppression.png)

1. 执行您的更改后，选择 **Save**（保存）。**Finding suppressions**（查找结果隐藏）窗口将打开。

**要删除审计查找结果隐藏**

1. 在 [AWS IoT 控制台](https://console.aws.amazon.com/iot)的导航窗格中，展开 **Defend**（防护），然后选择 **Audit**（审计）、**Finding suppressions**（查找结果隐藏）。

1. 选择要删除的审计查找结果隐藏旁边的选项按钮，然后选择 **Actions**（操作）、**Delete**（删除）。

1. 在 **Delete audit finding suppression**（删除审计查找结果隐藏）窗口中，在文本框中输入 `delete` 以确认删除，然后选择 **Delete**（删除）。**Finding suppressions**（查找结果隐藏）窗口将打开。  
![\[用于删除审计调查发现隐藏的对话框，具有可输入“delete”的输入字段和“删除”按钮。\]](http://docs.aws.amazon.com/zh_cn/iot-device-defender/latest/devguide/images/delete-suppression.png)

## 如何在 CLI 中使用审计查找结果隐藏
<a name="audit-finding-suppressions-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)

您输入的 `resource-identifier` 取决于您需要隐藏查找结果的 `check-name`。下表详细说明了哪些检查需要哪个 `resource-identifier` 来用于创建和编辑隐藏。

**注意**  
隐藏命令不意味着关闭审计。审计仍会在您的 AWS IoT 设备上运行。隐藏仅适用于审计结果。


| `check-name` | `resource-identifier` | 
| --- | --- | 
| AUTHENTICATE\$1COGNITO\$1ROLE\$1OVERLY\$1PERMISSIVE\$1CHECK | cognitoIdentityPoolId | 
| CA\$1CERT\$1APPROACHING\$1EXPIRATION\$1CHECK | caCertificateId | 
| CA\$1CERTIFICATE\$1KEY\$1QUALITY\$1CHECK | caCertificateId | 
| CONFLICTING\$1CLIENT\$1IDS\$1CHECK | clientId | 
| DEVICE\$1CERT\$1APPROACHING\$1EXPIRATION\$1CHECK | deviceCertificateId | 
| DEVICE\$1CERTIFICATE\$1KEY\$1QUALITY\$1CHECK | deviceCertificateId | 
| DEVICE\$1CERTIFICATE\$1SHARED\$1CHECK | deviceCertificateId | 
| IOT\$1POLICY\$1OVERLY\$1PERMISSIVE\$1CHECK | policyVersionIdentifier | 
| IOT\$1ROLE\$1ALIAS\$1ALLOWS\$1ACCESS\$1TO\$1UNUSED\$1SERVICES\$1CHECK | roleAliasArn | 
| IOT\$1ROLE\$1ALIAS\$1OVERLY\$1PERMISSIVE\$1CHECK | roleAliasArn | 
| LOGGING\$1DISABLED\$1CHECK | account | 
| REVOKED\$1CA\$1CERT\$1CHECK | caCertificateId | 
| REVOKED\$1DEVICE\$1CERT\$1CHECK | deviceCertificateId | 
| UNAUTHENTICATED\$1COGNITO\$1ROLE\$1OVERLY\$1PERMISSIVE\$1CHECK | cognitoIdentityPoolId | 

**要创建和应用审计查找结果隐藏**

以下流程介绍如何在 AWS CLI 中创建审计查找结果隐藏。
+ 使用 `create-audit-suppression` 命令创建审计查找结果隐藏。以下示例为根据 **Logging disabled**（禁用的日志记录）这项检查为 AWS 账户 *123456789012* 创建了审计查找结果隐藏。

  ```
  aws iot create-audit-suppression \
      --check-name LOGGING_DISABLED_CHECK \
      --resource-identifier account=123456789012 \
      --client-request-token 28ac32c3-384c-487a-a368-c7bbd481f554 \
      --suppress-indefinitely \
      --description "Suppresses logging disabled check because I don't want to enable logging for now."
  ```

  此命令无任何输出。

## 审计查找结果隐藏 API
<a name="audit-finding-suppressions-apis"></a>

以下 API 可用于创建和管理审计查找结果隐藏。
+ [CreateAuditSuppression](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateAuditSuppression.html)
+ [DescribeAuditSuppression](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeAuditSuppression.html)
+ [UpdateAuditSuppression](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateAuditSuppression.html)
+ [DeleteAuditSuppression](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteAuditSuppression.html)
+ [ListAuditSuppressions](https://docs.aws.amazon.com/iot/latest/apireference/API_ListAuditSuppressions.html)

要*对*特定审计查找结果进行筛选，您可以使用 [ListAuditFindings](https://docs.aws.amazon.com/iot/latest/apireference/API_ListAuditFindings.html) API。