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 管理控制台,打开 GuardDuty 控制台:https://console.aws.amazon.com/guardduty/。
-
在导航窗格中,选择运行时监控。
-
选择 EKS 集群运行时覆盖范围选项卡。
-
在 EKS 集群运行时覆盖范围选项卡下,您可以查看按集群列表表中可用的覆盖状态汇总的覆盖率统计数据。
-
您可以按以下列筛选集群列表表:
-
集群名称:
-
账户 ID
-
代理管理类型
-
覆盖状态
-
插件版本
-
如果您的任何 EKS 集群的覆盖状态为不正常,则问题列可能包含有关不正常状态原因的其他信息。
- API/CLI
-
-
使用您自己的有效检测器 ID、区域和服务端点运行 ListCoverage API。您可以使用此 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 个)。
-
要查找您账户和当前区域的 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
-
运行 GetCoverageStatistics API,以检索基于 statisticsType 的覆盖范围汇总统计数据。
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 规则,当覆盖状态从 Unhealthy 变为 Healthy,或变为其他状态时通知您。默认情况下,GuardDuty 会在您账户的 EventBridge 总线中发布此信息。
示例通知架构
在 EventBridge 规则中,您可以使用预定义的示例事件和事件模式来接收覆盖状态通知。有关创建 EventBridge 规则的更多信息,请参阅《Amazon EventBridge 用户指南》中的创建规则。
此外,您还可以使用以下示例通知架构来创建自定义事件模式。确保替换账户的值。要在 Amazon EKS 集群的覆盖率状态从 Healthy 变为 Unhealthy 时接收通知,则 detail-type 应为 GuardDuty Runtime Protection Unhealthy。要在覆盖状态从 Unhealthy 变为 Healthy 时收到通知,请将 detail-type 的值替换为 GuardDuty Runtime Protection Healthy。
{
"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"
}
}
对 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 版本之一。有关更多信息,请参阅 GuardDuty 安全代理支持的 Kubernetes 版本。有关更新 Kubernetes 版本的信息,请参阅更新 Amazon EKS 集群 Kubernetes 版本。
|
附加组件创建失败
附加组件更新失败
附加组件状态不正常 |
EKS 插件问题:AddonIssueCode:AddonIssueMessage |
有关特定附加组件问题代码的推荐步骤的信息,请参阅Troubleshooting steps for Addon creation/updatation error with Addon issue code。
有关在此问题中可能遇到的附加组件问题代码的列表,请参阅 AddonIssue。
|
|
VPC 端点创建失败
|
共享 VPC vpcId 不支持创建 VPC 端点
|
运行时监控现在支持在组织内使用共享 VPC。确保您的账户满足所有先决条件。有关更多信息,请参阅 使用共享 VPC 的先决条件。
|
|
仅在将自动代理配置与共享 VPC 结合使用时
共享 VPC vpcId 的所有者账户 ID 111122223333 未启用运行时监控、自动代理配置或运行时监控与自动代理配置。
|
共享 VPC 所有者账户必须至少为一种资源类型 [Amazon EKS 或 Amazon ECS(Amazon Fargate)] 启用运行时监控和自动代理配置。有关更多信息,请参阅 GuardDuty 运行时监控特有的先决条件。 |
启用私有 DNS 需要将 vpcId 的 enableDnsSupport 和 enableDnsHostnames VPC 属性设置为 true(服务:Ec2,状态代码:400,请求 ID:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111)。 |
确保以下 VPC 属性设置为 true – enableDnsSupport 和 enableDnsHostnames。有关更多信息,请参阅 VPC 中的 DNS 属性。
如果您在 https://console.aws.amazon.com/vpc/ 上使用 Amazon VPC 控制台创建 Amazon VPC,确保选择启用 DNS 主机名和启用 DNS 解析。有关更多信息,请参阅 VPC 配置选项。 |
VPC 端点删除失败 |
账户 ID 111122223333、共享 VPC vpcId、所有者账户 ID 555555555555 不允许删除共享 VPC 端点。 |
可能的步骤:
-
禁用共享 VPC 参与者账户的运行时监控状态不会影响共享 VPC 端点策略和所有者账户中存在的安全组。
要删除共享 VPC 端点和安全组,您必须在共享 VPC 所有者账户中禁用运行时监控或自动代理配置状态。
-
共享 VPC 参与者账户无法删除共享 VPC 端点和共享 VPC 所有者账户中托管的安全组。
|
本地 EKS 集群 |
本地 Outpost 集群不支持 EKS 插件。 |
不可操作。
有关更多信息,请参阅 Amazon EKS on Amazon outposts。
|
未授予 EKS 运行时监控启用权限 |
(可能会也可能不会显示额外信息) |
-
如果有关于此问题的额外信息,请解决根本原因并执行下一步。
-
切换 EKS 运行时监控以将其关闭,然后再次开启。确保同时部署 GuardDuty 代理,无论是通过 GuardDuty 自动部署还是手动部署。
|
EKS 运行时监控启用资源正在预置 |
(可能会也可能不会显示额外信息) |
不可操作。
启用 EKS 运行时监控后,覆盖状态可能会保持 Unhealthy,直到资源预置步骤完成。定期监控和更新覆盖状态。 |
其他(任何其他问题) |
由于授权失败而导致的错误 |
切换 EKS 运行时监控以将其关闭,然后再次开启。确保同时部署 GuardDuty 代理,无论是通过 GuardDuty 自动部署还是手动部署。 |
带有附加组件问题代码的附加组件创建/更新错误的故障排除步骤
附加组件创建或更新错误 |
故障排除步骤 |
|
EKS 附加组件问题 – InsufficientNumberOfReplicas:该附加组件运行不正常,因为没有所需数量的副本。
|
-
借助问题消息,您可以确定并解决根本原因。您可以首先描述您的集群。例如,使用 kubectl describe pods 来确定容器组(pod)故障的根本原因。
解决根本原因后,请重试该步骤(创建或更新附加组件)。
-
如果问题仍然存在,请验证 Amazon EKS 集群的 VPC 端点配置是否正确。有关更多信息,请参阅 验证 VPC 端点配置。
|
|
EKS 附加组件问题 – InsufficientNumberOfReplicas:该附加组件运行不正常,因为一个或多容器组(pod)未调度,0/x 个节点可用:x Insufficient cpu. preemption: not eligible due to preemptionPolicy=Never。
|
要解决此问题,您可以执行下列操作之一:
此消息会显示 o/x,因为 GuardDuty 仅报告第一个发现的错误。GuardDuty Daemonset 中运行的容器组(pod)的实际数量可能大于 0。
|
|
EKS 附加组件问题 – InsufficientNumberOfReplicas:该附加组件运行不正常,因为一个或多容器组(pod)未调度,0/x 个节点可用:x Too many pods. preemption: not eligible due to preemptionPolicy=Never。
|
|
EKS 附加组件问题 – InsufficientNumberOfReplicas:该附加组件运行不正常,因为一个或多容器组(pod)未调度,0/x 个节点可用:1 Insufficient memory. preemption: not eligible due to preemptionPolicy=Never。
|
|
EKS 附加组件问题 – InsufficientNumberOfReplicas:该附加组件运行不正常,因为一个或多个 pod 有等候容器 CrashLoopBackOff: Completed
|
您可以查看与容器组(pod)关联的日志并确定问题所在。有关如何执行此操作的信息,请参阅 Kubernetes 文档中的 Debug Running Pods。
请遵循以下核对清单来排查此附加组件问题:
-
验证是否已启用运行时监控。
-
验证是否满足 Amazon EKS 集群支持的先决条件,例如经过验证的操作系统发行版和受支持的 Kubernetes 版本。
-
如果您手动管理安全代理,请确认您为所有 VPC 创建了 VPC 端点。启用 GuardDuty 自动配置时,您仍应验证 VPC 端点是否已创建。例如,在自动配置中使用共享 VPC 时。
要验证这一点,请参阅验证 VPC 端点配置。
-
确认 GuardDuty 安全代理能够解析 GuardDuty VPC 端点私有 DNS。要了解端点,请参阅管理 Guarduty 安全代理中的端点的私有 DNS 名称。
为此,您可以使用 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 文档中的 Debug Running Pods。
确定问题后,请使用以下核对清单对此进行故障排除:
|
EKS 附加组件问题 – AdmissionRequestDenied:准入 Webhook "validate.kyverno.svc-fail" 拒绝了请求:违反资源的策略 DaemonSet/amazon-guardduty/aws-guardduty-agent:restrict-image-registries:autogen-validate-registries:... |
-
Amazon EKS 集群或安全管理员必须检查阻止附加组件更新的安全策略。
-
您必须禁用控制器 (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:EKSAddonIssue - 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。有关更多信息,请参阅 托管 GuardDuty 代理的 Amazon ECR 存储库中的 EKS v1.8.1-eks-build.2 的 ECR 存储库。
|