本页面介绍 Google Kubernetes Engine (GKE) 如何保护集群控制平面组件。了解 GKE 中内置的安全功能,包括安全强化型操作系统、强大的架构和隔离、安全的控制层面访问、etcd 安全性、证书授权机构和集群信任、漏洞和补丁管理。
本页面适用于具有以下需求的安全专家:希望了解 Google 如何管理 GKE 控制平面组件以及采取的安全措施,以便有效评估风险并确保 GKE 部署的安全性。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE Enterprise 用户角色和任务。
在共同责任模式下,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 管理。 本节和下一节讨论您可以监控和配置的安全功能。
- 审核日志:审核日志记录默认处于启用状态。这提供了对 Kubernetes API 服务器进行调用的详细记录(可在 Google Cloud Observability 中获取)。您可以在 Google Cloud 控制台的 Logs Explorer 中查看日志条目。您还可以使用 BigQuery 查看和分析这些日志。
控制平面虚拟机映像完整性:GKE 会向 Cloud Logging 添加节点虚拟机创建和启动事件的详细日志。此外,我们还在 GitHub 上发布了与控制平面和工作器节点机器映像相对应的 SLSA VSA。您可以验证虚拟机是否使用具有对应 VSA 的操作系统映像,并验证每个控制平面虚拟机的启动完整性。
如需执行虚拟机完整性验证,请参阅验证 GKE 控制平面虚拟机完整性。
您可以配置的内容
虽然 GKE 会为您管理大部分控制平面,但您可以控制以下各项:
对控制平面的访问:控制平面有两种用于访问集群的端点:
- 基于 DNS 的端点
- 基于 IP 的端点
默认情况下,Kubernetes API 服务器使用外部 IP 地址。您可以启用基于 DNS 的端点来访问控制平面,从而保护 Kubernetes API 服务器。您可以使用 VPC Service Controls 控制哪些人可以访问 DNS 端点,借助 VPC Service Controls,您可以为项目中的所有 Google API 定义单一安全参数。如果使用基于 IP 的端点进行控制平面访问,我们建议您使用授权网络并在控制平面外部端点上停用访问功能。如需详细了解网络隔离,请参阅关于自定义网络隔离。
身份验证:您可以通过将 IAM 用作身份提供方在 GKE 中处理集群身份验证。为了增强身份验证的安全性,默认情况下系统会停用基本身份验证和客户端证书颁发。
凭据轮替:通过执行凭据轮替,定期轮替集群证书授权机构 (CA) 和 TLS 证书。GKE 还会在此过程中轮替 Kubernetes API 服务器的 IP 地址。如需了解详情,请参阅凭据轮替。
此外,如果组织对控制平面有严格的合规性或政策要求,GKE control plane authority 是一组功能,可让您增强对控制平面特定方面的可见性和控制能力,包括:
- 使用 Cloud KMS 和 CA Service 运行您自己的 CA 和密钥以颁发身份。
- 使用您在 Cloud KMS 中自己的密钥加密 etcd 和控制平面启动磁盘。
如需详细了解您使用这些功能的原因以及所有可用功能,请参阅关于 GKE control plane authority。