Amazon EKS 集群的覆盖范围 - Amazon GuardDuty
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Amazon EKS 集群的覆盖范围

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

查看覆盖率统计数据

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

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

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

Console
  • 登录 Amazon Web Services 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

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

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

    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— 根据列表中的 Amazon 资源类型汇总的覆盖率统计信息。

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

        • ACCOUNT_ID

        • CLUSTER_NAME

        • RESOURCE_TYPE

        • COVERAGE_STATUS

        • ADDON_VERSION

        • MANAGEMENT_TYPE

    • 要查找您的账户和当前区域的,请参阅 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"}}] }'

如果您的 EKS 集群的覆盖状态为不正常,请参阅 排除 EKS 覆盖范围问题

配置覆盖状态变更通知

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

示例通知架构

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

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

{ "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": "EKS", "eksClusterDetails": { "clusterName": "string", "availableNodes": "string", "desiredNodes": "string", "addonVersion": "string" } }, "issue": "string", "lastUpdatedAt": "timestamp" } }

排除 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 vpcID 不支持创建 V PC 终端节点

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

仅当使用带有自动代理配置的共享 VPC 时

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

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

启用私有 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 配置选项

删除共享 VPC 终端节点失败

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

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

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

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

本地 EKS 集群

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

不可操作。

有关更多信息,请参阅 Amazon EKS on Amazon outposts

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

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

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

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

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

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

不可操作。

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

其他(任何其他问题)

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

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

插件创建或更新错误

故障排除步骤

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

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

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

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 API 直接对 Kubernetes 中的相关资源所做的任何更改。

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

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