Amazon ECS 集群的运行时间覆盖和故障排除 - Amazon GuardDuty

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

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

Amazon ECS 集群的运行时覆盖范围包括运行的任务 AWS Fargate 和亚马逊ECS容器实例1

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

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

查看覆盖率统计数据

与您自己的账户或成员账户关联的 Amazon ECS 资源的覆盖率统计数据是健康的亚马逊ECS集群占所选所有亚马逊ECS集群的百分比 AWS 区域。这包括对与 Fargate 和亚马逊ECS实例关联的亚马逊EC2集群的保障。下式将其表示为:

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

注意事项

  • 集群的覆盖率统计数据包括与该ECS集群关联的 Fargate 任务或ECS容器实例的ECS覆盖状态。Fargate 任务的覆盖率状态包括处于正在运行状态或最近完成运行的任务。

  • ECS集群运行时覆盖率选项卡中,已覆盖的容器实例字段表示与您的 Amazon ECS 集群关联的容器实例的覆盖状态。

    如果您的 Amazon ECS 集群仅包含 Fargate 任务,则计数将显示为 0/0。

  • 如果您的 Amazon ECS 集群与没有安全代理的 Amazon EC2 实例相关联,则该亚马逊ECS集群的覆盖状态也将为 “不正常”。

    要确定关联亚马逊EC2实例的覆盖范围问题并对其进行故障排除,对 Amazon EC2 运行时覆盖问题进行故障排除请参阅 Amazon EC2 实例。

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

Console
  • 登录 AWS Management Console 并打开 GuardDuty 控制台,网址为https://console.aws.amazon.com/guardduty/

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

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

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

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

      • 账户 ID

      • 集群名称

      • 代理管理类型

      • 覆盖状态

  • 如果您的任何 Amazon ECS 集群的覆盖状态为 “不健康”,则 “问题” 列将包含有关不健康状态的原因的其他信息。

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

API/CLI
  • ListCoverageAPI使用您自己的有效检测器 ID、当前区域和服务端点运行。您可以使用它对实例列表进行筛选和排序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/控制台中的 “设置” 页面,或者运行 detectorId 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
  • 运行GetCoverageStatisticsAPI以检索基于的覆盖率聚合统计信息statisticsType

    • 您可以使用以下选项之一更改示例 statisticsType

      • COUNT_BY_COVERAGE_STATUS— 表示按覆盖状态汇总的ECS集群的覆盖率统计信息。

      • COUNT_BY_RESOURCE_TYPE— 根据列表中的 AWS 资源类型汇总的覆盖率统计信息。

      • 您可以在命令中更改示例 filter-criteria。您可以对 CriterionKey 使用以下选项:

        • ACCOUNT_ID

        • ECS_CLUSTER_NAME

        • COVERAGE_STATUS

        • MANAGEMENT_TYPE

        • INSTANCE_ID

    • 要查找您的账户和当前区域的,请查看https://console.aws.amazon.com/guardduty/控制台中的 “设置” 页面,或者运行 detectorId 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 规则,以便在保险状态从 “不健康” 变为 “健康” 或其他情况时收到通知。默认情况下,会在EventBridge 公交车上为您的账户 GuardDuty 发布此内容。

示例通知架构

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

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

{ "version": "0", "id": "event ID", "detail-type": "GuardDuty Runtime Protection Unhealthy", "source": "aws.guardduty", "account": "AWS 账户 ID", "time": "event timestamp (string)", "region": "AWS 区域", "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(ECS仅限亚马逊)问题的建议故障排除步骤。有关亚马逊EC2实例覆盖范围问题的信息,对 Amazon EC2 运行时覆盖问题进行故障排除请参阅 Amazon EC2 实例。

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

代理未报告

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

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

如果您的组织有服务控制策略 (SCP),请验证权限边界是否限制了guardduty:SendSecurityTelemetry权限。有关更多信息,请参阅 验证组织服务控制策略

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:已重试提取映像清单...

任务执行角色必须具有以下亚马逊弹性容器注册表 (AmazonECR) 权限:

... "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", ...

有关更多信息,请参阅 提供ECR权限和子网详细信息

添加 Amazon ECR 权限后,必须重新启动任务。

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

VPC终端节点创建失败

启用私有DNS需要将两者的enableDnsSupportenableDnsHostnamesVPC属性都设置truevpcId(服务:EC2,状态代码:400,请求 ID:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111)。

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

如果您使用亚马逊VPC控制台创建亚马逊VPC,请务必同时选择 “启用DNS主机名” 和 “启用DNS解析”。https://console.aws.amazon.com/vpc/有关更多信息,请参阅VPC配置选项

未预置代理

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

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

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

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

TaskDefinition - 'TASK_DEFINITION' 中缺失 TaskExecutionRole

缺少ECS任务执行角色。有关提供任务执行角色和所需权限的信息,请参阅提供ECR权限和子网详细信息

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

网络配置问题可能是由于缺少VPC配置、子网缺失或为空而出现的。

验证您的网络配置是否正确。有关更多信息,请参阅 提供ECR权限和子网详细信息

有关更多信息,请参阅《亚马逊弹性容器服务开发者指南》中的亚马逊ECS任务定义参数

其他

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

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

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

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

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

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

    您也可以使用UpdateServiceAWS CLI

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

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

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

    GuardDuty 运行时监控不支持覆盖旧格式为的任务taskArn

    有关亚马逊资源的亚马逊资源名称 (ARNs) 的信息,请参阅亚马逊资源名称 (ARNs) 和IDs。ECS