本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon EKS 集群的运行时覆盖率和故障排除
启用运行时监控并手动或通过自动代理配置为 EKS 安装 GuardDuty 安全代理(附加组件)后,您可以开始评估 EKS 集群的覆盖范围。
查看覆盖率统计数据
与您自己的账户或成员账户关联的 EKS 集群的覆盖率统计数据,指的是正常 EKS 集群占选定 AWS 区域环境中所有 EKS 集群的百分比。下式将其表示为:
(正常集群/所有集群)*100
选择一种访问方法来查看您账户的覆盖率统计数据。
- Console
-
- 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
。
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
或其他状态时通知您。默认情况下,会在EventBridge 公交车上为您的账户 GuardDuty 发布此内容。
示例通知架构
在 EventBridge 规则中,您可以使用预定义的示例事件和事件模式来接收覆盖状态通知。有关创建 EventBridge 规则的更多信息,请参阅 Amazon EventBridge 用户指南中的创建规则。
此外,您还可以使用以下示例通知架构来创建自定义事件模式。确保替换账户的值。要在您的 Amazon EKS 集群的覆盖状态从变Healthy
为时收到通知Unhealthy
,detail-type
应该是GuardDuty Runtime
Protection Unhealthy
。要在保险状态从变为时收到通知Healthy
,Unhealthy
请将的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 属性设置为 true – enableDnsSupport 和 enableDnsHostnames 。有关更多信息,请参阅 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 运行时监控启用权限 |
(可能会也可能不会显示额外信息) |
-
如果有关于此问题的额外信息,请解决根本原因并执行下一步。
-
切换 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。
确定问题后,请使用以下清单进行故障排除:
|
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: 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
|