安全性

本页面介绍了 GKE on AWS(包括其基础架构的每一层)包含的安全功能,还介绍了如何配置安全功能来满足您的需求。

概览

GKE on AWS 提供了多项功能来帮助保护工作负载,包括容器映像的内容、容器运行时、集群网络以及对集群 API 服务器的访问权限。

最好采用分层方法来保护集群和工作负载。您可以针对提供给用户及工作负载的访问权限级别应用最小权限原则。您可能需要权衡取舍,以提供适当级别的灵活性和安全性。

共担责任

使用 GKE on AWS 时,您同意为集群承担某些责任。如需了解详情,请参阅 GKE 集群共担责任

身份验证和授权

您可以使用以下方法之一向 GKE on AWS 用户集群 进行身份验证:

如需在集群级层或 Kubernetes 命名空间内配置对 Kubernetes 资源的更精细的访问权限,您可以使用 Kubernetes 基于角色的访问控制 (RBAC)。通过 RBAC,您可以制定详细的政策,以定义您允许用户及服务账号访问的操作和资源。您可以使用 RBAC 来控制所提供的任何已验证身份的访问权限。

为了进一步简化和精简 Kubernetes Engine 的身份验证和授权策略,GKE on AWS 停用了旧版基于特性的访问权限控制 (ABAC)

加密

默认情况下,GKE on AWS 会通过 AWS Key Management Service (KMS) 加密 etcd 中的静态数据、EBS 卷、Kubernetes Secret 和控制层面组件

如需对用户集群中的敏感数据进行加密,您可以使用以下任一方法:

Kubernetes Secret

Kubernetes Secret 资源会存储集群中的密码、OAuth 令牌和 SSH 密钥等敏感数据。将敏感数据存储在 Secret 中比存储在明文 ConfigMap 或 Pod 规范中更加安全。借助 Secret,您可以控制敏感数据的使用方式,并降低将该数据暴露给未经授权用户的风险。

Hashicorp Vault

GKE on AWS 可以使用 Hashicorp Vault 来保护用户集群上的 Secret。如需了解详情,请参阅在 GKE on AWS 上使用 HashiCorp Vault

控制平面安全

控制层面组件包括管理服务和用户集群的 Kubernetes API 服务器、调度器、控制器以及 etcd 数据库。在 GKE on AWS 中,由本地管理员管理控制平面组件。

在 GKE on AWS 中,控制层面组件在 AWS 上运行。您可以使用 AWS 安全组和网络 ACL 保护 GKE on AWS 的 API 服务器。

GKE on AWS 上的所有通信均通过传输层安全协议 (TLS) 通道进行,这些通道受以下证书授权机构 (CA) 约束:

  • etcd CA 可保护从 API 服务器到 etcd 副本之间的通信,以及 etcd 副本之间的流量。此 CA 是自签名的。
  • 用户集群 CA 可保护 API 服务器和所有内部 Kubernetes API 客户端(kubelet、控制器、调度器)之间的通信。此 CA 已通过 KMS 加密。
  • 管理服务 CA 使用 AWS KMS 加密。它是在您运行 anthos-gke init 并存储在 Terraform 工作区中时创建的。使用 terraform apply 创建管理服务时,CA 密钥会作为 AWS EC2 用户数据传递,并在集群启动时由 AWS KMS 解密。

对于管理服务,控制平面密钥存储在控制平面 [nodes]{:.external} 上。对于用户集群,密钥以 Kubernetes Secret 形式存储在管理服务的控制层面中。

GKE on AWS 中的集群身份验证由证书和服务账号不记名令牌处理。作为管理员,您可以使用管理服务的管理证书(用于初始角色绑定创建,或用于紧急用途)向控制层面进行身份验证。

证书轮替的处理方式如下:

  • 对于 API 服务器、控制平面和节点,GKE on AWS 会在每次升级时轮替 TLS 证书。
  • 您也可以手动轮替安全凭据

节点安全

AWS on GKE 将您的工作负载部署到 AWS EC2 实例的节点池中。以下几个部分说明如何在 GKE on AWS 中使用节点级层安全功能。

Ubuntu

GKE on AWS 使用优化版 Ubuntu 作为运行 Kubernetes 控制层面和节点的操作系统。Ubuntu 包含一组丰富的现代安全功能,GKE on AWS 为集群实现了几项安全增强功能,包括:

  • 优化的软件包集。
  • Google Cloud 定制的 Linux 内核
  • 受限用户账号和停用 root 登录。

其他适用于 Ubuntu 的安全指南,例如:

节点升级

您应该定期升级节点。容器运行时、Kubernetes 本身或节点操作系统中的安全问题可能会不时地要求您升级节点,而且更加迫切。升级用户集群时,每个节点的软件会升级到最新版本。 此外,升级节点可轮替加密凭据

保护工作负载

Kubernetes 允许用户快速预配、扩缩和更新基于容器的工作负载。本部分介绍的策略可用于限制在集群和 Google Cloud 服务上运行容器时产生的副作用。

限制 Pod 容器进程权限

限制容器化进程的权限对于集群的安全性至关重要。您可以使用 Pod 和容器的安全上下文设置安全相关选项。通过这些设置,您可以更改进程的安全设置,例如:

  • 运行该进程的用户和群组。
  • 可用的 Linux 功能。
  • 提升权限。

默认的 GKE on AWS 节点操作系统 Ubuntu 会针对 Kubernetes 启动的所有容器应用默认的 Docker AppArmor 安全政策。您可以在 GitHub 上查看配置文件的模板。除此之外,配置文件会拒绝向容器提供以下能力:

  • 直接写入至进程 ID 目录 (/proc/) 中的文件。
  • 写入至不在 /proc/ 中的文件。
  • 写入至 /proc/sys 中的文件(/proc/sys/kernel/shm* 除外)。
  • 装载文件系统。

后续步骤