强化集群的安全性

本文档介绍如何强化 Anthos clusters on Bare Metal 集群的安全性。

使用 SELinux 保护您的容器

您可以启用 Red Hat Enterprise Linux (RHEL) 和 CentOS 支持的 SELinux 来保护您的容器。如果您的宿主机正在运行 RHEL 或 CentOS,并且您想要为集群启用 SELinux,则您必须在所有宿主机上启用 SELinux。如需了解详情,请参阅使用 SELinux 保护容器

不要以 root 用户身份运行容器

默认情况下,容器中的进程以 root 身份执行。这会带来潜在的安全问题,因为如果某个进程脱离容器,该进程将在主机上以 root 身份运行。因此,建议以非根用户身份运行所有工作负载。

以下部分介绍了以非根用户身份运行容器的两种方式。

方法 1:在 Dockerfile 中添加 USER 指令

此方法使用 Dockerfile 来确保容器不会以 root 用户身份运行。在 Dockerfile 中,您可以指定容器中的进程应以哪个用户的身份运行。Dockerfile 的以下代码段展示了如何执行此操作:

....

#Add a user with userid 8877 and name nonroot
RUN useradd −u 8877 nonroot

#Run Container as nonroot
USER nonroot
....

在本示例中,Linux 命令 useradd -u 会在容器内创建一个名为 nonroot 的用户。此用户的用户 ID (UID) 为 8877

Dockerfile 中的下一行运行 USER nonroot 命令。此命令指定从映像的时间点开始,命令以用户 nonroot 的身份运行。

向 UID 8877 授予权限,以便容器进程可以为 nonroot 正确执行。

方法 2:在 Kubernetes 清单文件中添加 securityContext 字段

此方法使用 Kubernetes 清单文件来确保容器不会以 root 用户身份运行。系统会为 Pod 指定安全设置,并且这些安全设置会反过来应用于 Pod 中的所有容器。

以下示例展示了给定 Pod 的清单文件摘录:


apiVersion: v1
kind: Pod
metadata:
  name: name-of-pod
spec:
  securityContext:
    runAsUser: 8877
    runAsGroup: 8877
....

runAsUser 字段指定对于 Pod 中的任何容器,所有进程均使用用户 ID 8877 运行。runAsGroup 字段指定这些进程具有主要组 ID (GID) 8877。请记得向 UID 8877 授予必要且足够的权限,以便容器进程能够正常执行。

这可确保容器内的进程以 UID 8877 的身份运行,该 UID 比根用户具有更少的特权。

Anthos clusters on Bare Metal 上的系统容器使用 2000-4999 范围内的 UID 和 GID。因此,在向用户工作负载分配权限时,请使用不在此预留范围内的 UID 和 GID。

限制工作负载自行修改的能力

某些 Kubernetes 工作负载(尤其是系统工作负载)有权执行自行修改。例如,某些工作负载会自行纵向自动扩缩。虽然很方便,但这会使得已入侵节点的攻击者能够在集群中进行进一步的操作。例如,攻击者可能会使节点上的工作负载自行更改,以将其作为在同一命名空间内具有更高权限的服务帐号运行。

理想情况下,不应最初便为工作负载授予自行修改的权限。如果确实需要自行修改,您可以通过应用 Gatekeeper 或 Policy Controller 限制条件来限制这些权限,例如您可以使用 Gatekeeper 开源库中提供的 NoUpdateServiceAccount,此外该库还提供了许多其他有用的安全政策。

部署政策时,通常需要允许管理集群生命周期的控制器绕过政策。这样控制器才能更改集群,例如应用集群升级。例如,如果您在 Anthos clusters on Bare Metal 上部署 NoUpdateServiceAccount 政策,必须在 Constraint 中设置以下参数:

parameters:
  allowedGroups:
  - system:masters
  allowedUsers: []

维护

监控安全公告并升级集群是集群启动并运行后要实施的重要安全措施。

监控安全公告

Anthos 安全团队会针对严重程度为“高”和“严重”的漏洞发布安全公告

这些公告遵循通用的 Google Cloud 漏洞编号方案,并且在链接到 Google Cloud 公告主页和 Anthos clusters on Bare Metal 版本说明。使用此 XML Feed 订阅 Anthos clusters on Bare Metal 和相关产品的安全公告:https://cloud.google.com/feeds/anthos-gke-security-bulletins.xml 订阅

如果需要客户操作才能解决这些严重程度为高和严重的漏洞,Google 会通过电子邮件与客户联系。此外,Google 可能还会通过支持渠道就支持合同事宜联系客户。

如需详细了解 Google 如何管理 GKE 和 Anthos 的安全漏洞和补丁程序,请参阅安全修补

升级集群

Kubernetes 经常引入新的安全功能并提供安全补丁程序。Anthos clusters on Bare Metal 版本整合了 Kubernetes 安全增强功能,可解决可能影响集群的安全漏洞。

您需要确保您的 Anthos 集群保持最新状态。对于每个版本,请查看版本说明。为了最大限度地降低 Anthos 集群的安全风险,请计划每月更新到新的补丁版本,每 3 个月更新到次要版本。

升级集群的许多优势之一是自动刷新集群的 kubeconfig 文件。kubeconfig 文件会向集群验证用户身份。使用 bmctl 创建集群时,kubeconfig 文件会添加到集群目录。默认名称和路径为 bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig。在升级集群时,集群的 kubeconfig 文件会自动续订。否则,kubeconfig 文件会在创建一年后过期。

如需了解如何升级集群,请参阅升级集群