Anthos 安全蓝图:强制执行政策

本文档介绍如何在 Anthos 集群上强制执行安全政策。其中简要介绍了如何强制执行政策以及相应原因,并介绍了执行此任务时需要用到的 Google Cloud 控制措施。

本文档是提供有关如何使用 Anthos 的指导性指南的系列安全蓝图中的一篇。如需详细了解这些蓝图,请参阅 Anthos 安全蓝图:常见问题解答

简介

您可以对集群应用政策,以确保满足您的安全规范和合规性要求。应用政策后,您需要确保这些政策得到强制执行,您的 Anthos 集群中的设置符合您指定的政策配置。

政策强制执行是对集群审核的补充。审核会让您了解集群的过去状态和当前状态,但不会阻止任何会规避政策的操作。相反,政策强制执行只是一种预防性控制措施。您应该在集群和命名空间级层应用政策以满足您的要求。

您需要考虑如何强制满足以下要求:

  • 限制资源用量。
  • 限制集群中的网络流量。
  • 限制 Pod 可以使用的功能。
  • 定义自定义政策,例如强制应用必需的标签。

GitHub 代码库的 enforcing-policies 目录中与本蓝图关联的内容说明了如何配置满足位置限制要求所需的安全控制措施。

了解您需要的安全控制措施

本部分讨论了强制执行有助于您满足安全要求和合规性要求的政策所需要的控制措施。

命名空间

为应使用相同政策的资源加标签

借助命名空间,您可以为集群内的相关资源(例如 Pod、Service 和副本控制器)提供范围。通过使用命名空间,您可以将相关资源的管理责任作为一个单元进行委派。因此,命名空间是大多数安全模式不可或缺的一部分。

命名空间是控制平面隔离的一项重要功能。不过,它们不提供节点隔离、数据平面隔离和网络隔离。

一种常用的方法是为各个应用创建命名空间。例如,您可以为应用的界面组件创建命名空间 myapp-frontend

资源配额

控制资源用量

GKE 支持在同一集群中运行由多个团队管理的多个应用。如果没有任何团队负责管理集群中的资源使用情况,则集群中运行的应用可能会消耗超过正常量的资源。为了帮助避免这种情况,管理员必须配置资源配额,从而限制命名空间内定义的资源的总资源用量。

Anthos 配置管理

将配置应用于您的 Anthos 集群

管理 Anthos 集群时的一个最佳做法是使用 Anthos Config Management,它可以使已注册的集群与配置保持同步。config 是存储在代码库中的 YAML 或 JSON 文件,包含您可以通过 kubectl apply 命令手动应用于集群的相同类型的配置详细信息。借助 Anthos Config Management,您可以像管理应用一样管理政策和基础架构部署,只需采用声明式方法即可。

您可以将 Anthos Config Management 与作为您声明的政策的单一可信来源的 Git 代码库结合使用。Anthos Config Management 可以管理访问权限控制政策,例如 RBAC、资源配额、命名空间和平台级基础架构部署。Anthos Config Management 以声明性的方式运作,它会不断检查集群状态并将其调整到配置中声明的状态,实施相应的政策。

网络政策

强制控制集群内网络流量的流动

网络政策使用 Pod 级防火墙规则强制控制第 4 层网络流量流动。网络政策的范围限定为命名空间

默认情况下,即使为该命名空间启用了网络政策,访问集群中的 Pod 也不受限制。当至少一个 NetworkPolicy 对象选择 Pod 时,系统才会强制执行。

最佳做法是采用最小权限方法。实施网络政策时,我们建议您在命名空间中创建一个默认的“全部拒绝”规则来匹配所有 Pod;这会使命名空间阻止访问(即,充当一个“故障时关闭的”系统)。要允许网络流量流动,您必须确保为每个命名空间明确设置网络政策。

下图显示,通过为每个命名空间配置网络政策,您可以实现用于管理应用之间的流量流动的政策。

使用网络政策管理命名空间之间的流量流动。

在此例中,流量被允许在具有 app:transactions 标签的应用和具有 app:shopfront 标签的的应用之间双向流动。但是,只允许流量从具有 app:shopfront 标签的应用流向 logging 应用;不允许流量从 logging 应用流向 shopfront 应用。

网络政策是有状态的。这意味着,如果允许特定方向的流量(请求),则自动允许同一连接的返回流量(响应)。

如需查看显示 Anthos Config Management 典型部署方法的网络政策示例,请参阅 GitHub 上安全蓝图代码库中的流量限制目录

Anthos 政策控制器

强制要求遵守政策

Anthos 政策控制器是一个 Kubernetes 动态准入控制器,用于强制实施由 Open Policy Agent (OPA) 执行的基于 CustomResourceDefinition(基于 CRD)的政策。

准入控制器是 Kubernetes 插件,用于在对象持久保留之前,但在请求经过身份验证和授权之后拦截对 Kubernetes API 服务器的请求。您可以使用准入控制器来限制集群的使用方式。

如需使用政策控制器,请在限制条件模板中声明一组限制条件。在集群中部署限制条件模板后,您可以创建由限制条件模板定义的各个限制条件 CRD

下图显示了政策控制器如何使用 OPA 限制条件框架来定义和强制执行政策。

OPA 限制条件框架接收请求并强制执行适用于其他资源访问权限的政策。

上图显示了以下信息:

  1. 根据限制条件模板创建限制条件。
  2. 通过应用限制条件对集群启用政策。
  3. 一个请求传入并触发准入审核,结果是允许或拒绝决定。
  4. 持续审核会根据政策评估集群上的所有活跃对象。

您可以使用政策控制器强制执行自定义政策,例如强制应用标签。借助政策控制器,您能够应用大多数可使用 PodSecurityPolicies 应用的限制条件。但由于以下原因,它们通常需要较低的操作开销:

  • 政策控制器包含一个默认模板库,其中包含限制条件模板,这意味着您不需要像使用 PodSecurityPolicies 那样为常见场景编写自己的政策。
  • 您无需像使用 PodSecurityPolicies 时那样管理角色绑定。
  • 政策控制器支持试运行模式,以便您可以在应用限制条件之前对其进行验证。
  • 您可以将政策的范围限定为命名空间,这样,您就可以逐渐地增加限制性较强的政策。这与 Canary 版本策略类似,您可以借此控制可能会产生意外影响的政策的发布风险。例如,您的发布可能会发现您不允许某个 Pod 访问某个卷,但该 Pod 应该可以访问该卷。
  • 政策控制器提供了一种应用政策的方式,无论它们是自定义限制条件还是在 Gatekeeper 代码库中定义的 PodSecurityPolicies 限制条件。

如需详细了解如何使用政策控制器强制执行您制定的政策,请参阅 Anthos Config Management 政策控制器

Anthos Service Mesh

管理服务之间的安全通信

Anthos Service Mesh 可帮助您监控和管理基于 Istio 的服务网格。服务网格是一个基础架构层,可以实现托管、可观察且安全的跨服务通信。

Anthos Service Mesh 从以下方面帮助您简化对跨服务安全通信的管理:

  • 对流量的身份验证和加密进行管理(采用相互传输层通信 (mTLS) 的集群内的支持协议)。Anthos Service Mesh 管理 Anthos 工作负载的 mTLS 密钥和证书的预配和轮替,且不会中断通信。定期轮替 mTLS 密钥是安全性方面的一种最佳做法,有助于在发生攻击时降低泄露风险。
  • 允许您根据服务身份而不是对等方的 IP 地址来配置网络安全政策。Anthos Service Mesh 用于配置身份感知访问权限控制(防火墙)政策,以便您创建与工作负载的网络位置无关的政策。这简化了设置服务间通信的过程。
  • 允许您配置政策以许可来自特定客户端的访问。
  • 使用 Identity-Aware Proxy 或自定义政策引擎管理用户身份验证。通过验证用户身份和请求上下文来确定是否应允许用户访问,这有助于控制对 Anthos GKE 集群上已部署的应用的访问权限。

除了管理服务之间的安全通信之外,Anthos Service Mesh 还对每个可配置时间段内成功的访问记录一次,从而有助于减少访问日志中的干扰。系统会始终记录安全政策拒绝的请求或导致错误的请求。访问日志和指标可在 Google Cloud 的运维套件中找到。

如需详细了解 Anthos Service Mesh 的安全功能,请参阅 Anthos Service Mesh 安全概览

综合应用

前面讨论的控制措施同时适用于 Anthos GKE 和 GKE On-Prem。

若要综合应用控制措施,请确定本指南中探讨的控制措施的范围以及需要配置这些控制措施的阶段,如下面的步骤所述:

  1. 按照适用的集群安全强化指南(GKEGKE On-Prem)中的指导信息创建自己的集群。创建集群时,请务必遵循安全强化指南并使用 --enable-network-policy 标志。网络政策是必需的,此步骤让您可以在稍后实施防火墙规则,以限制在集群中的 Pod 之间传输的流量。
  2. 定义 Pod 所需的命名空间和标签。这提供了一个名称范围,以便您使用政策和 Kubernetes 服务帐号。
  3. 使用 Anthos Config Management 安装政策控制器
  4. 使用 Anthos Config Management 应用您的网络政策
  5. 收集您要使用的预构建政策控制器限制条件模板,并通过定义限制条件将其映射到您的资源。
  6. 使用 Anthos Config Management 应用限制条件模板和限制条件。

您可以应用其他重点关注应用层级(第 7 层)的控制措施来进一步通过 Anthos Service Mesh 强制执行政策,如下所示:

  • 如果您在创建集群时未启用 Istio 政策强制执行,请立即启用。
  • 定义要在应用层级强制执行的政策。这些政策以 YAML 的形式表示。
  • 使用 Anthos Config Management 应用您的政策。