云原生(CloudNative)最初用来描述云上应用的典型架构与特性,随着容器、kubernetes、Serverless、FaaS技术的演进, 云原生计算基金会(CNCF)将云原生的概念更广泛地定义为“让应用更有弹性、容错性、观测性的基础技术,让应用更容易部署、管理的基础软件,让应用更容易编写、编排的运行框架等”。 相较于传统IT架构,云原生的最大价值和愿景,就是认为未来的软件会从诞生起就生长在云上,并且遵循一种新的软件开发、发布和运维模式,从而使得软件能够最大化地发挥云的能力。
云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。 云原生的代表技术包括容器(Containers)、微服务(Microservices)、DevOps、服务网格(Service Mesh)、无服务(Serverless)、声明式API(Declarative APIs)、不可变基础设施(Immutable Infrastructure)等。 这些技术能够构建容错性好、易于管理和便于观察的松耦合系统,结合可靠的自动化手段,轻松地对系统作出频繁和可预测的重大变更。
面对快速开发和部署的迫切需要,基于边界的传统安全保障显得力不从心。为适应云原生应用的规模扩展以及快速变化,要求使用面向安全的架构设计, 云原生安全构建在云原生应用开发、发布、部署、运行的整个生命周期中,涉及云(Cloud)、集群(Cluster)、容器(Container)和代码(Code)等不同层级的安全性建设。
PKI技术及数字证书应用能够提供身份证明、数字签名、数据加解密等安全能力,为云原生应用实现机密性、完整性、真实性、抗抵赖性等安全特性。
容器编排系统组件通信安全、服务网格数据传输加密、微服务架构下的认证管理等都需要涉及证书应用。 以Kubernetes为例,Kubernetes(也被称为K8s)是Google于2014年6月开源出来的容器编排调度引擎,用于管理云平台中多个主机上的容器化的应用, 让部署容器化的应用简单并且高效。Kubernetes中包含多个以独立进程形式运行的组件, 这些组件之间通过 HTTP/gRPC 相互通信,在进行网络通信时,通信双方需要验证对方的身份,以避免恶意第三方伪造身份窃取信息或者对系统进行攻击。 因此,Kubernetes 需要 PKI 证书才能通过 TLS 进行身份验证。
Kubernetes 控制平面中包含 etcd,kube-api-server,kube-scheduler,kube-controller-manager 等组件,这些组件会相互进行远程调用,Kubernetes 需要以下 PKI 证书进行操作:
上述证书应用,建议采用统一的CA 来颁发 kubernetes 集群中的所有证书,采用一个集群根 CA 比采用多个CA的方式更容易管理。 安全证书颁发机构(CA)可以是默认的编排系统CA,也可以是外部 CA。
对容器镜像进行加密,从而保证镜像内容的机密性。加密后,以确保它们从构建到运行前都是密文态。当加密镜像分发后受到破解,制品库中存储的镜像仍然是加密的,这有助于保护商业机密或其他保密材料等。 当镜像加密、密钥管理与授权、认证发布等相结合时,可以要求容器镜像只能在特定平台上运行。容器镜像授权也适合保证合规性,例如地理限制、出口管控和数字版权媒体管理。
利用密钥管理系统(KMS)是保护编排系统数据秘密的一种安全方式。在容器编排或部署时,可以使用外部密钥管理系统来管理密钥,也可以直接使用编排系统本地的密钥。 外部的 KMS 将对数据加密密钥(DEK)进行加密,然后使用 DEK 对保存在 etcd 中的数据进行加密。使用外部密钥管理系统可以降低使用明文的风险,并降低密钥管理的复杂性。
存储系统可以通过数据加密的方法来确保数据的保密性。在许多系统中,传输中的数据是用 TLS 保护。 静止状态下的数据通常使用标准的对称加密算法(如 AES )进行保护,并可部署特定的加密模式,如用于块设备的 XTS 。加密功能往往依赖于密钥管理系统(KMS)的集成。