自Ku节b点er而n上et:es安全全攻略 PrismaCloud功能 目录 3简介 4第1章:Kubernetes安全基础知识 4Kubernetes是一个多层次的“野兽” 5Kubernetes原生安全保护 6第2章:保护Kubernetes基础设施 7IDE 7持续集成 7配置管理 8第3章:保护要在Kubernetes上运行的容器镜像 8开发人员桌面 8持续集成 9容器注册表 10第4章:Kubernetes运行时安全 10可视性 10运行时防护 10网络保护 12节点OS监控 12Kubernetes安全审核和合规性 13结论 简介 关于Kubernetes®安全的大多数讨论都集中于保护集群的挑战性。众所周知,Kubernetes仅提供少数原生安全功能,这使得保护Kubernetes环境的每一层变得极为困难。 的确,Kubernetes仅提供了少数内置安全工具,要确保Kubernetes的安全,就需要解决多层基础设施中的多种潜在漏洞。但这不意味着,您需要将Kubernetes安全视为毫无希望的挑战。 相反,Kubernetes是一个庞大的平台,它可以集成许多其他工具,这为解决安全问题提供了机遇:集成使得建立一套自动化、系统化的流程更加容易,这些流程可 以将安全纳入Kubernetes构建和部署流程的内核之中。其结果是安全策略紧密集成,可以缓解堆栈各层和各级别的威胁。 这本电子书介绍了如何设计安全策略来加强(而不是妨碍)其他基于Kubernetes的流程。其中还介绍了自节点向上的各种安全挑战,提出了具体的解决方案来解决这些挑战,重点放在自动化、可扩展的方法上,无论您的集群有多大,托管在何种类型的基础设施上(本地、公有云或托管服务),这些方法都可以保护基于Kubernetes的工作负载的安全。 第1章:Kubernetes安全基础知识 主节点 容器运行时 容器运行时 在深入研究Kubernetes中特定类型的安全挑战或解决策略之前,让我们先简要地介绍一下Kubernetes安全必要的高级注意事项。 Kubernetes是一个多层次的“野兽” 首先,一定要理解Kubernetes是一个复杂的平台,它由6个以上不同的组件组成。Kubernetes拥有一个API服务器,负责支持集群不同部分之间的通信,还有一个管理工作负载分布方式的调度器和一个管理Kubernetes本身状态的控制器。其集群中还包含一个在每个节点或服务器上运行的代理;以及一个容纳集群配置数据的键值存储。 工作节点 用户责任 CSP责任 阿里云 图1:托管Kubernetes服务架构 这些只是Kubernetes本身的主要组件。功能性集群还依赖许多其他活动部件,包括用于执行容器的容器运行时,某种类型的永久存储解决方案,日志记录工具以及支撑每个节点的操作系统等等。 Kubernetes集群的各个不同的部分都有自身的潜在漏洞。容器运行时可能会遇到编码缺陷,从而导致容器内的权限提升。如果KubernetesAPI服务器的配置不正确,可能会给攻击者机会访问原本应该锁定的资源。容 Kubernetes原生安全保护 尽管Kubernetes提供了某些内置的安全功能,但是没有外部工具的帮助,它很难保护自身安全,这一事实使Kubernetes的安全问题进一步复杂化。 Kubernetes允许管理员定义基于角色的访问控制(RBAC)策略,以防止未经授权访问集群资源。管理员还可以配置pod安全策略和网络策略,以防止对pod及其连接网络进行某些类型的恶意使用。管理员可以施加资源配 Kubernetes允许管理员定义基于角色的访问控制(RBAC)策略,以防止未经授权访问集群资源。 这些原生Kubernetes安全功能填补了Kubernetes集群的某些安全漏洞。但是,在解决许多其他类型的安全风险方面,它们几乎没有任何作用,例如影响节点操作系统或容器运行时的攻击。 器化应用或Kubernetes节点上运行的操作系统中都 可能存在漏洞,从而导致权限提升攻击或敏感数据被访 额,缓解攻击集群某一部分的攻击者所造成的破坏。有 了资源配额,攻击者就无法通过从其余集群剥夺足够的 为了建立Kubernetes 数的内置 整体安全策略,您需要考虑比这少 问。这只是几个例子。 简言之,保护Kubernetes需要保护很多不同的组件,每个组件有着各自的安全需求。没有任何单一工具和流程可以轻松确保Kubernetes集群的各方面都免受所有类型的攻击。您需要多方面的防护。 资源来执行拒绝服务攻击(当然,前提是假设漏洞没有升级到起始的集群部分以外)。 Kubernetes安全功能更多的事项。可以适当地 使用这些内置安全功能来减少安全风险,但就其本身而言,这些功能远远无法提供保护集群所需的所有功能。 在后续章节中,我们将探讨构建全面的Kubernetes安全策略所需的条件,这些安全策略超出了平台所限制的内置安全功能。 第2章:保护Kubernetes基础设施 在基于Kubernetes的环境中首先需要保护的层是构建层:即一组开发人员用于构建在Kubernetes环境中运行的代码的工具。 这些工具并不是Kubernetes本身的一部分。但是,由于Kubernetes集群的安全性仅仅取决于其上运行的代码,因此在代码部署到集群之前采取步骤确保其安全是保证Kubernetes各方面安全的先决条件。 本章节介绍了如何确保Kubernetes构建的安全,重点介绍了将安全集成到自动构建管道的三个主要交汇点:集成开发环境(IDE)、配置管理和持续集成。 1 开发人员环境中的 开发人员 2 在推送到注册表之前, 1 CI/CD管道 3 在部署到运行时之前, 4 在部署到运行时中的 2 3 4 IaC模板配置扫描 对CI/CD的Docker 漏洞扫描 扫描IaC模板配置 Kubernetes集群之前, YAML文件进行配置扫描 镜像中的OS包进行 对Kubernetes应用清单 图2:构建管道中的安全 IDE IDE是开发人员通常用于为应用编写源代码的工具。作为启动应用部署管道的工具,IDE应该作为漏洞扫描的起点。大多数IDE可以与各种第三方源代码漏洞扫描程序集成以检测应用代码中潜在的安全缺陷。 持续集成 持续集成(CI)工具可以托管源代码,并将其转换为可以在Kubernetes中部署的二进制代码。使用这些工具代表进入了另一个阶段:扫描代码是否存在漏洞。与IDE一样,CI服务器兼容各种漏洞扫描程序。 配置管理 如今,大多数Kubernetes应用的构建和部署管道依赖于自动化的、基于策略的配置管理,这些配置管理通常以基础架构即代码(IaC)和YAML文件的形式存在。借助这些方法,Kubernetes管理员可以通过编写代码来定义集群(及托管集群的基础设施)的配置方式,然后自动应用代码。 除了简化Kubernetes环境的配置流程外,配置管理工具还提供了在应用配置文件之前扫描安全问题的机会。Prisma™Cloud等工具可以通过将您的IaC和YAML文件与已知的安全文件进行比较,来自动执行此操作。PrismaCloud可以直接与您的源代码管理系统 (例如GitHub®或GitLab®)集成,从而轻松构建完全自动化的流程,来保护与现有构建管道配合使用的Kubernetes配置文件。 图3:PrismaCloud中的Kubernetes策略 第3章:保护要在Kubernetes 上运行的容器镜像 大多数情况下,应用作为容器镜像部署在Kubernetes上。(也可以在Kubernetes上管理其他类型的部署对象,包括虚拟机,但是这并不常见。)可以检查容器镜像,了解容器代码本身以及镜像所基于的上游依赖项中是否存在漏洞。 开发人员桌面 扫描容器镜像中是否存在安全问题有两种方式。第一种是手动扫描各个镜像,可以使用twistcli等工具。如果您需要对某个镜像执行一次性的安全检查,可以使用这种方式。 当使用自动化工作流程构建容器镜像时,团队可能需要集成漏洞和合规性扫描。 持续集成 在Jenkins®、CircleCI®或Azure®DevOps等平台上使用自动化工作流程构建容器镜像时,开发人员和DevOps团队可能需要将漏洞和合规性扫描集成到这些工作流程中。PrismaCloud等安全平台可以扫描这些容器镜像,根据DockerCIS基准等框架来确定问题,并根据企业和应用程序的要求实施标准。 容器注册表 但是,对于自动化、可扩展的容器镜像检查,您需要定期扫描容器注册表内的所有镜像。注册表是用于存储容器镜像的存储库。通过将漏洞扫描程序集成到注册表中,您可以全面了解注册表中存储的容器镜像内存在哪些威胁。 扫描容器注册表的一大挑战是可能存在多种不同的容器注册表。Kubernetes的部分发行版(例如RedHat®OpenShift®和公有云中托管的Kubernetes服务)本身附有内置的注册表。而其他发行版则允许管理员选择各种第三方注册表。 由于注册表选项和配置的多样性,因此,选择一个能与任何类型注册表集成的容器镜像扫描工具就十分重要。PrismaCloud就可以提供这种灵活性,无论Kubernetes集群的配置方式如何,管理员都可以使用一站式镜像扫描解决方案。 图4:PrismaCloud中的容器镜像注册表扫描结果 第4章:Kubernetes运行时安全 将应用部署到集群中后,保护应用的安全就成了Kubernetes安全最为复杂的方面。这是因为存在多种类型的漏洞,这些漏洞可能在应用运行时对其产生影响,这些漏洞也有可能通过应用本身或通过Kubernetes被攻击者利用。 除了使用上述章节提供的指导在部署前确保应用安全之外,您还可以采取多种步骤,在应用部署后减少应用的安全风险。 可视性 首先,保持Kubernetes服务和资源持续可见是最重要的。攻击行为可能以各种各样的方式发生。您收集的有关应用环境的数据越多,检测到异常的可能性就越大,这些异常会提醒您可能遭受了攻击。 安全团队可能不知道所有集群的运行位置,因此对整体安全状况的认识可能缺乏一致性。借助PrismaCloud,安全团队可以使用公有云服务提供商(CSP)的API数据以及配置和合规性状态来持续了解集群的位置。 运行时防护 从Kubernetes收集环境数据相对比较简单。但是使用数据监控安全问题的一个关键的挑战是,Kubernetes集群会随着节点的脱机或关闭而不断变化,应用的规模也会根据需求的转变而扩大或缩小,诸如此类。因此,无法为“正常”活动建立一个基准并根据这个基准来衡量异常活动。 所以要使用PrismaCloud这样的Kubernetes运行时防护解决方案,它可以自动了解Kubernetes中部署的应用在不同条件下有着怎样的行为。借助这种洞察力,用户可以有效地区分应用行为的正常变化和反映安全问题的应用行为变化。 网络保护 基于网络的安全威胁可能以两种不同的方式影响Kubernetes:一种是通过将应用连接到互联网的面向公众的网络;另一种是通过Kubernetes容器用于彼此交换数据的内部网络。 因此检测这两种类型的网络上是否存在恶意活动的迹象对于确保Kubernetes网络资源安全非常重要。由于其余Kubernetes环境等网络活动会不断波动 (容器的IP地址也是一样),因此您需要能够了解Kubernetes集群中网络流量的细微差别的容器感知型网络扫描程序。还需要使用防火墙工具来定义规则,以防御基于网络的威胁,该工具在发现违反规则的情况后会提醒您或自动阻截威胁。PrismaCloud的容器感知型网络扫描和第4层防火墙功能可以完成所有这些工作。 图5:PrismaCloud中的网络拓扑和容器安全性可视化 节点OS监控 如果攻击者控制了Kubernetes集群中某个节点上运行的操作系统,就可以造成各