本页面介绍了 Google Distributed Cloud for VMware(纯软件)中包含的安全功能(包括其基础架构的每一层),以及如何配置这些安全功能来满足您的需求。
概览
Google Distributed Cloud for VMware(纯软件)提供多种功能来帮助保护工作负载,包括容器映像的内容、容器运行时、集群网络以及对集群 API 服务器的访问权限。
最好采用分层方法来保护集群和工作负载。您可以针对提供给用户及工作负载的访问权限级别应用最小权限原则。您可能需要权衡取舍,以提供适当级别的灵活性和安全性。
身份验证和授权
您使用 OpenID Connect (OIDC) 或 Kubernetes 服务账号令牌(通过 Cloud 控制台)向您的集群进行身份验证。
如需在集群级层或 Kubernetes 命名空间内配置对 Kubernetes 资源的更精细的访问权限,您可以使用 Kubernetes 基于角色的访问控制 (RBAC)。通过 RBAC,您可以创建详细的政策来定义允许用户和服务账号访问哪些操作和资源。您可以使用 RBAC 来控制所提供的任何已验证身份的访问权限。
为了进一步简化和精简 Kubernetes Engine 的身份验证和授权策略,Google Distributed Cloud 停用了旧版基于属性的访问权限控制 (ABAC)。
控制平面安全
控制平面组件包括 Kubernetes API 服务器、调度程序、控制器和 Kubernetes 配置持久保存所在的 etcd 数据库。在 GKE 中,Kubernetes 控制平面组件由 Google 管理和维护,而本地管理员在 Google Distributed Cloud 中管理控制平面组件。
在 Google Distributed Cloud 中,控制平面组件在公司网络中运行。您可以使用现有的公司网络政策和防火墙来保护 Kubernetes API 服务器。您还可以为 API 服务器分配内部 IP 地址,并限制对该地址的访问。
Google Distributed Cloud 中的所有通信都通过 TLS 通道进行,这些通道受三个证书授权机构 (CA) 的约束:etcd、cluster 和 org:
- etcd CA 可保护从 API 服务器到 etcd 副本之间的通信,以及 etcd 副本之间的流量。此 CA 是自签名的。
- 集群 CA 可保护 API 服务器与所有内部 Kubernete API 客户端(kubelet、控制器、调度程序)之间的通信。此 CA 是自签名的。
- 组织 CA 是一个外部 CA,用于向外部用户提供 Kubernetes API。您负责管理此 CA。
对于管理员控制平面,密钥存储在控制平面节点上。对于用户集群,密钥以 Kubernetes Secret 形式存储在管理员控制平面中。API 服务器使用由组织 CA 签名的用户提供的证书进行配置。API 服务器使用服务器名称指示 (SNI) 来确定是使用由集群 CA 签名的密钥,还是使用由组织 CA 签名的密钥。
集群身份验证由证书和服务账号不记名令牌处理。作为管理员,您可以使用 OIDC 或管理证书向控制平面进行身份验证;其中管理证书用于初始角色绑定创建或用于紧急用途。
证书轮替的处理方式如下:
- 对于 API 服务器、控制层面和节点,证书会在每次升级时创建或轮替。
- CA 很少进行轮替或按需轮替。
节点安全
Google Distributed Cloud 将您的工作负载部署在 VMware 实例中,这些实例以节点形式关联到集群。以下各个部分介绍如何使用可供您使用的节点级安全功能。
Ubuntu
Google Distributed Cloud 使用优化版 Ubuntu 作为运行 Kubernetes 控制平面和节点的操作系统。Ubuntu 包含一组丰富的现代安全功能,Google Distributed Cloud 为集群实现了几项安全增强功能,包括:
- 映像已预先配置,以符合 PCI DSS、NIST Baseline High 和 DoD Cloud Computing SRG Impact Level 2 标准。
- 优化的软件包集。
- Google Cloud 定制的 Linux 内核。
- 可选的自动操作系统安全更新。
- 受限用户账号和停用 root 登录。
其他适用于 Ubuntu 的安全指南,例如:
节点升级
您应该定期升级节点。容器运行时、Kubernetes 本身或节点操作系统中的安全问题可能会不时地要求您升级节点,而且更加迫切。升级集群时,每个节点的软件会升级到最新版本。
保护工作负载
Kubernetes 允许用户快速预配、扩缩和更新基于容器的工作负载。本部分介绍可供管理员和用户使用的一些方法,这些方法旨在限制运行中的容器影响集群中的其他容器、其运行的主机以及在其项目中启用的 Google Cloud 服务的能力。
限制 Pod 容器进程权限
限制容器化进程的权限对于集群的总体安全性十分重要。Kubernetes Engine 允许您通过安全上下文对 pod 和容器设置安全相关选项。通过这些设置,您可以更改进程的安全设置,例如:
- 以其身份运行的用户和组。
- 可用的 Linux 功能。
- 提升权限。
默认的节点操作系统 Ubuntu 会将默认的 Docker AppArmor 安全政策应用于 Kubernetes 启动的所有容器。您可以在 GitHub 上查看配置文件的模板。除此之外,配置文件会拒绝向容器提供以下能力:
- 直接写入进程 ID 目录 (/proc/) 中的文件。
- 写入 /proc/ 之外的文件。
- 写入 /proc/sys 中的文件(/proc/sys/kernel/shm* 除外)。
- 装载文件系统。
审核日志记录
通过 Kubernetes 审核日志记录,管理员可以针对 Google Distributed Cloud 环境中发生的事件进行保留、查询、处理和提醒。管理员可以使用日志中记录的信息执行取证分析、实时提醒,或者对一组 Kubernetes Engine 集群的使用方式和用户进行编目。
默认情况下,Google Distributed Cloud 会记录管理员活动。您还可以选择记录数据访问事件,具体取决于您有兴趣检查的操作类型。
Connect Agent 仅与在本地运行的本地 API 服务器通信,并且每个集群都应有自己的一组审核日志。用户通过 Connect 在界面中执行的所有操作均由该集群记录。
加密
如果您的集群和工作负载通过 Cloud VPN 安全地连接到 Google Cloud 服务,您可以使用 Cloud Key Management Service (Cloud KMS) 进行密钥管理。Cloud KMS 是一项云托管式密钥管理服务,可用于管理服务的加密密钥。您可以生成、使用、轮替和销毁 AES256、RSA 2048、RSA 3072、RSA 4096、EC P256 和 EC P384 加密密钥。Cloud KMS 与 Identity and Access Management (IAM) 和 Cloud Audit Logging 集成,因而您可以管理各个密钥的权限,并监控它们的使用方式。使用 Cloud KMS 保护您需要存储的 Secret 和其他敏感数据。否则,您可以选择使用下述替代方法之一:
- Kubernetes Secret
- Hashicorp Vault
- Thales Luna 网络 HSM
- Google Cloud 硬件安全模块 (HSM)
Kubernetes Secret
Kubernetes Secret 资源会存储集群中的密码、OAuth 令牌和 SSH 密钥等敏感数据。将敏感数据存储在 Secret 中比存储在明文 ConfigMaps 或 pod 规范中更加安全。借助 Secret,您可以控制敏感数据的使用方式,并降低将该数据暴露给未经授权用户的风险。