本文档介绍 Google Kubernetes Engine (GKE) 如何保护集群控制平面组件。
在共同责任模式下,Google 会为您管理 GKE 控制平面组件。控制平面包括 Kubernetes API 服务器、etcd 存储和其他控制器。您可能能够根据自己的要求配置某些选项,但控制平面的安全由 Google 负责。您负责节点、容器和 Pod 的安全。
安全强化型操作系统
GKE 控制平面组件在 Container-Optimized OS 中运行,该操作系统是由 Google 设计的安全强化型操作系统。如需详细了解 Container-Optimized OS 的内置安全功能,请参阅 Container-Optimized OS 安全概览。
架构和隔离
在 GKE 集群中,控制平面组件在 Google 管理的项目中由 Google 拥有的 Compute Engine 实例上运行。每个实例仅为一个集群运行这些组件。
如需详细了解集群组件如何对彼此进行身份验证,请参阅集群信任。
控制平面对项目的访问权限
GKE 使用名为 Kubernetes Engine Service Agent 的服务代理,代表您启动集群资源(例如节点、磁盘和负载均衡器)。服务账号会自动获得项目的 Kubernetes Engine Service Agent 角色 (roles/container.serviceAgent
)。
Kubernetes Engine Service Agent 具有以下电子邮件地址:
service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com
在此电子邮件地址中,PROJECT_NUMBER
是您的项目编号。
集群的管理员权限
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 使用 Artifact Analysis 扫描所有 Kubernetes 系统和 GKE 特定容器的漏洞,并实时修补容器,从而使整个 Kubernetes 生态系统受益。
Google 工程师参与查找、修复和披露 Kubernetes 安全错误。Google 还通过 Google 漏洞奖励计划向外部安全研究人员支付报酬,以寻找安全漏洞。在某些情况下,例如 2017 年 10 月的 dnsmasq 漏洞,GKE 成功在漏洞公开之前修补了所有正在运行的集群。
您可以看到的内容
本主题前面讨论的安全功能由 Google 管理。 本节和下一节讨论您可以监控和配置的安全功能。
自 GKE 1.8.3 版起创建的集群默认启用审核日志记录。这提供了对 Kubernetes API 服务器进行调用的详细记录(可在 Google Cloud Observability 中获取)。您可以在 Google Cloud 控制台的 Logs Explorer 中查看日志条目。您还可以使用 BigQuery 查看和分析这些日志。
您可以配置的内容
默认情况下,Kubernetes API 服务器使用公共 IP 地址。要保护 Kubernetes API 服务器,您可以使用授权网络和专用集群,以允许您将专用 IP 地址分配给 Kubernetes API 服务器并停用对公共 IP 地址的访问权限。
您可以通过将 IAM 用作身份提供方在 GKE 中处理集群身份验证。为了增强身份验证的安全性,对于使用 GKE 1.12 及更高版本创建的集群,默认情况下系统会停用基本身份验证和客户端证书颁发。
您可以通过定期执行凭据变换来增强控制平面的安全性。启动凭据变换后,TLS 证书和集群证书授权机构将自动变换。GKE 还会轮替 Kubernetes API 服务器的 IP 地址。如需了解详情,请参阅基于角色的访问控制 (RBAC) 和凭据轮替。