Amazon ECS 集群的运行时覆盖率和故障排除 - Amazon GuardDuty
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon ECS 集群的运行时覆盖率和故障排除

Amazon ECS 集群的运行时覆盖率包括在 Amazon Fargate 和 Amazon ECS 容器实例上运行的任务1

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

有关 Amazon ECS 容器的信息,请参阅容量创建

查看覆盖率统计数据

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

(正常集群/所有集群)*100

注意事项

  • 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 运行时覆盖率问题进行故障排除

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

Console
  • 登录 Amazon Web Services 管理控制台,打开 GuardDuty 控制台:https://console.aws.amazon.com/guardduty/

  • 在导航窗格中,选择运行时监控

  • 选择运行时覆盖率选项卡。

  • 您可以在 ECS 集群运行时覆盖率选项卡下查看覆盖率统计数据,按集群列表中可用的每个 Amazon ECS 集群的覆盖率状态汇总。

    • 您可以按以下列筛选集群列表

      • 账户 ID

      • 集群名称

      • 代理管理类型

      • 覆盖状态

  • 如果任何 Amazon ECS 集群的覆盖率状态不正常,则问题列可能包含有关不正常状态原因的其他信息。

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

API/CLI
  • 使用您自己的有效检测器 ID、当前区域和服务端点运行 ListCoverage 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 集群中创建了新任务或相应的覆盖率状态发生变化时,该字段才会更新。

    • 您可以更改最大结果(最多 50 个)。

    • 要查找您账户和当前区域的 detectorId,请查看 https://console.aws.amazon.com/guardduty/ 控制台中的设置页面,或者运行 ListDetectors API。

    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 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

    • 要查找您账户和当前区域的 detectorId,请查看 https://console.aws.amazon.com/guardduty/ 控制台中的设置页面,或者运行 ListDetectors API。

    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 运行时覆盖率问题进行故障排除

通过 EventBridge 通知接收覆盖率状态更改

Amazon ECS 集群的覆盖率状态可能显示为不正常。要检测覆盖率状态何时变为不正常,我们建议您定期监控覆盖率状态,并在状态变为不正常时进行故障排除。您也可以创建一条 Amazon EventBridge 规则,从而在覆盖率状态从不正常变为正常或发生其他变化时接收通知。默认情况下,GuardDuty 会在您账户的 EventBridge 总线中发布此信息。

示例通知架构

在 EventBridge 规则中,您可以使用预定义的示例事件和事件模式来接收覆盖状态通知。有关创建 EventBridge 规则的更多信息,请参阅《Amazon EventBridge 用户指南》中的创建规则

此外,您还可以使用以下示例通知架构来创建自定义事件模式。确保替换账户的值。要在 Amazon ECS 集群的覆盖率状态从 Healthy 变为 Unhealthy 时接收通知,则 detail-type 应为 GuardDuty Runtime Protection Unhealthy。要在覆盖状态从 Unhealthy 变为 Healthy 时收到通知,请将 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 运行时覆盖率问题进行故障排除

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

下表提供了 Fargate(仅限 Amazon ECS)问题的建议故障排除步骤。有关 Amazon EC2 实例覆盖率问题的信息,请参阅适用于 Amazon EC2 实例的对 Amazon EC2 运行时覆盖率问题进行故障排除

问题类型 额外信息 建议的问题排查步骤

代理未报告

代理未报告 TaskDefinition - 'TASK_DEFINITION' 中的任务

验证 Amazon ECS 集群的 VPC 端点配置是否正确。有关更多信息,请参阅 验证 VPC 端点配置

如果您的组织设置了服务控制策略(SCP),请验证权限边界未限制 guardduty:SendSecurityTelemetry 权限。有关更多信息,请参阅 在多账户环境中验证组织服务控制策略

VPC_ISSUE; for task in TaskDefinition - 'TASK_DEFINITION'

在额外信息部分中查看 VPC 问题的详细信息。

代理已退出

退出代码:TaskDefinition - 'TASK_DEFINITION' 中的任务 EXIT_CODE

在额外信息部分中查看问题详细信息。

原因:TaskDefinition - 'TASK_DEFINITION' 中的任务 REASON

退出代码:EXIT_CODE 及原因:TaskDefinition - 'TASK_DEFINITION' 中的任务“EXIT_CODE

代理已退出:原因:CannotPullContainerError:已重试提取映像清单...

在这种情况下,GuardDuty 可能无法拉取附加容器映像。您的任务将继续运行,但是 GuardDuty 无法检测到潜在威胁。逐一执行以下故障排除步骤,检查是否有助于解决覆盖范围问题:

  • 权限:确保您的任务执行角色具有权限要求中列出的必需 ECR 权限。

  • 网络连接:验证您的 Fargate 任务是否可以通过公共互联网访问或正确配置的 VPC 端点到达 ECR,如网络连接要求中所述。

  • 安全组配置:检查您的安全组是否允许对端口 443 上的 S3 托管前缀列表进行出站访问,如安全组配置中所述。

  • 在集群所在的区域运行 AWSSupport-TroubleshootECSTaskFailedToStart 运行手册,确定具体问题。

  • 查看任务日志中的错误消息。有关如何执行此操作的信息,请参阅《Amazon Elastic Container Service 开发人员指南》中的查看 Amazon ECS 容器代理日志

    有关常见错误和故障排除,请参阅《Amazon Elastic Container Service 开发人员指南》中的 Amazon ECS 故障排除

这三个组件(权限、网络连接和安全组配置)是独立的,但为了成功从 Amazon ECR 下载 GuardDuty 容器映像,三个组件都是必需的。

如果问题仍然存在,请参阅我的 Amazon Step Functions 工作流意外失败

VPC 端点创建失败

启用私有 DNS 需要将 vpcIdenableDnsSupportenableDnsHostnames VPC 属性设置为 true(服务:EC2,状态代码:400,请求 ID:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111)。

确保以下 VPC 属性设置为 trueenableDnsSupportenableDnsHostnames。有关更多信息,请参阅 VPC 中的 DNS 属性

如果您在 https://console.aws.amazon.com/vpc/ 上使用 Amazon VPC 控制台创建 Amazon VPC,确保选择启用 DNS 主机名启用 DNS 解析。有关更多信息,请参阅 VPC 配置选项

未预置代理

SERVICETaskDefinition - 'TASK_DEFINITION' 中任务进行了不受支持的调用

某个不受支持的 SERVICE 对此任务进行了调用。

TaskDefinition - 'TASK_DEFINITION' 中任务的 CPU 架构“TYPE”不受支持

此任务在不受支持的 CPU 架构上运行。有关支持的 CPU 架构的更多信息,请参阅验证架构要求

TaskDefinition - 'TASK_DEFINITION' 中缺失 TaskExecutionRole

缺失 ECS 任务执行角色。有关提供任务执行角色和所需权限的信息,请参阅访问容器映像的先决条件

TaskDefinition - 'TASK_DEFINITION' 中的任务缺失网络配置“CONFIGURATION_DETAILS

网络配置问题出现的原因可能是 VPC 配置缺失或子网缺失或为空。

验证您的网络配置是否正确。有关更多信息,请参阅 访问容器映像的先决条件

有关更多信息,请参阅《Amazon Elastic Container Service 开发人员指南》中的 Amazon ECS 任务定义参数

集群带有排除标签时启动的任务将从运行时监控中排除。受影响的任务 ID:TASK_ID

当您将预定义的 GuardDuty 标签从 GuardDutyManaged-true 更改为 GuardDutyManaged-false 时,GuardDuty 将不会接收该 Amazon ECS 集群的运行时事件。

将标签更新为 GuardDutyManaged-true,然后重新启动任务。

集群带有排除标签时部署的服务将从运行时监控中排除。受影响的服务名称:“SERVICE_NAME

使用排除标签 GuardDutyManaged-false 部署服务时,GuardDuty 将不会收到此 Amazon ECS 集群的运行时事件。

将标签更新为 GuardDutyManaged-true,然后重新部署服务。

未涵盖在启用自动代理配置之前启动的任务。受影响的任务 ID:“TASK_ID

当集群包含在启用 Amazon ECS 自动代理配置之前启动的任务时,GuardDuty 将无法对其进行保护。重新启动任务,让 GuardDuty 对其进行监控。

未涵盖在启用自动代理配置之前部署的服务。受影响的服务名称:“SERVICE_NAME

如果服务是在启用 Amazon ECS 自动代理配置之前部署的,GuardDuty 将不会接收 ECS 集群的运行时事件。

服务“SERVICE_NAME”需要新的部署才能修复/故障排除。请参阅文档:受影响的服务名称:“SERVICE_NAME

不支持在启用运行时监控之前启动的服务。

您可以重新启动服务,或按照《Amazon Elastic Container Service 开发人员指南》使用控制台更新 Amazon ECS 服务下的步骤,使用 forceNewDeployment 选项更新服务。或者,您也可以使用《Amazon Elastic Container Service API Reference》UpdateService 下的步骤。

在启用运行时监控之前启动的任务需要重新启动。受影响的任务 ID:“TASK_ID_1

在 Amazon ECS 中,任务是不可变的。要评测正在运行的 Amazon Fargate 任务的运行时行为,请确保已启用运行时监控,然后为 GuardDuty 重启该任务以添加附加容器。

其他

TaskDefinition - 'TASK_DEFINITION' 中的任务有不明问题

使用以下问题来确定问题的根本原因:

  • 该任务是在您启用“运行时监控”之前启动的吗?

    在 Amazon ECS 中,任务是不可变的。要评估正在运行的 Fargate 任务的运行时行为,请确保已启用运行时监控,然后为 GuardDuty 重启该任务以添加附加容器。

  • 此任务是在启用运行时监控之前启动的服务部署的一部分吗?

    如果回答是,则可以重新启动服务,或按照更新服务中的步骤使用 forceNewDeployment 更新服务。

    您也可以使用 UpdateServiceAmazon CLI

  • 该任务是在将 ECS 集群排除在运行时监控范围之外后启动的吗?

    当您将预定义的 GuardDuty 标签从 GuardDutyManaged-true 更改为 GuardDutyManaged-false 时,GuardDuty 将不会接收该 ECS 集群的运行时事件。

  • 您的服务是否包含使用旧格式 taskArn 的任务?

    GuardDuty 运行时监控不支持使用旧格式 taskArn 的任务的覆盖率。

    有关 Amazon ECS 资源的 Amazon 资源名称(ARN)的信息,请参阅 Amazon 资源名称(ARN)和 ID