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

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

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

启用运行时监控并手动或通过自动代理配置为 EKS 安装 GuardDuty 安全代理(附加组件)后,您可以开始评估 EKS 集群的覆盖范围。

查看覆盖率统计数据

与您自己的账户或成员账户关联的 EKS 集群的覆盖率统计数据,指的是正常 EKS 集群占选定 AWS 区域环境中所有 EKS 集群的百分比。下式将其表示为:

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

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

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

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

  • 选择 EKS 集群运行时覆盖范围选项卡。

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

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

      • 集群名称

      • 账户 ID

      • 代理管理类型

      • 覆盖状态

      • 插件版本

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

API/CLI
  • 使用您自己的有效检测器 ID、区域和服务端点运行 ListCoverageAPI。您可以使用此 API 对集群列表进行筛选和排序。

    • 您可以使用以下 CriterionKey 选项之一更改示例 filter-criteria

      • ACCOUNT_ID

      • CLUSTER_NAME

      • RESOURCE_TYPE

      • COVERAGE_STATUS

      • ADDON_VERSION

      • MANAGEMENT_TYPE

    • 您可以使用以下选项更改 sort-criteria 中的示例 AttributeName

      • ACCOUNT_ID

      • CLUSTER_NAME

      • COVERAGE_STATUS

      • ISSUE

      • ADDON_VERSION

      • UPDATED_AT

    • 您可以更改max-results(最多 50 个)。

    • 要查找与您的账户和当前地区detectorId对应的,请参阅https://console.aws.amazon.com/guardduty/控制台中的设置页面,或者运行 ListDetectorsAPI。

    aws guardduty --region us-east-1 list-coverage --detector-id 12abc34d567e8fa901bc2d34e56789f0 --sort-criteria '{"AttributeName": "EKS_CLUSTER_NAME", "OrderBy": "DESC"}' --filter-criteria '{"FilterCriterion":[{"CriterionKey":"ACCOUNT_ID", "FilterCondition":{"EqualsValue":"111122223333"}}] }' --max-results 5
  • 运行 GetCoverageStatisticsAPI 以检索基于的覆盖率汇总统计信息statisticsType

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

      • COUNT_BY_COVERAGE_STATUS:表示按覆盖状态汇总的 EKS 集群的覆盖率统计数据。

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

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

        • ACCOUNT_ID

        • CLUSTER_NAME

        • RESOURCE_TYPE

        • COVERAGE_STATUS

        • ADDON_VERSION

        • MANAGEMENT_TYPE

    • 要查找与您的账户和当前地区detectorId对应的,请参阅https://console.aws.amazon.com/guardduty/控制台中的设置页面,或者运行 ListDetectorsAPI。

    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"}}] }'

如果您的 EKS 集群的覆盖状态为不正常,请参阅 对 Amazon EKS 运行时覆盖率问题故障排除

保险状态会随着 EventBridge通知而发生变化

您账户中 EKS 集群的覆盖状态可能显示为不正常。要检测覆盖状态何时变为不正常,我们建议您定期监控覆盖状态,并在状态变为不正常时进行问题排查。或者,您可以创建 Amazon EventBridge 规则,以便在保险状态从变UnhealthyHealthy或其他状态时通知您。默认情况下,会在EventBridge 公交车上为您的账户 GuardDuty 发布此内容。

示例通知架构

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

此外,您还可以使用以下示例通知架构来创建自定义事件模式。确保替换账户的值。要在您的 Amazon EKS 集群的覆盖状态从变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": "EKS", "eksClusterDetails": { "clusterName": "string", "availableNodes": "string", "desiredNodes": "string", "addonVersion": "string" } }, "issue": "string", "lastUpdatedAt": "timestamp" } }

对 Amazon EKS 运行时覆盖率问题故障排除

如果您的 EKS 集群的覆盖状态为Unhealthy,则可以在 GuardDuty 控制台的 “问题” 列下或使用CoverageResource数据类型查看相应的错误。

在使用包含或排除标签有选择地监控 EKS 集群时,标签可能需要一些时间才能同步。这可能会影响关联 EKS 集群的覆盖状态。您可以再次尝试删除并添加相应的标签(包含或排除)。有关更多信息,请参阅《Amazon EKS 用户指南》中的标记 Amazon EKS 资源

覆盖问题的结构是 Issue type:Extra information。通常,问题会有一个可选的额外信息,其中可能包括特定的客户端异常或有关问题的描述。根据额外信息,下表提供了对 EKS 集群的覆盖问题进行故障排除的建议步骤。

问题类型(前缀)

额外信息

建议的问题排查步骤

附加组件创建失败

插件aws-guardduty-agent与当前集群版本的集群不兼容。ClusterName不支持指定的插件。

确保您使用的是支持部署 aws-guardduty-agent EKS 插件的 Kubernetes 版本之一。有关更多信息,请参阅 安全代理支持的 Kubernetes 版本 GuardDuty 。有关更新 Kubernetes 版本的信息,请参阅更新 Amazon EKS 集群 Kubernetes 版本

附加组件创建失败

附加组件更新失败

附加组件状态不正常

EKS 插件问题:AddonIssueCode:AddonIssueMessage

有关特定附加组件问题代码的推荐步骤的信息,请参阅Troubleshooting steps for Addon creation/updatation error with Addon issue code

有关您可能在此问题中遇到的插件问题代码列表,请参阅AddonIssue

VPC 端点创建失败

共享 VPC 不支持创建 VPC 终端节点 vpcId

运行时监控现在支持在组织内使用共享 VPC。确保您的账户满足所有先决条件。有关更多信息,请参阅 使用共享 VPC 的先决条件

仅在将自动代理配置与共享 VPC 结合使用时

共享 VPC 的所有者账户 ID 111122223333 vpcId 未启用运行时监控和/或自动代理配置。

共享 VPC 所有者账户必须至少为一种资源类型 [Amazon EKS 或 Amazon ECS(AWS Fargate)] 启用运行时监控和自动代理配置。有关更多信息,请参阅 特定于 GuardDuty 运行时监控的先决条件

启用私有 DNS 需要同时启用私有 DNS,enableDnsSupport并且将 enableDnsHostnames true VPC 属性设置为vpcId(服务:Ec2,状态代码:400,请求 ID:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111)。

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

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

VPC 端点删除失败

不允许删除账户 ID、共享 VPC 111122223333 vpcId、所有者账户 ID 的共享 VPC 终端节点555555555555

可能的步骤:
  • 禁用共享 VPC 参与者账户的运行时监控状态不会影响共享 VPC 端点策略和所有者账户中存在的安全组。

    要删除共享 VPC 端点和安全组,您必须在共享 VPC 所有者账户中禁用运行时监控或自动代理配置状态。

  • 共享 VPC 参与者账户无法删除共享 VPC 端点和共享 VPC 所有者账户中托管的安全组。

本地 EKS 集群

本地 Outpost 集群不支持 EKS 插件。

不可操作。

有关更多信息,请参阅AWS 前哨基地上的 Amazon EKS

未授予 EKS 运行时监控启用权限

(可能会也可能不会显示额外信息)

  1. 如果有关于此问题的额外信息,请解决根本原因并执行下一步。

  2. 切换 EKS 运行时监控以将其关闭,然后再次开启。无论是自动部署 GuardDuty 还是手动部署,都要确保 GuardDuty代理也已部署。

EKS 运行时监控启用资源正在预置

(可能会也可能不会显示额外信息)

不可操作。

启用 EKS 运行时监控后,覆盖状态可能会保持 Unhealthy,直到资源预置步骤完成。定期监控和更新覆盖状态。

其他(任何其他问题)

由于授权失败而导致的错误

切换 EKS 运行时监控以将其关闭,然后再次开启。确保 GuardDuty 代理也已通过自动部署 GuardDuty 或手动部署。

带有插件问题代码的插件创建/更新错误的疑难解答步骤

附加组件创建或更新错误

故障排除步骤

EKS 附加组件问题 – InsufficientNumberOfReplicas:该附加组件运行不正常,因为没有所需数量的副本。

  • 借助问题消息,您可以确定并解决根本原因。您可以首先描述您的集群。例如,使用 kubectl describe pods 来确定容器组(pod)故障的根本原因。

    解决根本原因后,请重试该步骤(创建或更新附加组件)。

  • 如果问题仍然存在,请验证 Amazon EKS 集群的 VPC 端点配置是否正确。有关更多信息,请参阅 验证 VPC 端点配置

EKS Addon Issue-InsufficientNumberOfReplicas: 该插件运行状况不佳,因为一个或多个 pod 不是已调度0/x节点可用:. x Insufficient cpu. preemption: not eligible due to preemptionPolicy=Never

要解决此问题,您可以执行下列操作之一:

注意

o/x所以显示此消息,是因为仅 GuardDuty 报告第一个发现的错误。守护进程 GuardDuty 集中运行的 pod 的实际数量可能大于 0。

EKS Addon Issue-InsufficientNumberOfReplicas: 该插件运行状况不佳,因为一个或多个 pod 不是已调度0/x节点可用:. x Too many pods. preemption: not eligible due to preemptionPolicy=Never

EKS Addon Issue-InsufficientNumberOfReplicas: 该插件运行状况不佳,因为一个或多个 pod 不是已调度0/x节点可用:. 1 Insufficient memory. preemption: not eligible due to preemptionPolicy=Never

EKS 插件问题-InsufficientNumberOfReplicas:该插件运行状况不佳,因为一个或多个 pod 有等待的容器 CrashLoopBackOff: Completed

您可以查看与 pod 关联的日志并确定问题所在。有关如何执行此操作的信息,请参阅 Kubernetes 文档中的调试正在运行的 Pod

使用以下清单来解决此插件问题:

  • 验证运行时监控是否已启用。

  • 验证是否满足Amazon EKS 集群支持的先决条件,例如经过验证的操作系统发行版和支持的 Kubernetes 版本。

  • 手动管理安全代理时,请确认您已为所有安全代理创建了 VPC 终端节点 VPCs。启用 GuardDuty 自动配置后,您仍应验证 VPC 终端节点是否已创建。例如,在自动配置中使用共享 VPC 时。

    要验证这一点,请参阅验证 VPC 端点配置

  • 确认 GuardDuty 安全代理能够解析 GuardDuty VPC 终端节点私有 DNS。要了解终端节点,请参阅中的终端节点私有 DNS 名称管理 GuardDuty 安全代理

    为此,你可以在 Windows 或 Mac 上使用任一nslookup工具,也可以在 Linux 上使用dig工具。使用 nslookup 时,可以在用您的区域替换区域后us-west-2使用以下命令:

    nslookup guardduty-data.us-west-2.amazonaws.com
  • 确认您的 GuardDuty VPC 终端节点策略或服务控制策略未影响guardduty:SendSecurityTelemetry操作。

EKS 插件问题-InsufficientNumberOfReplicas:该插件运行状况不佳,因为一个或多个 pod 有等待的容器 CrashLoopBackOff: Error

您可以查看与 pod 关联的日志并确定问题所在。有关如何执行此操作的信息,请参阅 Kubernetes 文档中的调试正在运行的 Pod

确定问题后,请使用以下清单进行故障排除:

  • 验证运行时监控是否已启用。

  • 验证是否满足Amazon EKS 集群支持的先决条件,例如经过验证的操作系统发行版和支持的 Kubernetes 版本。

  • GuardDuty 安全代理能够解析 GuardDuty VPC 终端节点的私有 DNS。要了解终端节点,请参阅中的终端节点私有 DNS 名称管理 GuardDuty 安全代理

EKS 插件问题-AdmissionRequestDenied: 准入 webhook "validate.kyverno.svc-fail" 拒绝了请求:资源违规政策DaemonSet/amazon-guardduty/aws-guardduty-agent:: restrict-image-registries:... autogen-validate-registries

  1. Amazon EKS 集群或安全管理员必须检查阻止附加组件更新的安全策略。

  2. 您必须禁用控制器 (webhook) 或让控制器接受来自 Amazon EKS 的请求。

EKS 附加组件问题 – ConfigurationConflict:尝试应用时发现冲突。由于解决冲突模式的原因,不会继续。Conflicts: DaemonSet.apps aws-guardduty-agent - .spec.template.spec.containers[name="aws-guardduty-agent"].image

创建或更新附加组件时,请提供 OVERWRITE 解决冲突标志。这可能会覆盖在 Kubernetes 中使用 Kubernetes API 直接对相关资源所做的任何更改。

您可以先从集群中移除 Amazon EKS 附加组件,然后重新安装。

EKS 附加组件问题 – AccessDenied: priorityclasses.scheduling.k8s.io "aws-guardduty-agent.priorityclass" is forbidden: User "eks:addon-manager" cannot patch resource "priorityclasses" in API group "scheduling.k8s.io" at the cluster scope

您必须手动将缺失的权限添加到 eks:addon-cluster-admin ClusterRoleBinding 中。将以下 yaml 添加到 eks:addon-cluster-admin 中:

--- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: eks:addon-cluster-admin subjects: - kind: User name: eks:addon-manager apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io ---

您现在可以使用以下命令将此 yaml 应用到 Amazon EKS 集群中:

kubectl apply -f eks-addon-cluster-admin.yaml

AddonUpdationFailed: EKSAddon 问题-AccessDenied: namespaces\"amazon-guardduty\"isforbidden:User\"eks:addon-manager\"cannotpatchresource\"namespaces\"inAPIgroup\"\"inthenamespace\"amazon-guardduty\"

EKS 附加组件问题 – AccessDenied: admission webhook "validation.gatekeeper.sh" denied the request: [all-namespace-must-have-label-owner] All namespaces must have an `owner` label

您必须禁用控制器或让控制器接受来自 Amazon EKS 集群的请求。

在创建或更新插件之前,您还可以创建一个 GuardDuty 命名空间并将其标记为owner

EKS 附加组件问题 – AccessDenied: admission webhook "validation.gatekeeper.sh" denied the request: [all-namespace-must-have-label-owner] All namespaces must have an `owner` label

您必须禁用控制器或让控制器接受来自 Amazon EKS 集群的请求。

在创建或更新插件之前,您还可以创建一个 GuardDuty 命名空间并将其标记为owner

EKS 附加组件问题 – AccessDenied: admission webhook "validation.gatekeeper.sh" denied the request: [allowed-container-registries] container <aws-guardduty-agent> has an invalid image registry

将的图像注册 GuardDuty 表添加到准入控制器allowed-container-registries中的。有关更多信息,请参阅中的 E KS v1.8.1-eks-build.2 的 ECR 存储库Amazon ECR 存储库托管代理 GuardDuty