控制层面安全

本文档介绍如何保障 Google Kubernetes Engine (GKE) 集群的控制层面组件的安全。

共同责任模式下,Google 会为您管理 GKE 控制层面组件。控制平面包括 Kubernetes API 服务器、etcd 和其他控制器。您可能能够根据自己的要求配置某些选项,但控制平面的安全由 Google 负责。您负责节点、容器和 Pod 的安全。

强化型操作系统

GKE 控制平面组件在容器优化型操作系统中运行,该操作系统是由 Google 设计的安全强化型操作系统。如需详细了解 Container-Optimized OS 的内置安全功能,请参阅 Container-Optimized OS 安全概览

架构和隔离

在 GKE 集群中,控制层面组件在 Google 管理的项目中的由 Google 拥有的 Compute Engine 实例上运行。每个实例仅为一个客户的集群运行这些组件。

如需详细了解集群组件如何对彼此进行身份验证,请参阅集群信任

控制对项目的层面访问权限

使用 GKE 时,您的项目将包含一个 Google 管理的服务帐号(命名为 Kubernetes Engine Service Agent)以及一个使用如下格式的电子邮件地址:

service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com

在此电子邮件地址中,PROJECT_NUMBER 是您的项目编号

GKE 控制平面使用此服务帐号代表您操作节点、磁盘和负载均衡器资源等集群资源。服务帐号会自动获得项目的 Kubernetes Engine Service Agent 角色 (roles/container.serviceAgent)。

集群的管理员权限

Google 站点可靠性工程师的 SSH 会话通过 Google 的内部审计基础设施审计记录,可用于取证和安全响应。如需了解详情,请参阅 Google 安全性白皮书中的管理员权限

etcd 安全性

在 Google Cloud 中,默认情况下,客户内容在文件系统层加密。因此,托管 GKE 集群的 etcd 存储的磁盘在文件系统层加密。如需了解详情,请参阅静态加密

etcd 监听两个 TCP 端口。端口 2379 用于 etcd 客户端,如 Kubernetes API 服务器。端口 2379 绑定到本地环回网络接口,因此只能从运行 Kubernetes API 服务器的虚拟机访问。端口 2380 用于服务器到服务器的通信。端口 2380 上的流量通过双向 TLS 加密,也就是说,两端的服务器必须向彼此证明身份。在区域性集群中,用于建立仲裁的 etcd 服务器之间的通信通过双向 TLS 加密。

证书授权机构和集群信任

每个集群都有自己的根证书颁发机构 (CA)。 Google 内部服务管理此类根证书颁发机构的根密钥。每个集群还有自己的 etcd 根证书颁发机构。etcd 根证书颁发结构的根密钥会分发给运行 Kubernetes API 服务器的虚拟机的元数据。 节点与 Kubernetes API 服务器之间的通信受 TLS 保护。如需了解详情,请参阅集群信任

漏洞和补丁程序管理

GKE 遵循 Google 标准来测试、鉴定和逐步推出对控制平面的更改。这样可以最大限度地降低控制平面组件不可用的风险。GKE 遵循服务等级协议,该协议定义了可用性的诸多方面。

GKE 控制平面组件由 Google 站点可靠性工程师团队管理,并保持用最新的安全补丁实时更新。这包括主机操作系统、Kubernetes 组件以及在控制平面虚拟机上运行的容器的补丁。

GKE 会及时应用新的内核、操作系统和 Kubernetes 级别的修复来控制平面虚拟机,在其中包含对已知漏洞的修复时,您可以在 GKE 安全公告中找到更多信息。GKE 使用 Container Analysis 扫描所有 Kubernetes 系统和 GKE 特定容器的漏洞,并实时修补容器,从而使整个 Kubernetes 生态系统受益。

Google 工程师参与查找、修复和披露 Kubernetes 安全错误。Google 还通过 Google 漏洞奖励计划向外部安全研究人员支付报酬,以寻找安全漏洞。在某些情况下,例如 2017 年 10 月的 dnsmasq 漏洞,GKE 成功在漏洞公开之前修补了所有正在运行的集群。

后续内容

本主题前面讨论的安全功能由 Google 管理。 本节和下一节讨论您可以监控和配置的安全功能。

自 GKE 1.8.3 版起创建的集群默认启用审核日志记录。该功能可提供对 Kubernetes API 服务器进行调用的详细记录(可在 Google Cloud 的运维套件中获取)。您可以在 Google Cloud Console 中的“日志”页面查看日志条目。您还可以使用 BigQuery 查看和分析这些日志。

您可以配置的内容

默认情况下,Kubernetes API 服务器使用公共 IP 地址。要保护 Kubernetes API 服务器,您可以使用授权网络专用集群,以允许您将专用 IP 地址分配给 Kubernetes API 服务器并停用对公共 IP 地址的访问权限。

您可以通过将 IAM 用作身份提供方在 GKE 中处理集群身份验证。为了增强身份验证的安全性,对于使用 GKE 1.12 及更高版本创建的集群,默认情况下系统会停用基本身份验证和客户端证书颁发。

您可以通过定期执行凭据轮替来增强控制层面的安全。启动凭据轮替后,TLS 证书和集群证书颁发机构将自动轮替。 GKE 还会轮替 Kubernetes API 服务器的 IP 地址。如需了解详情,请参阅基于角色的访问权限控制 (RBAC)凭据轮替

后续步骤