CKS真题 -- TLS通信增强
任务通过TLS加强kube-apiserver安全配置,要求1、kube-apiserver除了VersionTLS13及以上的版本可以使用,其他版本都不允许使用。2、密码套件(Cipher suite)为TLS_AES_128_GCM_SHA256
通过TLS加强ETCD安全配置,要求1、密码套件(Cipher suite)为TLS_AES_128_GCM_SHA256
做题
备份相关配置文件
123mkdir -p /opt/backup/14cp -f /etc/kubernetes/manifests/kube-apiserver.yaml /opt/backup/14cp -f /etc/kubernetes/manifests/etcd.yaml /opt/backup/14
修改配置文件
1234567# kube-apiserver.yamlspec: containers: - command: - kube-apiserver - --tls-min-version=VersionTLS13 #任务1 - --tls-cipher-suite ...
CKS真题 -- Container安全上下文
任务按照如下要求修改sec-ns命名空间里的Deployment secdep1、用ID为30000的用户启动容器(设置用户1D为:30000)2、不允许进程获得超出其父进程的特权(禁止allowPrivilegeEscalation)3、以只读方式加载容器的根文件系统(对根文件的只读权限)
解题
修改deployment secdep,添加配置kubectl edit deploy secdep -n sec-ns
12345678910111213spec: securityContext: #增加这两行完成任务1 runAsUser: 30000 ... containers: securityContext: #增加这三行完成任务2,3 allowPrivilegeEscalation: false readOnlyRootFilesystem: true ... containers: ...
CKS真题 -- Sysdig & Falco
任务使用运行时检测工具来检测 Pod tomcat123 单个容器中频发生成和执行的异常进程。
有两种工具可供使用:
sysdig
falco注: 这些工具只预装在 cluster 的工作节点node02,不在 master 节点。
使用工具至少分析 30 秒,使用过滤器检查生成和执行的进程,将事件写到 /opt/KSR00101/incidents/summary 文 件中,其中包含检测的事件, 格式如下: [timestamp],[uid],[processName] 保持工具的原始时间戳格式不变。注:确保事件文件存储在集群的工作节点上。
做题
找到containerd的sock
12crictl info | grep sock"containerdEndpoint": "/run/containerd/containerd.sock",
找到目标container
1crictl ps|grep tomcat123
通过sysdig扫描容器并输出
1234sysdig -l | grep ...
CKS真题 -- AppArmor应⽤程序⾏为限制
任务在 cluster 的工作节点上,实施位于 /etc/apparmor.d/nginx_apparmor 的现有 APPArmor配置文件。编辑位于 /home/candidate/KSSH00401/nginx-deploy.yaml 的现有清单文件以应用AppArmor 配置文件。 最后,应用清单文件并创建其中指定的 Pod 。
做题
在集群所有节点上加载apparmor策略,并检查
12apparmor_parser /etc/apparmor.d/nginx_apparmorapparmor_status|grep nginx-profile
回到主节点,编辑清单文件,添加配置vim /home/candidate/KSSH00401/nginx-deploy.yaml
12345678910111213141516apiVersion: v1kind: Podmetadata: name: nginx-deploy annotations: # 从官 ...
CKS真题 -- Trivy 扫描镜像安全漏洞
任务使用 Trivy 开源容器扫描器检测 namespace kamino 中 具有严重漏洞的镜像 的 Pod。查找具有 High 或 Critical 严重性漏洞的镜像,并删除使用这些镜像的 Pod 。注意:Trivy 仅安装在 cluster 的 master 节点上, 在工作节点上不可使用。 你必须切换到 cluster 的 master 节点才能使用 Trivy
解题
登录到相应的master节点,查看kamino namespace下的pod
12ssh xxx-masterkubectl get pod -n kamino -oyaml|grep "image:"
使用Trivy工具挨个扫描,观察是否有HIGH或者CRITICAL(过程有点久,可以在扫描的时候新开一个terminal做其他题目,扫描完毕之后再看)
1trivy image -s "HIGH,CRITICAL" xxx|grep -i "Total"
删除有HIGH或者CRITICAL漏洞的pod
1kubectl delete pod xxx ...
CKS真题 -- 网络策略NetworkPolicy
任务创建一个名为 pod-restriction 的 NetworkPolicy 来限制对在 namespace dev-team 中运行的 Pod products-service 的访问。 只允许以下 Pod 连接到 Pod products-service
namespace qaqa 中的 Pod
位于任何 namespace,带有标签 environment: testing 的 Pod 注意:确保应用 NetworkPolicy。你可以在 /cks/net/po.yaml 找到一个模板清单文件。
做题
检查相关namespace的标签, 没有就打一个
123456# 查标签kubectl get ns products-service --show-labelskubectl get ns qaqa --show-labels# 打标签kubectl label ns xxx name=xxx
编辑网络策略的yaml文件vim cks-09.yaml
123456789101112131415161718192021apiVersion ...
CKS真题 -- 沙箱运行容器gVisor
任务使用名为runsc的现有运行时处理程序,创建一个名为untrusted的RuntimeClass。更新namespace server中的所有Pod以在gVisor上运行。您可以在/cks/gVisor/rc.yaml中找到一个模版清单。
解题
创建名为untrusted的RuntimeClass vim cks-08.yaml
12345 apiVersion: node.k8s.io/v1kind: RuntimeClassmetadata: name: untrustedhandler: runsc
kubectl apply -f cks-08.yaml
更新namespace server下的所有pod,使其在gVisor下运行
123kubectl get pods -n serverkubectl edit pod xxx# 在spec下添加runtimeClassName: untrusted, 此runtimeClassName与container同级
参考
https://kubernetes.io/zh-cn/docs/c ...
CKS真题 -- Dockerfile检测
任务分析和编辑给定的Dockerfile /cks/docker/Dockerfile(基于ubuntu:16.04 镜像), 并修复在文件中拥有的突出的安全/最佳实践问题的两个指令。分析和编辑给定的清单文件 /cks/docker/deployment.yaml , 并修复在文件中拥有突出的安全/最佳实践问题的两个字段。注意:请勿添加或删除配置设置;只需修改现有的配置设置让以上两个配置设置都不再有安全/最佳实践问题。注意:如果您需要非特权用户来执行任何项目,请使用用户ID 65535 的用户 nobody 。只修改即可,不需要创建。
解题
修改Dockerfile
12345#修改基础镜像为题目要求的 ubuntu:16.04FROM ubuntu:16.04#仅将CMD上面的USER root修改为USER nobody,不要改其他的USER root。USER nobody
修改Deployment文件vim /cks/docker/deployment.ya ...
CKS真题 -- 创建secret
任务在namespace istio-system中获取名为db1-test的现有secret的内容
将username字段存储在名为/cks/sec/user.txt的文件中,并将password字段存储在名为/cks/sec/pass.txt的文件中。注意:你必须创建以上两个文件,他们还不存在。
注意:不要在以下步骤中使用/修改先前创建的文件,如果需要,可以创建新的临时文件。
在istio-system namespace中创建一个名为db2-test的新secret,内容如下:username:production-instancepassword KvLftKgs4aVH
最后,创建一个新的Pod,它可以通过卷访问secret db2-test:Pod名称secret-podNamespace istio-system容器名dev-container镜像 nginx卷名secret-volume挂载路径/etc/secret
做题
获取db1-test的内容
123456789101112 ...
CKS真题 -- 日志审计Audit
任务在cluster中启用审计日志。为此,请启用日志后端,并确保:
日志存储在 /var/log/kubernetes/audit-logs.txt日志文件能保留 10 天最多保留 2 个旧审计日志文件/etc/kubernetes/logpolicy/sample-policy.yaml 提供了基本策略。它仅指定不记录的内容。
注意:基本策略位于 cluster 的 master 节点上。
编辑和扩展基本策略以记录:
RequestResponse 级别的 persistentvolumes 更改namespace front-apps 中 configmaps 更改的请求体Metadata 级别的所有 namespace 中的 ConfigMap 和 Secret 的更改此外,添加一个全方位的规则以在 Metadata 级别记录所有其他请求。
注意:不要忘记应用修改后的策略。
做题
备份并修改配置1234ssh master01sudo -icp /etc/kubernetes/logpolicy/sa ...