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 ...
CKS真题 -- RBAC Rolebinding
任务一个名为web-pod的现有Pod已在namespace db中运行。编辑绑定到Pod的ServiceAccount service-account-web的现有Role,仅允许只对services类型的资源执行get操作。在namespace db中创建一个名为role-2,并仅允许只对namespaces类型的资源执行delete操作的新Role。创建一个名为role-2-binding的新RoleBinding,将新创建的Role绑定到Pod的ServiceAccount。注意:请勿删除现有的RoleBinding。
解题
修改role-112kubectl get pod web-pod -n db -oyaml # 查看role和serviceaccountkubectl -n db edit role role-1
123456789101112131415apiVersion: rbac.authorization.k8s.io/v1kind: Rolemetadata: creationTimestamp: "2022-12-28T07:48:59Z& ...
CKS真题 -- 默认网络策略
任务为所有类型为Ingress-+Egress的流量在namespace testing中创建一个名为denypolicy的新默认拒绝NetworkPolicy。此新的NetworkPolicy必须拒绝namespace testing中的所有的Ingress+Egress流量。将新创建的默认拒绝NetworkPolicy应用与在namespace testing中运行的所有Pod。
你可以在/cks/net/p1.yaml找到一个模板清单文件。
做题1vim /cks/net/p1.yaml
12345678910apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata: name: denypolicy namespace: testingspec: podSelector: {} #拒绝所有pod policyTypes: - Ingress - Egress
1kubectl apply -f /c ...
CKS真题 -- Pod指定ServiceAccount
任务1.在现有namespace ga中创建一个名为backend-sa的新ServiceAccount,确保此ServiceAccount不自动挂载API凭据。2.使用/cks/sa/pod1.yaml中的清单文件来创建一个Pod。3.最后,清理namespace ga中任何未使用的ServiceAccount。
解题vim cks-02.yaml
123456apiVersion: v1kind: ServiceAccountmetadata: name: backend-sa namespace: qaautomountServiceAccountToken: false #添加这一行
vim /cks/sa/pod1.yaml
1234567891011apiVersion: v1kind: Podmetadata: name: backend namespace: qaspec: serviceAccountName: backend-sa #给pod配置servicea ...
CKS真题 -- kube-bench修复不安全项
任务通过配置修复所有问题并重新启动受影响的组件以确保新的设置生效。
修复针对 API 服务器发现的所有以下违规行为:1.2.7 Ensure that the –authorization-mode argument is not set to AlwaysAllow FAIL1.2.8 Ensure that the –authorization-mode argument includes Node FAIL1.2.9 Ensure that the –authorization-mode argument includes RBAC FAIL1.2.18 Ensure that the –insecure-bind-address argument is not set FAIL (1.25中这项题目没给出,但最好也检查一下,模拟环境里需要改)~~1.2.19 Ensure that the –insecure-port argument is set to 0 FAIL ~~(1.25中这项题目没给出,不需要再修改了)
修复针对kubelet发现的所有以下违规行为:Fix al ...
