Kubernetes 安全专家(CKS)必过心得

这篇具有很好参考价值的文章主要介绍了Kubernetes 安全专家(CKS)必过心得。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

注意:参加 CKS 考试需要经过认证的 Kubernetes 管理员(CKA) 认证。如果您没有它或它已过期(持续三年),您可以查看CKA考试的相关文章并完成考试。

kubernetes 认证安全专家,K8s安全,kubernetes,docker,容器,云原生,云计算

什么是认证 Kubernetes 安全专家考试?

根据 CNFC 的说法,获得CKS证书证明考生具备在构建、部署和运行期间确保基于容器的应用程序和Kubernetes平台安全的技能、知识和能力。CKS考试内容和CKA类似,大部分也都是实操。

CKS考试大纲

CKS 考试旨在测试您在不同安全方面的技能。下表显示了 CKS 认证的不同领域及其权重。

考试内容 占比
集群设置 10%
集群强化 15%
系统强化 15%
最小化微服务漏洞 20%
供应链安全 20%
监控、日志记录和运行时安全 20%

!重要提示:考试中允许使用以下网站,建议多熟悉以下网站的内容结构,方便遇到问题快速查询

https://github.com/aquasecurity/trivy
https://docs.sysdig.com/
https://falco.org/docs/
https://gitlab.com/apparmor/apparmor/-/wikis/Documentation

准备工作:

首先需要一个k8s集群来学习和尝试CKS认证中涉及的所有概念。你可以根据下方建议选取合适方式部署、管理一个K8S环境:

  1. MiniKube;
  2. 使用 kubeadm 部署集群;
  3. 使用免费 Google Cloud Credits 的GKE 集群;
  4. 腾讯云容器服务TKE;
  5. 阿里云容器服务服务ACK;
  6. Azure 上使用免费云积分的 AKS 服务;
  7. AWS 上使用免费套餐计划的 EKS 服务。

别名:

设置别名非常有利于节省我们执行操作的时间并且减少产生错误的可能

vi ~/.bashrc
---
alias k='kubectl'
alias kg='k get'
alias kd='k describe'
alias kl='k logs'
alias kc='k create'
source <(kubectl completion bash)
source <(kubectl completion bash | sed 's/kubectl/k/g' )
complete -F __start_kubectl k
---

资源快捷访问方式:

资源 简称
pods po
replicasets rs
deployments deploy
services svc
namespace ns
networkpolicy netpol
persistentstorage pv
persistentstorageclaim pvc
serviceaccounts sa

练习

从现有 pod 生成 yaml 规范

kg po  <pod-name> -o wide

# 生成 YAML Pod 规范
kg po <pod-name> -o yaml
kg po <pod-name> -o yaml > <pod-name>.yaml

# 获取不包含集群特定信息的 pod 的 YAML 规范
kg po my-pod -o yaml --export > <pod-name>.yaml

查看日志并打印

kubectl logs deploy/<podname>
kubectl logs deployment/<podname>
#Follow logs
kubectl logs deploy/<podname> --tail 1 --follow

创建 ConfigMap 和 Secret

kc cm my-cm --from-literal=APP_ENV=dev
kc cm my-cm --from-file=test.txt
kc cm my-cm --from-env-file=config.env

kc secret generic my-secret --from-literal=APP_SECRET=sdcdcsdcsdcsdc
kc secret generic my-secret --from-file=secret.txt
kc secret generic my-secret --from-env-file=secret.env

调试工具 busybox

可以使用busybox容器在集群内部进行各种系统调试,比如:端口验证、http、htpts验证、网络可达验证、域名解析等

# 运行busybox 容器
k run busybox --image=busybox:1.28 --rm --restart=Never -it sh

# 进入busybox容器
k exec -it busybox -c busybox2 -- /bin/sh

# 添加资源限制
kubectl run nginx --image=nginx --restart=Never --requests='cpu=100m,memory=256Mi' --limits='cpu=200m,memory=512Mi'

# 给pod创建并绑定service
kubectl run nginx --image=nginx --restart=Never --port=80 --expose

# 端口检验
nc -z -v -w 2 <service-name> <port-name>
# NSLookup
nslookup <service-name>
nslookup 10-32-0-10.default.pod

网络策略:

在 Kubernetes 集群中,默认情况下所有 pod 都可以与所有 pod 通信,这在某些实现中可能是一个安全问题。为了解决这个问题,Kubernetes 引入了网络策略来允许或拒绝基于 pod 标签的流量,这些标签是 pod 规范的一部分。

下面的示例拒绝在所有命名空间中运行的 Pod 的 Ingress 和 Egress 流量。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: example
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Egress
  - Ingress

下面的示例拒绝在所有命名空间中运行的 Pod 的 Ingress 和 Egress 流量。但它允许访问在端口 3306 上运行的 MySQL 解析服务。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Egress
  - Ingress
  egress:
  - to:
    ports:
      - port: 3306
        protocol: TCP
      - port: 3306
        protocol: UDP

拒绝除了 192.168.10.10以外的所有Ingress流量

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name:cloud-metadata-deny
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Egress
  egress:
  - to:
      - ipBlock: 
          cidr: 0.0.0.0/0
          except:
          - 192.168.10.10/32

允许Egress访问 192.168.10.10服务器的数据

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cloud-metadata-accessor
  namespace: default
spec:
  podSelector:
    matchLabels:
      role: metadata-accessor
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 192.168.10.10/32

使用 Kubesec 进行静态分析

kubesec scan pod.yaml

# Using online kubesec API
curl -sSX POST --data-binary @pod.yaml https://v2.kubesec.io/scan

# Running the API locally
kubesec http 8080 &

kubesec scan pod.yaml -o pod_report.json -o json

使用trivy进行漏洞扫描

trivy image nginx:1.18.0
trivy image --severity CRITICAL nginx:1.18.0
trivy image --severity CRITICAL, HIGH nginx:1.18.0
trivy image --ignore-unfixed nginx:1.18.0

# Scanning image tarball
docker save nginx:1.18.0 > nginx.tar
trivy image --input archive.tar

# Scan and output results to file
trivy image --output python_alpine.txt python:3.10.0a4-alpine
trivy image --severity HIGH --output /root/python.txt python:3.10.0a4-alpine

# Scan image tarball
trivy image --input alpine.tar --format json --output /root/alpine.json

删除不需要的服务

列出服务:
systemctl list-units --type service

停止服务:
systemctl stop nginx

禁用服务:
systemctl disable nginx

删除服务
apt remove nginx

绑定运行时类:

Kubernetes 在新版本中引入了 RuntimeClass 功能,v1.12用于选择容器运行时配置。容器运行时配置用于运行 pod 的底层容器。

大多数 Kubernetes 集群将dockershim用作运行容器的 Runtime 类,但您可以使用不同的容器 Runtime。

在dockershimKubernetes 版本中已弃用v1.20,并将在v1.24.

创建运行时类:

apiversion: node.k8s.io/v1beta1
kind: RuntimeClass
metadata:
  name: gvisor
handler: runsc

给pod绑定运行时类

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: nginx
  name: nginx
spec:
  runtimeClassName: gvisor
  containers:
  - name: nginx
    image: nginx 

RBAC 使用:

基于角色的访问控制 (RBAC) 命令提供了一种基于单个用户或服务帐户的角色来调节对 Kubernetes 资源的访问的方法。

创建角色:
kubectl create role developer --resource=pods --verb=create,list,get,update,delete --namespace=development

角色绑定:
kubectl create rolebinding developer-role-binding --role=developer --user=zhangsan --namespace=development

验证:
kubectl auth can-i update pods --namespace=development --as=zhangsan 

创建集群角色:
kubectl create clusterrole pvviewer-role --resource=persistentvolumes --verb=list

clusterrole和 serviceaccount绑定
kubectl create clusterrolebinding pvviewer-role-binding --clusterrole=pvviewer-role --serviceaccount=default:pvviewer

k8s集群维护:

使用kubectl drain命令从给定节点中删除所有正在运行的工作负载(pod)。

使用kubectl cordon命令来封锁节点以将其标记为可调度。

使用kubectl uncordon命令将节点设置为可调度,这意味着控制器管理器可以将新 pod 调度到给定节点。

排空所有 pod 的节点:
kubectl drain node-1

排空节点并忽略守护程序集:
kubectl drain node01 --ignore-daemonsets

将一个节点标记为不可调度,这样就不能在这个节点上调度新的 Pod
kubectl cordon node-1

标记节点可调度
kubectl uncordon node-1

CKS考试技巧

Kuberneteskubectl get命令为用户提供了一个输出标志-o或--output,它帮助我们以 JSON、yaml、wide 或 custom-columns 的形式格式化输出。

CKS 考试真题解析

如何保护和强化容器镜像

在设计容器映像以运行您的代码时,请特别注意保护和强化措施,以防止黑客攻击和特权升级攻击。在构建容器镜像时请记住以下几点:

  • 使用特定的包版本,例如alpine:3.13.
  • 不要以 root 身份运行 - 使用USER <username>来阻止 root 访问。
  • securityContext在使用中使文件系统只读readOnlyRootFilesystem: true
  • 使用删除 shell 访问RUN rm -rf /bin/*

如何最小化操作系统占用空间

容器层:

说明RUN、COPY和ADD创建容器层。其他指令创建临时中间图像并且不增加构建的大小。创建图层的说明会增加结果图像的大小。

典型的 Dockerfile 如下所示。RUN它使用指令添加单层。

FROM ubuntu

RUN apt-get update && apt-get install -y golang-go

CMD ["sh"]

多阶段构建

多阶段构建利用FROMDockerfile 中的多个语句。该FROM指令标志着构建的一个新阶段。它结合了多个FROM语句,允许利用以前的构建,以便有选择地将二进制文件复制到新的构建阶段,省略不必要的二进制文件。生成的 Docker 映像的大小要小得多,攻击面也大大减少。

FROM ubuntu:20.04 AS build
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y golang-go
COPY app.go .
RUN CGO_ENABLED=0 go build app.go

FROM alpine:3.13
RUN chmod a-w /etc
RUN addgroup -S appgroup && adduser -S appuser -G appgroup -h /home/appuser
RUN rm -rf /bin/*
COPY --from=build /app /home/appuser/
USER appuser
CMD ["/home/appuser/app"]

总结:

勤加练习是通过CKS考试的关键,本文只列举了部分实操内容,更多考试内容以及详细信息可以前往CNCF官网或Linux foundation查看,最后祝各位考试顺利通过!

关于HummerRisk

HummerRisk 是开源的云原生安全平台,以非侵入的方式对云原生环境进行全面安全检测。

kubernetes 认证安全专家,K8s安全,kubernetes,docker,容器,云原生,云计算

针对于K8s的安全,我们提供多方面的检测能力,可以帮助用户快速发现K8s集群中的各种安全问题。

访问项目地址了解试用:​ ​GitHub - HummerRisk/HummerRisk: HummerRisk 是云原生安全检测平台,提供三个方面的能力:混合云安全合规,K8S容器云安全和软件安全文章来源地址https://www.toymoban.com/news/detail-816778.html

到了这里,关于Kubernetes 安全专家(CKS)必过心得的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kubernetes客户端认证(二)—— 基于ServiceAccount的JWTToken认证

    在 Kubernetes 官方手册中给出了 “用户” 的概念,Kubernetes 集群中存在的用户包括 “普通用户” 与 “ServiceAccount”, 但是 Kubernetes 没有普通用户的管理方式,通常只是将使用集群根证书签署的有效证书的用户都被视为合法用户。 那么对于使得 Kubernetes 集群有一个真正的用户

    2023年04月11日
    浏览(100)
  • 【Kubernetes运维篇】RBAC认证授权详解(一)

    1、什么是RBAC授权? RBAC是一种 基于角色访问控制方式 ,它将权限和角色相关联,用户加入到角色中,就会拥有角色中的权限,RBAC的核心思想是,将权限赋予给角色,角色中加入多个用户,加入进来的用户会具有角色的权限,如果修改权限也是针对角色进行操作,而不是针对

    2024年02月16日
    浏览(42)
  • 【Kubernetes运维篇】RBAC认证授权详解(二)

    官方中文参考连接: 在K8S中,所有资源对象都是通过API进行操作,他们保存在ETCD里面,而对ETCD的操作,我们需要通过访问kube-apiserver来实现, ServiceAccount其实就是apiserver的认证过程,而授权的机制是通过RBAC,基于角色的访问控制实现。 RBAC中有四个资源对象,分别是Role、

    2024年02月16日
    浏览(53)
  • 全球首个云渗透测试认证专家课程发布!腾讯安全领衔编制

    2月20日,国际云安全联盟CSA发布了“云渗透测试认证专家CCPTP”课程体系,这是 全球首个云渗透测试能力培养课程及人才认证项目,有效地弥补了云渗透测试认知的差距和技能人才培养的空白 。腾讯安全在该项目中担任核心课程编撰单位。 CSA是全球中立权威的非营利产业组

    2024年02月04日
    浏览(40)
  • CSA GCR大会正式发布全球首个云渗透测试认证专家课程,腾讯安全获评“特别贡献单位”

    4月13日,第六届云安全联盟大中华区大会(CSA GCR Congress)在上海举办,大会由联合国数字安全联盟、上海市经济和信息化委员会、上海市委网络安全和信息化委员会办公室、上海市普陀区人民政府指导,云安全联盟大中华区主办。 会上,CSA GCR正式发布了全球首个云渗透测试

    2024年02月15日
    浏览(41)
  • 【DevOps基础篇之k8s】如何通过Kubernetes CKA认证考试

    推荐超级课程: Docker快速入门到精通 Kubernetes入门到大师通关课 这些是我在准备CK

    2024年03月15日
    浏览(52)
  • Kubernetes实战(十三)-使用kube-bench检测Kubernetes集群安全

    在当今云原生应用的开发中,Kubernetes已经成为标准,然而,随着其使用的普及,也带来了安全问题的挑战。本文将介绍如何使用kube-bench工具来评估和增强Kubernetes集群的安全性。 CIS(Center for Internet Security)是一家致力于网络安全的非营利组织。它提供一系列针对各种操作系

    2024年02月04日
    浏览(48)
  • Kubernetes的安全与权限管理

    Kubernetes(K8s)是一个开源的容器编排系统,用于自动化地部署、扩展和管理容器化的应用程序。随着Kubernetes的普及,安全性和权限管理变得越来越重要。本文将深入探讨Kubernetes的安全与权限管理,涵盖核心概念、算法原理、最佳实践、实际应用场景和工具推荐。 2.1 Kubernetes的

    2024年02月19日
    浏览(34)
  • Kubernetes安全扫描之kubescape

    Kubescape 是第一个用于测试 Kubernetes 是否按照 NSA 和 CISA 的 Kubernetes 强化指南中定义的安全部署的工具 使用 Kubescape 测试集群或扫描单个 YAML 文件并将其集成到您的流程中。 功能:提供多云 K8s 集群检测,包括风险分析、安全性兼容、 RBAC 可视化工具和图像漏洞扫描。 集群扫描

    2024年04月12日
    浏览(25)
  • 【Kubernetes 系列】一文学会Kubernetes Service安全的暴露应用_apiversion apps v1

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新大数据全套学习资料》,

    2024年04月28日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包