开发者学堂课程【云原生实践公开课:监控和日志管理的最佳实践】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/698/detail/12277
监控和日志管理的最佳实践
内容介绍:
一、 安全挑战
二、 应用安全
三、 主机安全
四、 供应链安全
五、 总结
一. 安全挑战
1. 云原生下的安全挑战
- 新的攻击面
- 新的攻击手段
- 分钟级的生命周期
- 更高的部署密度
- 镜像中存在大量漏洞
- CVE频出
应用架构演进带来了安全防护和合规审计的挑战升级
2. 云原生安全原则
- 零信任安全模型下没有绝对的安全域
- 在暴露的服务前设置尽可能多的防护层,实现纵深防御
- 权限配置和凭证下发遵循权限
- 最小化原则最小化攻击面
二、应用安全
1. 应用安全攻击路径
- 攻击者恶意窃取kubeconfig或应用对应的serviceaccount,造成集群访问
凭证泄露
- 攻击者利用窃取的集群访问凭证对集群发起攻击
- 攻击者可能通过访问集群apiserver 获取secret 等敏感信息进一步越权攻击
2. 细粒度访问控制策略
- 在云资源控制平面,遵循权限最小化原则合理分配云账号的资源访问权限
- 在K8s集群数据平面,根据业务场景,通过Namespace 实现人员/应用/部门之
间的逻辑隔离
- 使用RBAC进行资源模型维度的细粒度访问控制
- 及时吊销或轮转可能泄露的访问凭证
3. 应用网络安全
- 控制容器入网流量:
- 限定容器允许监听的指定协议,端口和服务标签等
- 限定除LB和Ingress关联的服务外不允许外网IP访问
- 限定容器只允许其服务消费者访问
- 控制容器出网流量:
- 禁止不需要访问公网的Pods出网流量
代码示例:
kind: NetworkPolicy
apiversion : networking.k8s.io/v1
metadata :
namespace : my-app
name : deny-from-other-namespaces
spec:
podselector :
matchLabels:
ingress:
- from:
- podselector : { }
4. ServiceMesh
- 通过sidecar 代理服务之间的请求
- 服务之间保证mTLS传输加密
- 应用证书托管下发和自动更新
- 基于安全策略的服务间东西向网络访问控制
5. 应用隔离的纵深防御
(1) 3/4层网络隔离
(2)使用Namespace软隔离,基于RBAC实现细粒度访问控制
(3)优先使用内网集群并且设置节点和负载均衡的ACL
(4)基于服务网格实现7层网络的访问控制
6. 完备审计
- 基础设施日志∶云平台资源操作审计,云服务账号操作审计等;
- Kubernetes集群日志∶集群control-plane 组件日志,control-plane组件审计日
志 ( secrets审计,apiserver非法访问,exec进入容器等操作审计)
- 系统运维日志:主机层应用操作和运维审计
- 应用日志:容器内应用进程日志
7. 数据安全
- 全链路传输加密∶
- 系统组件,服务之间的全链路数据传输加密敏感数据落盘加密
- 维护资产清单:
- 应用资产在多云部署时建立不同的保护机制建立云上和on-perm资产中敏感信
息的防护机制
- 熟悉责任共担模型:
- 了解应用在云上的安全责任共担模型,选择适合应用场景的KMS或HSM服务
- 理解国密标准/FIPS140-2等合规标准在数据安全上的定义
- 密钥管理︰
- 密钥的保护和轮转
- DEK(数据加密密钥)和KEK(密钥加密密钥)隔离
三、主机安全
1.主机安全的攻击路径
- 主机安全的攻击路径
- 攻击者利用容器的内核特性进行逃逸攻击·对主机上其他容器应用发起攻击
- 对主机上的kubelet或etcd中的数据发起攻击
- 利用主机上的凭证发起集群维度的攻击
2. 应用镜像最小化
- 使用轻量化的基础镜像e.g. distroless镜像
- 不要构建过大或层数过多的镜像
- 删除基础镜像中的包管理或网络工具
- 删除文件属性修改工具( chmod , chown )
- 不要轻易部署公共仓库的镜像
- 不要使用root用户启动镜像
- 可以使用 Ephemeral 临时容器debug ( Alpha as of1.16 )
3. Pod安全参数
- Run as non-root
- Use read-only root filesystem
- Set no_new_privs
代码示例:
apiVersion: apps/v1kind:
Pod
metadata:
name: security-context-sample
spec:
securitycontext:
runAsuser: 1000
allowPrivilegeEscalation: false
readonlyRootFilesystem: true
capabilities:
drop:
- ALL
危险配置 |
风险原因 |
Pod挂载/etc , /root等敏感目录 |
攻击者可以修改host上的关键配置,安装恶意后门程序等 |
启动特权容器 |
特权容器具有host 上系统设备的交互权限,可以轻易获取对其他容器的访问权限 |
以root 用户启动容器 |
Runc容器和host共享主机内核,root权限可以轻易修改主机文件权限或执行恶意程序 |
共享主机网络 |
让侵入容器的攻击者轻易拥有主机的网络能力 |
允许调用setuid 提权 |
允许通过调用setuid切换用户从而进行提权攻击 |
4. 使用PSP(Pod Security Policy)
企业安全运维人员通过PSP策略配置可以约束应用容器运行时刻的安全行为
5. 节点权限最小化
- 清理节点上不必要的敏感信息·避免直接使用AK/SK
- 在多租场景下,遵循权限最小化原则收敛集群节点绑定的云资源权限
- 使用pod维度的细粒度云资源访问权限控制
6.安全容器
- 同一节点上的不同pod通过沙箱彼此隔离
- 沙箱容器在pod隔离的基础上实现了内核级别的隔离
- 多种实现方式:
- Kata containers , gVisor ,Firecracker
- 病毒和恶意程序
- 容器内部入侵行为
- 容器逃逸
- 高风险操作预警
四、供应链安全
- 供应链安全
- 建立供应链中云原生制品的安全扫描机制
- 对接不同的漏洞库,保证漏洞库的实时更新建立漏洞风险评分和对应的处理机
制
- 在应用构建和部署流程中识别并自动阻断风险漏洞
- 禁止部署和运行包含高危风险的镜像或其他制品
- 禁止上传包含指定漏洞的镜像或其他制品
- 提供定制化可配置的安全管理手段
- 提供前置安全策略定制和自动化的阻断能力
- 提供制品安全分发和存储的管理机制
- 提供链路的可追踪,可观测能力
1. 供应链流水线
首先,对于应用开发者而言,在完成应用的开发测试后,可以利用企业级镜像服务进行对应云原生制品智能化的构建,当完成镜像构建时,我们可以通过配置自动触发对镜像的安全扫描,在公链侧通过镜像安全扫描,提前暴露应用镜像中的安全风险。
同时,也可以对push到指定仓库的镜像进行自动化的签名,签名所用的密钥可以通过策略指定,使用云上存储的指定密钥。对于完成了安全扫描和加签的安全镜像,可以使用加速分发技术,推送到不同地域的镜像仓库中,并在最终在应用部署时刻,完成对镜像的验签。
2. 镜像签名
在整个方案和安全能力的实现上分为两阶段,分别为构建交付环节的安全流程以及
部署时刻的准入控制。
首先第一步,开发人在完成应用开发后,开发人要将指定的应用推送到指定的仓库实例中,对于配置好加签设置的仓库,会自动为系统配置好加签,而对于系统的安全管理员,首先需要在指定的应用部署的集群上安装验签组件,并进行验签策略的配置,配置会自动下发部署在指定的集群中。第二,当集群中的应用部署发起部署时,已经部署在集群中的验签组件,会基于Kubernetes提供的机制,根据绑定的验签策略,自动获取工样,并进行验签。对不符合策略签名条件的非法部署会进行自
动的阻断和审计。
3.巡检报告
巡检报告中主要展示最近执行的巡检扫描结果,主要包括以下几类信息:
- 扫描结果概览.包括总的检查条目数、检查各个资源项数目及百分比、整体的
健康度
- 各大类扫描结果统计.包括报告健康检查、镜像、网络、资源、安全等大类的
结果。
- 各个workload配置的详细扫描结果,包括资源类别、资源名称、命名空间、检
查类型、检查项、检查结果等内容。
五、 总结
- 尽早升级Kubernetes集群
- RBAC和基于namespace 的软隔离是基本且必要的安全措施,保证精细化授权
- 保证应用镜像最小化
- 在应用运行时刻遵循权限的最小化原则,尽可能收敛pod 内容器的系统权限
- 使用PSP(Pod Security Policies)对Pod的安全参数进行校验,同时加固Pod运行
时刻
- 全链路数据加密,使用KMS或HSM服务,及时吊销或轮转可能泄露的访问凭证
- 使用NetworkPolicy或 ServiceMesh 服务进行业务应用间东西向网络流量的访
问控
- Log everything,对接监控系统,实现容器应用维度的监控
- 构建安全的供应链流水线
- 关注应用部署后的运行时刻安全,在监控和告警外有处理安全事件的应急响应
预案