最近准备花一周的时间准备CKS考试,在准备考试中发现有一个题目关于Dockerfile和yaml文件安全检测的题目。
专栏其他文章:
- [CKS] Create/Read/Mount a Secret in K8S-CSDN博客
- [CKS] Audit Log Policy-CSDN博客
-[CKS] 利用falco进行容器日志捕捉和安全监控-CSDN博客- [CKS] K8S NetworkPolicy Set Up-CSDN博客
- [CKS] K8S AppArmor Set Up-CSDN博客
- [CKS] 利用Trivy对image进行扫描-CSDN博客
- [CKS] kube-batch修复不安全项-CSDN博客
- [CKS] K8S ServiceAccount Set Up-CSDN博客
- [CKS] K8S Admission Set Up-CSDN博客
- [CKS] K8S Dockerfile和yaml文件安全检测-CSDN博客
- CKS真题
- CKA真题
Question 1
- Check the Dockerfile located at /home/cloud_user/Dockerfile on the CLI server. This Dockerfile is based upon alpine:3.13.5.
- Correct the two security issues within the file.
Note: If you need an OS user, you can use the user nobody with id 65534.
这个题目是要求你检查Dockerfile,并修改在Dockerfile中存在的两个问题,这个题目中给我们了一个提示就是,如果没有指定系统用户,就使用id为65534的nobody用户。
Practice
首先,我们查看这个Dockerfile文件可以发现内容如下:
FROM alpine:latestUSER root
COPY sunnydale.sh .USER root
CMD ["./sunnydale.sh"]
我们从Dockerfile中可以看到问题如下:
- 基础镜像在题目中指明的是
alpine:3.13.5
,而在提供的Dockerfile中为alpine:latest
- 没有指定系统用户,就使用id为65534的nobody用户,而在Dockerfile中使用的root user,这也是不安全的,所以需要对Dockerfile修改成以下内容:
Question 2
- Check the YAML file located at /home/cloud_user/scooby-gang-deploy.yml on the CLI server.
- Correct the two security issues within the file.
这个题目是要求我们对yaml文件进行分析,纠正其中存在的两个系统问题。
Practice
首先,我们查看这个yaml文件可以发现内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:name: scooby-gangnamespace: sunnydale
spec:replicas: 3selector:matchLabels:app: scoobytemplate:metadata:labels:app: scoobyspec:containers:- name: scoobygangimage: scoobygang:1.4.0securityContext:privileged: truerunAsUser: 0
我们从yaml中可以看到问题如下:
privileged: true
这将会使得容器在运行时,运行用户拥有container的全部权限,这样是不安全的runAsUser: 0
同样的,这将会使得容器运行过程中会拥有root权限
所以我们需要对yaml文件作出以下更改
- 设置
privileged: false
- 设置
runAsUser: 65534
Question 3
Check all of the Pods in the sunnydale namespace and determine whether their containers are static and immutable.
Note: In this scenario, static/immutable means that:
- The container does not have access to any elevated privileges.
- The container process cannot write to the container file system.
- Delete any Pods in the namespace that are not static and immutable.
这个题目比较麻烦就是需要一个个的对每个pod进行分析,分析出哪些pod是not static 和 immutable的,这里也对not static 和 immutable做出了定义:
- 容器无法访问特权权限。
- 容器进程无法写入容器文件系统。
Practice
首先我们需要查看在sunnydale下的所有的pod,然后一一对pod的yaml文件进行检查。
- 查看sunnydale下面的所有的pod
kubectl get pods -n sunnydale
在这里包含了以下的pod: buffy
,cordelia
,willow
,xander
- 然后依次对每个pod的yaml文件进行检查,检查内容如下
allowPrivilegeEscalation
设置必须是false
,或者没有进行设置runAsUser
不能设置为0
,最好是65534
,或者没有进行设置readOnlyRootFilesystem
需要设置为true
,或者没有进行设置
通过kubectl get pod -n sunnydale xxx -o yaml
进行检查即可,对于不满足上述条件的pod,使用kubectl delete pod -n sunnydale
进行删除即可