本页面介绍了 Policy Controller 是什么,以及如何使用它来帮助确保您的 Kubernetes 集群和工作负载以安全且合规的方式运行。
本页面适用于根据公司战略定义 IT 解决方案和系统架构,并通过提供和维护自动化以进行审核或强制执行,从而确保云平台中运行的所有资源满足组织合规性要求的 IT 管理员、运维人员和安全专家。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE Enterprise 用户角色和任务。
Policy Controller 支持为 Kubernetes 集群应用和实施可编程政策。这些政策充当安全措施,有助于实现集群和舰队的最佳实践、安全性和合规性管理。基于开放源代码 Open Policy Agent Gatekeeper 项目,Policy Controller 与 Google Cloud 完全集成,包括一个内置信息中心实现可观测性,并附带一个预建政策的完整库,用于常见安全性与合规性控制。
Policy Controller 可通过 Google Kubernetes Engine (GKE) Enterprise 版本许可使用。
Policy Controller 的优势
- 与 Google Cloud 集成:平台管理员可以使用 Google Cloud 控制台、使用 Terraform 或在连接到舰队的任何集群上使用 Google Cloud CLI 安装 Policy Controller。Policy Controller 可与其他 Google Cloud 服务搭配使用,例如 Config Sync、指标和 Cloud Monitoring。
- 支持多个强制执行点:除了集群审核和准入控制之外,Policy Controller 还可以选择启用左移方法在应用之前分析和捕获不合规的更改。
- 预建的政策包:Policy Controller 提供完整的预构建政策库,用于实现常见的安全性和合规性控制。这些模板包括由 Google 构建和维护的政策软件包和限制条件模板库。
- 支持自定义政策:如果除了使用限制条件模板库提供的功能要求之外,还需要自定义政策,则 Policy Controller 还支持开发自定义限制条件模板。
- 内置可观测性:Policy Controller 包含一个 Google Cloud 控制台信息中心,可提供应用于舰队的所有政策的状态概览(包括未注册的集群)。在信息中心中,查看合规性和强制执行状态以帮助您排查问题,并获取专业的建议来解决政策违规问题。
政策包
您可以使用政策包来应用一些限制条件,这些限制条件分组到特定的 Kubernetes 标准、安全性或合规性主题下。这些政策包由 Google 构建和维护,因此无需编写任何代码即可供您使用。例如,您可以使用以下政策包:
- 强制执行许多与 PodSecurityPolicy 相同的要求,但在此基础上,除了可以强制执行配置之外,还可以审核配置,从而确保所有政策更改都不会对正在运行的工作负载造成干扰。
- 使用与 Cloud Service Mesh 兼容的限制条件来审核网格安全漏洞的合规性并了解是否符合最佳实践。
- 将一般最佳实践应用于集群资源,以帮助强化安全状况。
Policy Controller 包概览提供了更多详细信息和当前可用的政策包列表。
限制条件
Policy Controller 使用称为限制条件的对象来实施集群的合规性。您可以将限制条件视为政策的“组成要素”。每个限制条件都会定义对 Kubernetes API 的特定更改,以允许或不允许对限制条件应用于的集群进行此更改。您可以设置政策主动屏蔽不符合政策的 API 请求,或者审核集群的配置并报告违规行为。在任一情况下,您都可以查看警告消息,并详细了解集群中发生了什么违规行为。借助这些信息,您可以解决问题。例如,您可以使用以下单个限制条件:
- 要求每个命名空间至少有一个标签。例如,当使用 GKE Usage Metering 时,可以使用这个约束来确保准确地跟踪资源消耗。
- 限制可以从中提取给定容器映像的代码库。 此限制条件可确保从未知来源拉取容器的任何尝试都被拒绝,从而防止集群运行潜在的恶意软件。
- 控制容器是否可以在特权模式下运行。此限制条件可控制任何容器启用特权模式的能力,从而控制哪些容器(如有)可以使用不受限制的政策运行。
这些只是 Policy Controller 附带的限制条件模板库中提供的部分限制条件。此库包含许多政策,可用于帮助您实施最佳实践并限制风险。如果除了限制条件模板库中提供的内容之外,您还需要更多自定义功能,则还可以创建自定义限制条件模板。
您可以使用 Kubernetes API 将限制条件直接应用于集群,也可以使用 Config Sync 将限制条件从集中来源(例如 Git 代码库)分发到一组集群。