Kubernetes Goat 入门指南:搭建并访问一个 “Vulnerable by Design“ 的 Kubernetes 安全练习场

发布时间:2026/9/17 21:44:17
Kubernetes Goat 入门指南:搭建并访问一个 “Vulnerable by Design“ 的 Kubernetes 安全练习场 Kubernetes Goat 入门指南搭建并访问一个 Vulnerable by Design 的 Kubernetes 安全练习场【免费下载链接】kubernetes-goatKubernetes Goat is a Vulnerable by Design cluster environment to learn and practice Kubernetes security using an interactive hands-on playground 项目地址: https://gitcode.com/GitHub_Trending/ku/kubernetes-goatKubernetes Goat 是一个刻意引入漏洞Vulnerable by Design的 Kubernetes 交互式安全学习环境它通过 22 个贴近真实攻击链的场景演示容器、Kubernetes 集群与云原生环境中的常见误配置与安全隐患。本文以官方文档首页guide/docs/index.md为骨架结合仓库中的 setup 脚本、access 脚本 和 场景清单文件 逐项展开读完并照做之后你将能够在隔离集群中一键部署整套靶场、通过端口转发从浏览器访问 Goat Home并理解每个脚本背后实际部署了哪些资源。什么是 Kubernetes Goat官方首页文档guide/docs/index.md对项目给出的定位是一个交互式的 Kubernetes 安全学习 playground其中包含intentionally vulnerable by design的场景用于演示 Kubernetes 集群、容器与云原生环境中的常见误配置misconfigurations、真实世界漏洞real-world vulnerabilities和安全问题security issues。文档同时说明了项目要解决的问题Kubernetes 安全的学习很难做到安全、可实操、高效三者兼顾。因此 Kubernetes Goat 不仅面向安全研究者也覆盖攻击者、防御者、开发者、DevOps 团队以及希望用这些场景演示产品/工具效果的安全厂商。其核心目标在文档中归纳为Quick Easy快速上手Great Documentation完善文档Knowledge Sharing知识分享Scenario-Based Approach基于场景的方法High-Quality Content高质量内容Interactive Learning交互式学习Real-world Examples真实世界示例Practical Hands-On实战演练Diverse Audiences多样化受众Awesome Community社区使用前的安全声明必读文档首页用两段加粗的免责声明划定了使用边界实际使用前后都应牢记禁止与生产环境混用Kubernetes Goat 中的应用、配置和漏洞是刻意创建的目的是攻击并获取你集群与工作负载的访问权限。绝对不要将它运行在生产环境或生产基础设施旁边官方强烈建议在安全、隔离的环境中运行。仅用于教育目的不要在任何未获得授权的系统上测试或复现这些攻击手法。项目不提供任何保证使用即代表你对所有后果负全责。这一声明也体现在部署脚本的默认行为上所有资源都部署在独立工作负载中部分位于独立命名空间清理脚本会成对删除这些资源方便用完即拆。快速开始在标准 Kubernetes 集群上搭建以下是最快的启动路径完整的多环境方案见 How to Run 文档。前置条件对目标 Kubernetes 集群拥有admincluster-admin权限已安装kubectl并加入 PATH可通过kubectl version验证已安装helm包管理器用于部署 metadata-db 场景可通过helm version验证。第一步克隆仓库并执行 setup 脚本git clone https://gitcode.com/GitHub_Trending/ku/kubernetes-goat.git cd kubernetes-goat bash setup-kubernetes-goat.sh第二步确认 Pod 全部 Runningkubectl get pods第三步端口转发并访问 Goat Homebash access-kubernetes-goat.sh然后浏览器访问http://127.0.0.1:1234即可进入 Kubernetes Goat 首页点击各场景卡片开始练习。源码解析setup 脚本实际部署了什么setup-kubernetes-goat.sh 是搭建流程的核心。从源码看它做了四件事1. 参数解析与环境自检脚本支持两个可选参数参数作用--insecure给 kubectl 追加--insecure-skip-tls-verify给 helm 追加--kube-insecure-skip-tls-verify用于跳过 API Server TLS 证书校验仅建议用于本地实验集群--kubeconfig指定 kubeconfig 文件路径会导出为环境变量KUBECONFIG解析完成后脚本先用kubectl version做一次连通性自检失败则直接退出并提示检查 kubectl 配置见 setup-kubernetes-goat.sh#L37-L45。2. 部署超级管理员RBAC 误配置insecure-rbac 场景kubectl $KUBECTL_INSECURE apply -f scenarios/insecure-rbac/setup.yaml这条命令部署的正是文档场景 16RBAC least privileges misconfiguration的基础设施。查看 scenarios/insecure-rbac/setup.yaml 可以看到其内容apiVersion: v1 kind: ServiceAccount metadata: name: superadmin namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: superadmin roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: superadmin namespace: kube-system也就是说它在kube-system中创建了一个superadminServiceAccount并通过ClusterRoleBinding直接绑定内置的cluster-admin角色——这是 Kubernetes RBAC 最典型的过度授权反模式也是后续多个攻击场景的起点。3. 用 Helm 部署 metadata-db 场景helm $HELM_INSECURE install metadata-db scenarios/metadata-db/Helm Chart 对应Attacking private registry / 内部 API相关场景中的 metadata 数据库服务Chart 内含 Deployment、Service 和 Ingress 模板。4. 批量 apply 各场景清单文件脚本随后依次 apply 一组场景清单对应各场景的漏洞应用清单文件对应场景scenarios/batch-check/job.yaml批处理任务一次性 JobrestartPolicy: Neverscenarios/build-code/deployment.yaml场景 1代码库中的敏感密钥appbuild-code监听 3000scenarios/cache-store/deployment.yaml缓存存储Redis 相关场景scenarios/health-check/deployment.yaml场景 2DINDdocker-in-docker利用scenarios/hunger-check/deployment.yaml场景 13Memory/CPU 资源 DoSscenarios/internal-proxy/deployment.yaml场景 3K8S 世界中的 SSRFscenarios/kubernetes-goat-home/deployment.yamlGoat Home 门户appkubernetes-goat-home监听 80scenarios/poor-registry/deployment.yaml场景 7攻击私有镜像仓库监听 5000scenarios/system-monitor/deployment.yaml场景 4容器逃逸到宿主机监听 8080scenarios/hidden-in-layers/deployment.yaml场景 15镜像分层中隐藏的秘密值得注意的是两点事实均来自源码结构脚本只部署核心场景子集。scenarios/ 目录中还有docker-bench-security/、kube-bench-security/、kyverno-namespace-exec-block/等清单这些属于按需启用的工具/防御类场景Docker CIS 基准、Kubernetes CIS 基准、Kyverno 策略不在 setup 脚本的默认部署列表内需按对应场景文档单独 apply。脚本中保留了大段被注释掉的Helm v2 / tiller初始化代码helm2 init、等待 tiller service 等见 setup-kubernetes-goat.sh#L47-L65对应已标记 Deprecated 的场景 9Helm v2 tiller 打穿集群这也是文档场景列表中对场景 9 标注[Deprecated]的原因。端口映射与 access 脚本的工作原理access-kubernetes-goat.sh 通过kubectl port-forward把 7 个 Pod 暴露到本地0.0.0.0的 1230–1236 端口。从源码看每个转发都包在一个轮询等待 Pod Running 且容器 ready的循环里每 10 秒重试一次因此脚本启动后不会立刻返回全部端口需等待所有 Pod 就绪。完整的端口映射关系如下本地端口Pod 标签 / 命名空间容器端口对应场景1230appbuild-codedefault3000场景 1代码库中的敏感密钥1231apphealth-checkdefault80场景 2DIND 利用1232appinternal-proxydefault3000场景 3SSRF1233appsystem-monitordefault8080场景 4容器逃逸1234appkubernetes-goat-homedefault80Goat Home 门户1235apppoor-registrydefault5000场景 7攻击私有镜像仓库1236apphunger-checkbig-monolith8080场景 13资源 DoS其中 1234 是文档强调的门户入口1236 是唯一的跨命名空间转发它显式指定了--namespace big-monolith与 scenarios/hunger-check/deployment.yaml 中创建的独立命名空间、secret-readerRole 和vaultapikey/webhookapikey两个 Secret 相吻合——这些正是DoS 资源 读取环境信息场景的素材。22 个场景一览官方首页列出的场景清单more than 20 scenarios实际 22 个覆盖了攻击、防御、最佳实践与工具四类内容。各场景文档均在guide/docs/scenarios/下可按需深入#场景文档1Sensitive keys in codebases代码库中的敏感密钥guide/docs/scenarios/scenario-1/index.md2DIND (docker-in-docker) exploitationguide/docs/scenarios/scenario-2/index.md3SSRF in the Kubernetes (K8S) worldguide/docs/scenarios/scenario-3/index.md4Container escape to the host systemguide/docs/scenarios/scenario-4/index.md5Docker CIS benchmarks analysisguide/docs/scenarios/scenario-5/index.md6Kubernetes CIS benchmarks analysisguide/docs/scenarios/scenario-6/index.md7Attacking private registryguide/docs/scenarios/scenario-7/index.md8NodePort exposed servicesguide/docs/scenarios/scenario-8/index.md9Helm v2 tiller to PwN the cluster已 Deprecatedguide/docs/scenarios/scenario-9/index.md10Analyzing crypto miner containerguide/docs/scenarios/scenario-10/index.md11Kubernetes namespaces bypassguide/docs/scenarios/scenario-11/index.md12Gaining environment informationguide/docs/scenarios/scenario-12/index.md13DoS the Memory/CPU resourcesguide/docs/scenarios/scenario-13/index.md14Hacker container previewguide/docs/scenarios/scenario-14/index.md15Hidden in layersguide/docs/scenarios/scenario-15/index.md16RBAC least privileges misconfigurationguide/docs/scenarios/scenario-16/index.md17KubeAudit - Audit Kubernetes clustersguide/docs/scenarios/scenario-17/index.md18Falco - Runtime security monitoring detectionguide/docs/scenarios/scenario-18/index.md19Popeye - A Kubernetes cluster sanitizerguide/docs/scenarios/scenario-19/index.md20Secure network boundaries using NSPguide/docs/scenarios/scenario-20/index.md21Cilium Tetragon - eBPF-based Security Observabilityguide/docs/scenarios/scenario-21/index.md22Securing Kubernetes Clusters using Kyverno Policy Engineguide/docs/scenarios/scenario-22/index.md可以观察到场景编排明显分为攻击面1–16与检测/防御工具17–22KubeAudit、Falco、Popeye、NetworkPolicy、Tetragon、Kyverno两段与文档中helping products vendors to showcase their product or tools effectiveness的定位一致——工具类场景本身就是各安全产品在该靶场中做效果演示的载体。面向的受众文档首页将受众划分为五类各自从项目中获得不同价值Attackers Red Teams攻击者/红队学习如何在容器、Kubernetes 与云原生环境中发现安全问题、误配置和真实攻击路径从浏览器出发完成枚举、利用与工作负载接管。Defenders Blue Teams防御者/蓝队理解攻击者的思路与利用手法并将其转化为检测与防御手段同时学习最佳实践、防御与检测工具。Developers DevOps Teams开发者/DevOps 团队学习攻击、防御与工具像攻击者一样思考从而在设计、代码与架构阶段就防止问题发生。Products Vendors产品/厂商用这些场景展示工具与方案的有效性并以交互式、实操的方式教育客户。Interested in Kubernetes SecurityKubernetes 安全爱好者获取常见误配置、攻击手法、防御与工具的真实世界知识并贡献反馈。环境清理teardown 脚本练习结束后应清理集群。teardown-kubernetes-goat.sh 的清理顺序与 setup 一一对应# 删除 superadmin ClusterRoleBinding 与 ServiceAccount kubectl delete clusterrolebindings superadmin kubectl delete serviceaccount -n kube-system superadmin # 删除 helm-tiller 相关的 ClusterRole/Binding kubectl delete clusterrole all-your-base kubectl delete clusterrolebindings belong-to-us # 删除 metadata-db Helm chart helm delete metadata-db --no-hooks # 删除 tiller deployment如启用过 kubectl delete deployments -n kube-system tiller-deploy # 逐个删除各场景清单 kubectl delete -f scenarios/batch-check/job.yaml kubectl delete -f scenarios/build-code/deployment.yaml # ... 其余场景清单脚本结尾还给出了官方建议确保清理你安装和使用过的所有组件Its better to delete the cluster——对于Vulnerable by Design的环境销毁整个隔离集群是最彻底的清理方式。更多部署环境快速开始只覆盖标准 Kubernetes 集群。文档提示如需在 GCP GKE、AWS EKS/Fargate、Azure AKS、K3s、Kind含 Windows等环境部署 Kubernetes Goat可参考 How to Run 系列文档本仓库的 platforms/ 目录还提供了对应的自动化脚本如 kind-setup 中的setup-kind-cluster-and-goat.sh和 CDK 示例可作为多环境部署的延伸阅读。小结Kubernetes Goat 是一个刻意易受攻击的 Kubernetes 安全练习场22 个场景覆盖敏感密钥、DIND、SSRF、容器逃逸、私有仓库、RBAC 过度授权、资源 DoS 等攻击面以及 KubeAudit/Falco/Popeye/NSP/Tetragon/Kyverno 等检测防御手段。搭建三步走bash setup-kubernetes-goat.sh部署资源 →kubectl get pods确认全部 Running →bash access-kubernetes-goat.sh建立 1230–1236 端口转发浏览器访问http://127.0.0.1:1234。setup 脚本的核心是部署superadmincluster-admin 绑定RBAC 误配置基础helm install metadata-db 批量 apply 十个场景清单脚本支持--kubeconfig与--insecure参数且只部署核心场景子集。使用时务必遵守安全边界仅限隔离环境、仅用于教育目的、不得对未授权系统复现攻击结束后运行 teardown-kubernetes-goat.sh 或直接销毁集群。【免费下载链接】kubernetes-goatKubernetes Goat is a Vulnerable by Design cluster environment to learn and practice Kubernetes security using an interactive hands-on playground 项目地址: https://gitcode.com/GitHub_Trending/ku/kubernetes-goat创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考