本仓库包含用于 Policy Controller 的配置文件,Policy Controller 基于开源项目 OPA Gatekeeper,用于阻止 Kubernetes Service 被设置为公网 IP 访问。
此问题的安全公告 指出:
在 Kubernetes 中发现了一个安全性问题,影响多租户集群。如果潜在攻击者已经能够创建或编辑 Service 和 Pod,那么他们可能能够拦截集群中其他 Pod(或节点)的流量。
此问题被评定为中危 (CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L),编号为 CVE-2020-8554。
能够创建 ClusterIP Service 并设置 spec.externalIPs 字段的攻击者可以拦截发往该 IP 的流量。能够修补 LoadBalancer Service 状态(这被视为特权操作,通常不应授予用户)的攻击者可以通过设置 status.loadBalancer.ingress.ip 达到类似效果。
本仓库包含一个模板(Template)和一个约束(Constraint),用于将 Service 限制为特定的公网 IP 允许列表,从而限制攻击者添加非信任 IP 的能力。
你可以使用 Policy Controller 应用这些策略,Policy Controller 是 Anthos Config Management 的一部分。要自定义允许的 IP 地址,请编辑或添加 k8sExternalIPs_constraint.yaml 中的 "allowedIPs" 列表项。
如果你只想阻止特定 CIDR 范围内的 IP,请使用文件 k8sExternalIPsCIDR_constraint.yaml 和 k8sExternalIPsCIDR_template.yaml。例如,如果你想阻止攻击者将 spec.externalIPs 字段设置为默认的 Kubernetes Service CIDR。