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

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

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

启用 Runtime Monitoring 并手动EKS或通过自动代理配置安装 GuardDuty 安全代理(附加组件)后,就可以开始评估EKS集群的覆盖范围了。

查看覆盖率统计数据

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

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

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

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

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

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

  • EKS集群运行时覆盖率选项卡下,您可以查看按集群列表表中提供的覆盖率状态汇总的覆盖率统计信息。

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

      • 集群名称

      • 账户 ID

      • 代理管理类型

      • 覆盖状态

      • 插件版本

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

API/CLI
  • ListCoverageAPI使用您自己的有效检测器 ID、区域和服务端点运行。您可以使用它对集群列表进行筛选和排序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/控制台中的设置页面,或者运行 ListDetectors API.

    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/控制台中的设置页面,或者运行 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"}}] }'

如果您的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群集的覆盖状态。您可以再次尝试删除并添加相应的标签(包含或排除)。有关更多信息,请参阅《亚马逊EKS用户指南》中的为您的亚马逊EKS资源添加标签

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

问题类型(前缀)

额外信息

建议的问题排查步骤

插件创建失败

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

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

插件创建失败

插件更新失败

插件状态不健康

EKS插件问题-AddonIssueCode: AddonIssueMessage

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

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

VPC终端节点创建失败

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

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

仅当使用VPC与自动代理配置共享时

所有者账户 ID 111122223333 用于共享 VPC vpcId 没有启用运行时监控、自动代理配置或两者兼而有之。

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

启用私有DNS需要两者兼enableDnsSupport而有之,并且将enableDnsHostnamesVPCtrue属性设置为 vpcId (服务:Ec2,状态代码:400,请求编号:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111).

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

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

共享VPC端点删除失败

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

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

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

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

本地EKS集群

EKS本地前哨集群不支持插件。

不可操作。

如需了解更多信息,请参阅 Amazon EKS 关于 AWS 前哨基地

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

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

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

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

EKS运行时监控启用资源调配正在进行中

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

不可操作。

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

其他(任何其他问题)

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

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

插件创建或更新错误

故障排除步骤

EKS插件问题-InsufficientNumberOfReplicas:该插件运行状况不佳,因为它没有所需的副本数量。

  • 使用问题消息,您可以确定并修复根本原因。您可以先描述您的集群。例如,kubectl describe pods用于确定 Pod 故障的根本原因。

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

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

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

你可以先删除插件,然后重新安装。

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手动将缺少的权限添加到。将以下内容添加yamleks: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

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

您必须明确允许准入控制器 webhook 访问您所在地区的注册表,如中所EKS代理版本 1.6.0 或更高版本的存储库述。