
Kubernetes Goat 的 build-code 容器镜像构建、跨平台编译与 TruffleHog 密钥扫描实战【免费下载链接】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-goatbuild-code 是 Kubernetes Goat一个Vulnerable by Design的 Kubernetes 安全学习集群中的基础设施组件之一其容器内预装了 TruffleHog 密钥扫描工具配合 Scenario 1 用于演示如何从泄露的 git 仓库历史中挖掘出硬编码凭据。读完本文你将掌握该容器镜像的完整构建流程含 Go 交叉编译、Dockerfile 的多架构设计、集群部署方式以及在真实场景中用它执行trufflehog扫描的操作路径。一、build-code 容器在 Kubernetes Goat 中的定位infrastructure/build-code/README.md 开头明确说明This docker container is part of Kubernetes Goat.也就是说build-code 与仓库infrastructure/目录下的 cache-store、health-check、metadata-db 等组件同级是构成整个 Kubernetes Goat 集群的一个功能容器。从仓库中其他文件的引用关系可以进一步确认它的实际用途部署清单 scenarios/build-code/deployment.yaml 将其以 Deployment Service 的形式注入default命名空间镜像为madhuakula/k8s-goat-build-codeScenario 1Secrets Leakage Detection的文档 guide/docs/scenarios/scenario-1/scenario-1.md 中演练者正是通过kubectl get pods --namespace default -l appbuild-code定位该 Pod然后在 Pod 内运行trufflehog .从带有.git目录的仓库历史里找出泄露的凭据。因此build-code 容器的核心价值不在于其自带的app二进制而在于它提供了一个预装了 git 和 TruffleHog 的现成扫描环境让学习者无需自建环境即可练习git 历史凭据泄露这一经典 K8s 安全场景。二、构建 build-code 镜像从 README 继承的标准流程README 给出了构建与推送镜像的标准命令这里完整保留并补充说明1. 交叉编译 Linux 版的 app 二进制GOOSlinux GOARCHamd64 CGO_ENABLED0 go build这是针对容器环境的典型 Go 交叉编译方式三个环境变量的作用分别是参数取值作用GOOSlinux指定目标操作系统确保二进制可在容器内运行GOARCHamd64指定目标 CPU 架构x86_64CGO_ENABLED0关闭 CGO产出纯 Go 静态二进制不依赖 glibc 等系统动态库与 alpine 基础镜像兼容需要注意的是当前仓库的 infrastructure/build-code/ 目录下并未包含该 Go 程序的源码只提供了预编译好的app.tar.gz与app-arm64.tar.gz两个产物包。从目录结构看README 中的这条命令是面向重新构建二进制的说明实际发布流程中直接使用仓库内已打好的 tar 包即可。2. 构建镜像docker build -t madhuakula/k8s-goat-build-code .3. 推送镜像到 Docker Hubdocker push madhuakula/k8s-goat-build-code推送后即可供集群部署清单直接引用。三、Dockerfile 逐行解析多架构选择与工具链安装构建脚本的核心在 infrastructure/build-code/Dockerfile全文如下FROM alpine:latest LABEL MAINTAINERMadhu Akula INFOKubernetes Goat COPY app-arm64.tar.gz /app-arm64.tar.gz COPY app.tar.gz /app.tar.gz RUN apk --no-cache add git py3-pip \ pip install truffleHog; \ if [ uname -m aarch64 ]; then \ tar -xvzf app-arm64.tar.gz -C / ; \ else \ tar -xvzf app.tar.gz -C / ; \ fi; \ rm /app.tar.gz /app-arm64.tar.gz EXPOSE 3000 WORKDIR /app/ CMD [./app]几个值得关注的实现细节双架构 tar 包的运行时选择。镜像同时携带app-arm64.tar.gzApple Silicon / aarch64 节点与app.tar.gzamd64 节点两个产物并在RUN阶段通过uname -m判断当前构建机器的架构来解压对应版本。这样做让同一套构建流程可以在 x86 和 Apple Silicon Mac 上分别产出适配本地节点架构的镜像避免在 M 系列芯片上拉取 amd64 镜像跑 Rosetta 的开销。工具链安装。通过apk --no-cache add git py3-pip安装 git 与 Python pip再pip install truffleHog装入口令扫描工具。git 是 TruffleHog 读取.git历史所必需的依赖。解压后清理。tar 包解压到根目录解压后/app成为可执行文件与WORKDIR /app/和CMD [./app]对应随后删除两个 tar 包以减小镜像层体积。端口与入口。EXPOSE 3000声明了 3000 端口WORKDIR切到/app/CMD [./app]作为容器入口。仓库未提供app二进制的源码其具体服务行为无法从仓库内确认但对演练场景而言扫描操作是在 Pod 内手动执行trufflehog完成的入口程序更多是维持容器存活的角色。安全性注记这份 Dockerfile 存在两个典型的供应链弱项——基础镜像使用alpine:latest未锁定版本、pip install truffleHog未指定版本号。仓库自带的 KICS 扫描报告guide/static/kics-report.html也确实标记了该 Dockerfile 中安装 truffleHog 时未做包版本锁定package pinning一类问题。这正是 Kubernetes Goat Vulnerable by Design 理念的一部分组件镜像本身也刻意保留了可被审计工具发现的问题。四、集群部署Deployment 与 Service 清单镜像推送后通过 scenarios/build-code/deployment.yaml 将其部署进集群清单完整内容如下apiVersion: apps/v1 kind: Deployment metadata: name: build-code-deployment namespace: default spec: selector: matchLabels: app: build-code template: metadata: labels: app: build-code spec: containers: - name: build-code image: madhuakula/k8s-goat-build-code resources: limits: memory: 50Mi cpu: 20m ports: - containerPort: 3000 --- apiVersion: v1 kind: Service metadata: name: build-code-service namespace: default spec: ports: - protocol: TCP port: 3000 targetPort: 3000 selector: app: build-code关键配置点标签选择器Pod 标签app: build-codeDeployment、Service 通过该标签关联。这也是 Scenario 1 中用-l appbuild-code找到 Pod 的依据资源限制memory: 50Mi、cpu: 20m限制极低符合该组件轻量存活 手动 exec 扫描的定位端口映射容器端口 3000 与 Dockerfile 的EXPOSE 3000对应Servicebuild-code-service以 TCP 3000 对外暴露并选中app: build-code的 Pod。五、实战在 Scenario 1 中用 TruffleHog 挖掘 git 历史里的凭据部署完成、集群内存在一个包含.git目录的待扫描仓库后guide/docs/scenarios/scenario-1/scenario-1.md 给出了标准操作路径定位 build-code Podexport POD_NAME$(kubectl get pods --namespace default -l appbuild-code -o jsonpath{.items[0].metadata.name})进入该 Pod在包含.git目录的仓库路径下执行trufflehog .TruffleHog 会遍历提交历史把散落在各 commit 中的密钥、令牌等凭据连同其引入的提交一并列出从而演示凭据一旦进入 git 历史仅删除文件并不等于泄露消失这一安全要点。该容器内预装 git TruffleHog 的组合正是为此步骤服务。六、完整流程小结按仓库文档与清单复现 build-code 组件的完整链路为可选GOOSlinux GOARCHamd64 CGO_ENABLED0 go build重新编译app二进制或直接使用仓库中的app.tar.gz/app-arm64.tar.gzdocker build -t madhuakula/k8s-goat-build-code .构建镜像docker push madhuakula/k8s-goat-build-code推送到镜像仓库应用 scenarios/build-code/deployment.yaml 完成 Deployment Service 部署在 Scenario 1 中kubectl exec进入 Pod用trufflehog .扫描 git 历史中的泄露凭据。所有环节涉及的相对路径均可在仓库内直接查证构建说明见 infrastructure/build-code/README.md镜像定义见 infrastructure/build-code/Dockerfile部署清单见 scenarios/build-code/deployment.yaml使用场景见 guide/docs/scenarios/scenario-1/scenario-1.md。【免费下载链接】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),仅供参考