Amazon ECS 集群的覆盖范围 - Amazon GuardDuty

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

Amazon ECS 集群的覆盖范围

Amazon ECS 集群的运行时间覆盖范围包括在 Amazon ECS 容器实例上 AWS Fargate (Fargate) 运行的任务1

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

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

查看覆盖率统计数据

与您自己的账户或成员账户关联的 Amazon ECS 资源的覆盖率统计数据是健康的 Amazon ECS 集群占所选集群中所有 Amazon ECS 集群的百分比 AWS 区域。这包括对与 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 实例。

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

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

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

  • 选择 “运行时覆盖范围” 选项卡。

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

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

      • 账户 ID

      • 集群名称

      • 代理管理类型

      • 覆盖状态

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

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

API/CLI
  • 使用您自己的有效检测器 ID、当前区域和服务端点运行 ListCoverageAPI。您可以使用此 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 个)。

    • 要查找您的账户和当前区域的,请参阅 https://console.aws.amazon.com/guardduty/ 控制台中的 “设置” 页面,或者运行 ListDetectorsAPI 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
  • 运行 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/ 控制台中的 “设置” 页面,或者运行 ListDetectorsAPI 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 集群的覆盖状态可能显示为 “运行状况不佳”。要了解覆盖状态何时发生变化,我们建议您定期监控覆盖状态,并在状态变为 “不健康” 时进行故障排除。或者,您可以创建 Amazon EventBridge 规则,以便在保险状态从 “不健康” 变为 “健康” 或其他情况时收到通知。默认情况下,会在EventBridge 公交车上为您的账户 GuardDuty 发布此内容。

示例通知架构

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

此外,您还可以使用以下示例通知架构来创建自定义事件模式。确保替换账户的值。要在您的 Amazon ECS 集群的覆盖状态从变Healthy为时收到通知Unhealthydetail-type应为 “GuardDuty 运行时保护不正常”。要在覆盖范围状态从变为时收到通知HealthyUnhealthy请将的detail-type值替换为 “GuardDuty 运行时保护健康”。

{ "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)问题的建议故障排除步骤。有关 Amazon EC2 实例覆盖率问题的信息,请参阅 Amazon 排查覆盖问题 EC2 实例。

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

代理未报告

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

验证您的 VPC 终端节点配置是否正确。

如果您的组织有服务控制策略 (SCP),请确保它不会拒绝该guardduty:SendSecurityTelemetry权限。有关更多信息,请参阅 验证您的组织服务控制策略

VPC_ISSUE; for task in TaskDefinition - 'TASK_DEFINITION'

在额外信息中查看 VPC 问题详情。

代理已退出

ExitCode: EXIT_CODE 用于中的任务 TaskDefinition - 'TASK_DEFINITION'

在额外信息中查看问题详情。

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

ExitCode: EXIT_CODE 有原因:“EXIT_CODE” 表示中的任务 TaskDefinition - 'TASK_DEFINITION'

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

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

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

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

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

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

未配置其他人或代理

未识别的问题,适用于中的任务 TaskDefinition - 'TASK_DEFINITION'

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

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

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

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

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

    您也可以使用UpdateServiceAWS CLI

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

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

  • 你的任务缺少了TaskExecutionRole吗?

    必须添加一个,TaskExecutionRole因为 GuardDuty 需要从 ECR 存储库下载 GuardDuty 容器的权限。有关更多信息,请参阅 提供 ECR 权限和子网详细信息

  • 您的服务是否包含旧格式为的任务taskArn

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

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