

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

# Amazon ECS 集群的运行时覆盖率和故障排除
<a name="gdu-assess-coverage-ecs"></a>

Amazon ECS 集群的运行时间覆盖范围包括在 Amazon ECS 容器实例上 Amazon Fargate 运行的任务[1](#ecs-container-instance)。

对于在 Fargate 上运行的 Amazon ECS 集群，运行时间覆盖率是在任务级别评估的。ECS 集群运行时覆盖率包括在您为 Fargate（仅限 ECS）启用了运行时监控和自动代理配置后开始运行的 Fargate 任务。默认情况下，Fargate 任务是不可变的。 GuardDuty 将无法安装安全代理来监视已在运行的任务上的容器。要包含此类 Fargate 任务，必须停止并重新启动该任务。务必要检查相关服务是否受支持。

有关 Amazon ECS 容器的信息，请参阅[容量创建](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/create-capacity.html)。

**Topics**
+ [查看覆盖率统计数据](#ecs-review-coverage-statistics-ecs-runtime-monitoring)
+ [保险状态会随着 EventBridge 通知而变化](#ecs-runtime-monitoring-coverage-status-change)
+ [对 Amazon ECS-Fargate 运行时覆盖问题进行故障排除](#ecs-runtime-monitoring-coverage-issues-troubleshoot)

## 查看覆盖率统计数据
<a name="ecs-review-coverage-statistics-ecs-runtime-monitoring"></a>

对于与您自己的账户或成员账户关联的 Amazon ECS 资源，覆盖率统计数据是选定 Amazon Web Services 区域中正常 Amazon ECS 集群占所有 Amazon ECS 集群的百分比。这包括与 Fargate 和 Amazon EC2 实例关联的 Amazon ECS 集群的覆盖率。下式将其表示为：

*（健康 clusters/All 集群）\*100*

### 注意事项
<a name="considerations-ecs-coverage-review-stats"></a>
+ ECS 集群的覆盖率统计数据包括与该 ECS 集群关联的 Fargate 任务或 ECS 容器实例的覆盖率状态。Fargate 任务的覆盖率状态包括处于正在运行状态或最近完成运行的任务。
+ 在 **ECS 集群运行时覆盖率**选项卡中，**覆盖的容器实例**字段指示与 Amazon ECS 集群关联的容器实例的覆盖率状态。

  如果您的 Amazon ECS 集群仅包含 Fargate 任务，则计数将显示为。**0/0**
+ 如果 Amazon ECS 集群与没有安全代理的 Amazon EC2 实例相关联，则 Amazon ECS 集群的覆盖率状态也将为**不正常**。

  要确定关联的 Amazon EC2 实例的覆盖率问题并进行故障排除，请参阅适用于 Amazon EC2 实例的[对 Amazon EC2 运行时覆盖率问题进行故障排除](gdu-assess-coverage-ec2.md#ec2-runtime-monitoring-coverage-issues-troubleshoot)。

选择一种访问方法来查看您账户的覆盖率统计数据。

------
#### [ Console ]
+ 登录 Amazon Web Services 管理控制台 并打开 GuardDuty 控制台，网址为[https://console.aws.amazon.com/guardduty/](https://console.amazonaws.cn/guardduty/)。
+ 在导航窗格中，选择**运行时监控**。
+ 选择**运行时覆盖率**选项卡。
+ 您可以在 **ECS 集群运行时覆盖率**选项卡下查看覆盖率统计数据，按**集群列表**中可用的每个 Amazon ECS 集群的覆盖率状态汇总。
  + 您可以按以下列筛选**集群列表**：
    + **账户 ID**
    + **集群名称**
    + **代理管理类型**
    + **覆盖状态**
+ 如果任何 Amazon ECS 集群的**覆盖率状态**为**不正常**，则**问题**列可能包含有关**不正常**状态原因的其他信息。

  如果 Amazon ECS 集群与 Amazon EC2 实例关联，请导航到 **EC2 实例运行时覆盖率**选项卡，然后按**集群名称**字段筛选以查看相关的**问题**。

------
#### [ API/CLI ]
+ 使用您自己的有效检测器 ID、当前区域和服务端点运行 [ListCoverage](https://docs.amazonaws.cn/guardduty/latest/APIReference/API_ListCoverage.html)API。您可以使用此 API 对实例列表进行筛选和排序。
  + 您可以使用以下 `CriterionKey` 选项之一更改示例 `filter-criteria`：
    + `ACCOUNT_ID`
    + `ECS_CLUSTER_NAME`
    + `COVERAGE_STATUS`
    + `MANAGEMENT_TYPE`
  + 您可以使用以下选项更改 `sort-criteria` 中的示例 `AttributeName`：
    + `ACCOUNT_ID`
    + `COVERAGE_STATUS`
    + `ISSUE`
    + `ECS_CLUSTER_NAME`
    + `UPDATED_AT`

      只有在关联的 Amazon ECS 集群中创建了新任务或相应的覆盖率状态发生变化时，该字段才会更新。
  + 您可以更改{{max-results}}（最多 50 个）。
  + 要查找您的账户和当前区域的，请查看[https://console.aws.amazon.com/guardduty/](https://console.amazonaws.cn/guardduty/)控制台中的 **“设置**” 页面，或者运行 [https://docs.amazonaws.cn/guardduty/latest/APIReference/API_ListDetectors.html](https://docs.amazonaws.cn/guardduty/latest/APIReference/API_ListDetectors.html)API。`detectorId`

  ```
  aws guardduty --region {{us-east-1}} list-coverage --detector-id {{12abc34d567e8fa901bc2d34e56789f0}} --sort-criteria '{"AttributeName": "{{ECS_CLUSTER_NAME}}", "OrderBy": "{{DESC}}"}' --filter-criteria '{"FilterCriterion":[{"CriterionKey":"{{ACCOUNT_ID}}", "FilterCondition":{"EqualsValue":"111122223333"}}] }'  --max-results {{5}}
  ```
+ 运行 [GetCoverageStatistics](https://docs.amazonaws.cn/guardduty/latest/APIReference/API_GetCoverageStatistics.html)API 以检索基于的覆盖率汇总统计信息`statisticsType`。
  + 您可以使用以下选项之一更改示例 `statisticsType`：
    + `COUNT_BY_COVERAGE_STATUS`：表示按覆盖率状态汇总的 ECS 集群的覆盖率统计数据。
    + `COUNT_BY_RESOURCE_TYPE`— 根据列表中的 Amazon 资源类型汇总的覆盖率统计信息。
    + 您可以在命令中更改示例 `filter-criteria`。您可以对 `CriterionKey` 使用以下选项：
      + `ACCOUNT_ID`
      + `ECS_CLUSTER_NAME`
      + `COVERAGE_STATUS`
      + `MANAGEMENT_TYPE`
      + `INSTANCE_ID`
  + 要查找您的账户和当前区域的，请查看[https://console.aws.amazon.com/guardduty/](https://console.amazonaws.cn/guardduty/)控制台中的 **“设置**” 页面，或者运行 [https://docs.amazonaws.cn/guardduty/latest/APIReference/API_ListDetectors.html](https://docs.amazonaws.cn/guardduty/latest/APIReference/API_ListDetectors.html)API。`detectorId`

  ```
  aws guardduty --region {{us-east-1}} get-coverage-statistics --detector-id {{12abc34d567e8fa901bc2d34e56789f0}} --statistics-type {{COUNT_BY_COVERAGE_STATUS}} --filter-criteria '{"FilterCriterion":[{"CriterionKey":"{{ACCOUNT_ID}}", "FilterCondition":{"EqualsValue":"123456789012"}}] }'
  ```

------

有关覆盖率问题的更多信息，请参阅[对 Amazon ECS-Fargate 运行时覆盖问题进行故障排除](#ecs-runtime-monitoring-coverage-issues-troubleshoot)。

## 保险状态会随着 EventBridge 通知而变化
<a name="ecs-runtime-monitoring-coverage-status-change"></a>

Amazon ECS 集群的覆盖率状态可能显示为**不正常**。要检测覆盖率状态何时变为不正常，我们建议您定期监控覆盖率状态，并在状态变为**不正常**时进行故障排除。**或者，您可以创建 Amazon EventBridge 规则，以便在保险状态从 “**不健康” 变为 “健康**” 或其他情况时收到通知。**默认情况下，会在[EventBridge 公交车](https://docs.amazonaws.cn/eventbridge/latest/userguide/eb-event-bus.html)上为您的账户 GuardDuty 发布此内容。

### 示例通知架构
<a name="ecs-gdu-coverage-status-eventbridge-schema"></a>

在 EventBridge 规则中，您可以使用预定义的示例事件和事件模式来接收覆盖状态通知。有关创建 EventBridge 规则的更多信息，请参阅 *Amazon EventBridge 用户指南*中的[创建规则](https://docs.amazonaws.cn/eventbridge/latest/userguide/eb-get-started.html#eb-gs-create-rule)。

此外，您还可以使用以下示例通知架构来创建自定义事件模式。确保替换账户的值。要在您的 Amazon ECS 集群的覆盖状态从变`Healthy`为时收到通知`Unhealthy`，`detail-type`应该是{{GuardDuty Runtime Protection Unhealthy}}。要在保险状态从变为时收到通知`Healthy`，`Unhealthy`请将的`detail-type`值替换为{{GuardDuty Runtime Protection Healthy}}。

```
{
  "version": "0",
  "id": "event ID",
  "detail-type": "GuardDuty Runtime Protection Unhealthy",
  "source": "aws.guardduty",
  "account": "Amazon Web Services 账户 ID",
  "time": "event timestamp (string)",
  "region": "Amazon Web Services 区域",
  "resources": [
       ],
  "detail": {
    "schemaVersion": "1.0",
    "resourceAccountId": "string",
    "currentStatus": "string",
    "previousStatus": "string",
    "resourceDetails": {
        "resourceType": "ECS",
        "ecsClusterDetails": {
          "clusterName":"",
          "fargateDetails":{
            "issues":[],
            "managementType":""
          },
          "containerInstanceDetails":{
            "coveredContainerInstances":int,
            "compatibleContainerInstances":int
          }
        }
    },
    "issue": "string",
    "lastUpdatedAt": "timestamp"
  }
}
```

## 对 Amazon ECS-Fargate 运行时覆盖问题进行故障排除
<a name="ecs-runtime-monitoring-coverage-issues-troubleshoot"></a>

如果 Amazon ECS 集群的覆盖率状态为**不正常**，则可以在**问题**列下查看原因。

下表提供了 Fargate（仅限 Amazon ECS）问题的建议故障排除步骤。有关 Amazon EC2 实例覆盖率问题的信息，请参阅适用于 Amazon EC2 实例的[对 Amazon EC2 运行时覆盖率问题进行故障排除](gdu-assess-coverage-ec2.md#ec2-runtime-monitoring-coverage-issues-troubleshoot)。



- ** 代理未报告 **
  - **额外信息:** 代理未报告 `TaskDefinition - '{{TASK_DEFINITION}}'` 中的任务 / **建议的问题排查步骤:** 验证 Amazon ECS 集群的 VPC 端点配置是否正确。有关更多信息，请参阅 [验证 VPC 端点配置](validate-vpc-endpoint-config-runtime-monitoring.md)。<br />如果您的组织设置了服务控制策略（SCP），请验证权限边界未限制 `guardduty:SendSecurityTelemetry` 权限。有关更多信息，请参阅 [在多账户环境中验证组织服务控制策略](prereq-runtime-monitoring-ecs-support.md#validate-organization-scp-ecs)。
  - **额外信息:** `{{VPC_ISSUE}}; for task in TaskDefinition - '{{TASK_DEFINITION}}'` / **建议的问题排查步骤:** 在额外信息部分中查看 VPC 问题的详细信息。

- ** 代理已退出 **
  - **额外信息:** ExitCode: `EXIT_CODE` 用于中的任务 `TaskDefinition - '{{TASK_DEFINITION}}'` / **建议的问题排查步骤:** 在额外信息部分中查看问题详细信息。
  - **额外信息:** 原因：{{REASON}}用于中的任务 `TaskDefinition - '{{TASK_DEFINITION}}'`
  - **额外信息:** ExitCode: `EXIT_CODE` 有理由：“{{EXIT\_CODE}}” 代表中的任务 `TaskDefinition - '{{TASK_DEFINITION}}'`
  - **额外信息:** 代理已退出：原因：`CannotPullContainerError`：已重试提取映像清单... / **建议的问题排查步骤:** 在这种情况下，可能无法拉取 GuardDuty sidecar 容器镜像。您的任务将继续运行，但 GuardDuty 无法检测到潜在威胁。逐一执行以下故障排除步骤，检查是否有助于解决覆盖范围问题：[See the AWS documentation website for more details](http://docs.amazonaws.cn/guardduty/latest/ug/gdu-assess-coverage-ecs.html)<br />这三个组件（权限、网络连接和安全组配置）是独立的，但它们都是成功从 Amazon ECR 下载 GuardDuty 容器映像所必需的。<br />如果问题仍然存在，请参阅[我的 Amazon Step Functions 工作流程意外失败](troubleshooting-guardduty-runtime-monitoring.md#runtime-ecs-step-function-failure)。

- ** VPC 端点创建失败 **
  - **额外信息:** 启用私有 DNS 需要同时启用私有 DNS，`enableDnsSupport``true`并且将 `enableDnsHostnames` VPC 属性设置为{{vpcId}}（服务：EC2 Code:400，状态，请求 ID:{{a1b2c3d4-5678-90ab-cdef-EXAMPLE11111}}）。
  - **建议的问题排查步骤:** 确保以下 VPC 属性设置为 `true` – `enableDnsSupport` 和 `enableDnsHostnames`。有关更多信息，请参阅 [VPC 中的 DNS 属性](https://docs.amazonaws.cn/vpc/latest/userguide/vpc-dns.html#vpc-dns-support)。<br />如果您使用的 Amazon VPC 控制台创建亚马逊 VPC，请务必同时选择 “**启用 DNS 主机名” 和 “启****用 DNS 解析**”。[https://console.aws.amazon.com/vpc/](https://console.amazonaws.cn/vpc/)有关更多信息，请参阅 [VPC 配置选项](https://docs.amazonaws.cn/vpc/latest/userguide/create-vpc.html#create-vpc-options)。

- **未预置代理**
  - **额外信息:** `{{SERVICE}}` 对 `TaskDefinition - '{{TASK_DEFINITION}}'` 中任务进行了不受支持的调用 / **建议的问题排查步骤:** 某个不受支持的 `{{SERVICE}}` 对此任务进行了调用。
  - **额外信息:** 中任务的 CPU 架构 {{TYPE}} “” 不受支持 `TaskDefinition - '{{TASK_DEFINITION}}'` / **建议的问题排查步骤:** 此任务在不受支持的 CPU 架构上运行。有关支持的 CPU 架构的更多信息，请参阅[验证架构要求](prereq-runtime-monitoring-ecs-support.md#validating-architecture-req-ecs)。
  - **额外信息:** `TaskDefinition - '{{TASK_DEFINITION}}'` 中缺失 `TaskExecutionRole` / **建议的问题排查步骤:** 缺失 ECS 任务执行角色。有关提供任务执行角色和所需权限的信息，请参阅[访问容器映像的先决条件](prereq-runtime-monitoring-ecs-support.md#before-enable-runtime-monitoring-ecs)。
  - **额外信息:** `TaskDefinition - '{{TASK_DEFINITION}}'` 中的任务缺失网络配置“`{{CONFIGURATION_DETAILS}}`” / **建议的问题排查步骤:** 网络配置问题出现的原因可能是 VPC 配置缺失或子网缺失或为空。<br />验证您的网络配置是否正确。有关更多信息，请参阅 [访问容器映像的先决条件](prereq-runtime-monitoring-ecs-support.md#before-enable-runtime-monitoring-ecs)。<br />有关更多信息，请参阅《Amazon Elastic Container Service 开发人员指南》中的 [Amazon ECS 任务定义参数](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/task_definition_parameters.html)**。
  - **额外信息:** 集群带有排除标签时启动的任务将从运行时监控中排除。受影响的任务 ID：`{{TASK_ID}}` / **建议的问题排查步骤:** 当您将预定义的 GuardDuty 标签从 `GuardDutyManaged`-更改`true`为 `GuardDutyManaged`-时`false`， GuardDuty 将不会收到此 Amazon ECS 集群的运行时事件。<br />将标签更新为 `GuardDutyManaged`-`true`，然后重新启动任务。
  - **额外信息:** 集群带有排除标签时部署的服务将从运行时监控中排除。受影响的服务名称：“{{`SERVICE_NAME`}}” / **建议的问题排查步骤:** 使用排除标签 `GuardDutyManaged`-`false` 部署的服务 GuardDuty将不会接收此 Amazon ECS 集群的运行时事件。<br />将标签更新为 `GuardDutyManaged`-`true`，然后重新部署服务。
  - **额外信息:** 未涵盖在启用自动代理配置之前启动的任务。受影响的任务 ID：“{{`TASK_ID`}}” / **建议的问题排查步骤:** 当集群包含在为 Amazon ECS 启用自动代理配置之前启动的任务时， GuardDuty 将无法对其进行保护。重新启动任务以供其监控。 GuardDuty
  - **额外信息:** 未涵盖在启用自动代理配置之前部署的服务。受影响的服务名称：“{{`SERVICE_NAME`}}” / **建议的问题排查步骤:** 如果在为 Amazon ECS 启用自动代理配置之前部署服务， GuardDuty则不会接收 ECS 集群的运行时事件。
  - **额外信息:** 服务 “{{`SERVICE_NAME`}}” 需要重新部署到 fix/troubleshoot。请参阅文档：受影响的服务名称：“{{`SERVICE_NAME`}}” / **建议的问题排查步骤:** 不支持在启用运行时监控之前启动的服务。<br />您可以重新启动服务，或按照《Amazon Elastic Container Service 开发人员指南》**中[使用控制台更新 Amazon ECS 服务](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/update-service-console-v2.html)下的步骤，使用 `forceNewDeployment` 选项更新服务。或者，您也可以使用《*亚马逊弹性容器服务 API 参考*》[UpdateService](https://docs.amazonaws.cn/AmazonECS/latest/APIReference/API_UpdateService.html)中的步骤。
  - **额外信息:** 在启用运行时监控之前启动的任务需要重新启动。受影响的任务 ID：“{{`TASK_ID_1`}}” / **建议的问题排查步骤:** 在 Amazon ECS 中，任务是不可变的。要评估运行时行为或正在运行的 Amazon Fargate 任务，请确保已启用运行时监控，然后重新启动任务 GuardDuty以添加容器 sidecar。

- **其他**
  - **额外信息:** `TaskDefinition - '{{TASK_DEFINITION}}'` 中的任务有不明问题
  - **建议的问题排查步骤:** 使用以下问题来确定问题的根本原因：[See the AWS documentation website for more details](http://docs.amazonaws.cn/guardduty/latest/ug/gdu-assess-coverage-ecs.html)

