容器镜像加固生成工具

基于AI辅助的容器镜像加固生成工具,遵循15项GWShield加固原则,为Dockerfile、烟雾测试和版本锁定文件提供生产级生成服务。

  • by gwshield
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 gwshield/images-mcp

使用说明

门禁屏蔽图像生成器MCP

人工智能辅助硬化容器图像生成

根据15个GWShield硬化支柱生成生产级Dockerfiles。 适用于Claude、Gemini、OpenCode和任何兼容MCP的AI代理。



这个工具做什么

这是一个 模型上下文协议(MCP)服务器 对完整内容进行编码 GWShield将强化方法论转化为AI可访问的工具。它使任何 AI编码代理,用于生成Dockerfiles、冒烟测试、版本引脚和 符合生产所用相同标准的支持文件 GWShield图像管道。

服务器会 不 构建图像。它生成文件。


15个硬化支柱

每个生成的Dockerfile都强制执行以下支柱:

# 支柱 总结
1 从头开始/无发行版 运行时从头开始;仅在有文件证明的情况下才可发行
2 静态二进制 CGO_ENABLED=0(Go)或musl-Static(C/Rust);没有不合理的动态存款
3 非根UID 65532 末级用户65532:65532;无root启动,特权删除
4 运行时没有shell 没有/bin/sh,没有包管理器,没有curl/wget/nc
5 多阶段+摘要固定 deps->banner->builder->runtime;所有FROM图像均已固定256
6 固定gwshield构建器 使用ghcr.io/gwshield/*-builder映像作为构建基础
7 Cosign无密钥签名 Sigstore OIDC;没有长寿命的关键材料
8 SBOM附加 CycloneDX+SPDX绑定到图像摘要
9 三重硬临界门 0释放时未固定的高/临界值;只有证据的对抗论者
10 OCI标签架构 org.opencontainers.image。_+io.gwshield。_标签
11 gwshield初始化横幅 静态C包装作为ENTRYPOINT;exec()转换为实数二进制
12 强化编译器标志 -fstack保护程序强,FORTIF_SOURCE=2,RELRO,PIE
13 源tarball+SHA-256 从上游源构建;验证tarball哈希值
14 每图像烟雾测试 启动测试/smoke.sh,非根,无外壳,版本检查
15 CVE allowlist+风险声明 扫描/allowlist.yaml+文档/risk-statement.md并附上证据

安装

无需全局安装。服务器通过以下方式按需运行 npx.

运行一次以确认服务器启动:

npx -y gwshield-image-builder-mcp

然后将其添加到您的代理配置中:

克劳德桌面/克劳德代码

文件: ~/.claude/claude_desktop_config.json

{
  "mcpServers": {
    "gwshield-image-builder": {
      "command": "npx",
      "args": ["-y", "gwshield-image-builder-mcp"]
    }
  }
}

保存后重新启动Claude Desktop。

开源代码

文件: ~/.config/opencode/config.json 或 opencode.json (项目)

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "gwshield-image-builder": {
      "type": "local",
      "command": ["npx", "-y", "gwshield-image-builder-mcp"],
      "enabled": true
    }
  }
}

OpenCode使用 "mcp" (不是 "mcpServers")与 type: "local" 以及命令数组。

光标

文件: .cursor/mcp.json (项目)或 ~/.cursor/mcp.json (全球)

{
  "mcpServers": {
    "gwshield-image-builder": {
      "command": "npx",
      "args": ["-y", "gwshield-image-builder-mcp"]
    }
  }
}

继续(VS代码/JetBrains)

文件: .continue/mcpServers/gwshield.yaml (工作空间)

name: GWShield Image Builder
version: 0.0.1
schema: v1
mcpServers:
  - name: gwshield-image-builder
    command: npx
    args:
      - "-y"
      - "gwshield-image-builder-mcp"

双子星命令行工具

文件: ~/.gemini/settings.json

{
  "mcpServers": {
    "gwshield-image-builder": {
      "command": "npx",
      "args": ["-y", "gwshield-image-builder-mcp"]
    }
  }
}

来源

git clone git@github.com:gwshield/images-mcp.git
cd images-mcp
npm install
npm run build

然后将您的MCP客户端指向:

{
  "mcpServers": {
    "gwshield-image-builder": {
      "command": "node",
      "args": ["path/to/images-mcp/dist/index.js"]
    }
  }
}

所有代理商都使用 npx stdio传输——没有守护进程,没有端口,没有持久进程。


MCP工具

工具 说明
list_pillars 列出所有15个硬化支柱及其说明
suggest_runtime_base 为语言选择合适的无发行版或草稿库
generate_dockerfile 生成一个完全硬化的多级Dockerfile
generate_versions_env 为可复制的构建生成一个固定的VERSIONS.env
generate_smoke_test 生成每张图像的烟雾测试脚本
validate_dockerfile 根据所有15个支柱验证Dockerfile
generate_dockerignore 生成一个最小的、有家庭意识的.dockerignore

MCP提示

提示 描述
harden_image 全面分析+为任何图像生成强化的Dockerfile
review_dockerfile 根据GWShield支柱审核现有的Dockerfile
build_test_iterate 构建→ scan → 使用Trivy修复迭代循环(最多5次迭代)

MCP资源

资源 描述
gwshield://pillars 所有15个支柱,包括基本原理和实施说明
gwshield://families 支持的镜像系列:Go、C、Rust
gwshield://contributing GWShield新图像贡献指南

示例提示

连接服务器后,请向您的代理询问以下任一问题:

“强化我的Go HTTP服务” 用途 harden_image → suggest_runtime_base → generate_dockerfile (无发行版运行时, CGO_ENABLED=0,UID 65532,固定构建器摘要)→ validate_dockerfile 确认了所有15个支柱。

“查看我现有的Dockerfile” 用途 review_dockerfile → validate_dockerfile.返回结构化报告:哪些支柱 通过,失败,并对每个差距进行具体修复。

“为我的nginx镜像生成烟雾测试” 呼叫 generate_smoke_test 使用图像族和二进制路径。返回一个脚本,用于检查 二进制执行、非root用户、无shell和干净的退出代码。

构建、扫描和修复,直到清理干净 用途 build_test_iterate代理人会引导你通过 docker build → trivy image → fix → 重复,直到Trivy报告零个高或关键发现(最多5次迭代)。


图像族分类

服务器将服务分类到构建系列中,以选择正确的 Dockerfile模式:

家庭 运行时 链接 示例服务
go-static scratch CGO_ENABLED=0 Traefik、Caddy、NATS
c-musl scratch+musl loader musl static nginx、Redis、Valkey、HAProxy
c-glibc 无发行版/cc-debian12 glibc动态 PostgreSQL
go-cgo 无发行版/静态debian12 启用CGO Pomerium,OTel收集器
rust-static scratch musl target 未来的Rust服务

供应链安全

组件 状态 详细信息
npm出处(SLSA v1) 活动 每个发布的版本都有一个从npm注册表链接的SLSA出处v1证明
SLSA认证 有效 可通过验证 cosign (见下文)
SHA固定GitHub操作 活动 全部 uses: 指向不可变提交SHA的引用
Dependabot 活动 每周自动更新npm依赖关系和GitHub操作
锁定文件强制 活动 npm ci 在CI-- package-lock.json 所有188个包都具有SHA-512完整性
注册表引脚 活动 .npmrc 针 registry.npmjs.org --无第三方注册

验证已发布的版本

消费者可以使用以下方式验证任何已发布版本的来源证明 联署:

# Verify SLSA provenance attestation for a specific version
cosign verify-attestation \
  --type slsaprovenance1 \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com \
  --certificate-identity-regexp "^https://github.com/gwshield/images-mcp/.github/workflows/publish.yml@refs/tags/v" \
  $(npm pack gwshield-image-builder-mcp --dry-run --json | jq -r '.[0].filename')

或者,出处可以直接在npm注册表页面上的 每个已发布版本的“来源”选项卡。

报告安全问题

看 安全.md 漏洞披露政策。 使用 GitHub私人安全公告 以保密的方式报告漏洞。


构建理念

该工具编码了所有网关管理员使用的相同硬化理念 屏蔽图像:

  • 从源头,从零开始 --没有供应商基础映像
  • 安全第一,不是便利第一 --没有初始化脚本,没有shell
  • 需要扫描证据 --没有证据就没有索赔
  • 透明假阳性 --记录扫描仪噪声,不隐藏

灵感与致谢

此MCP服务器的设计受到以下因素的影响 维克托·法尔契奇的人工智能辅助工作 生成Docker文件。他的 generate-dockerfile 提示在 点ai 和 点ai堆栈 仓库 证明了将Dockerfile最佳实践编码为结构化AI 提示产生的输出始终比ad-hoc生成更好。

我们采纳或改编自他的方法的关键思想:

  • 项目分析第一工作流程 --之前分析代码库 生成,而不是仅仅依赖用户提供的参数
  • 显式.doccernore生成 --将.docerignore视为 一流的构建工件,而不是事后的想法
  • 在添加之前验证所有内容 --永远不要假设一个包裹, 路径或二进制存在;始终根据实际项目上下文进行验证
  • 构建测试迭代循环 --构建映像,运行它,检查日志, 运行linters和scanner,迭代直到干净(可通过 build_test_iterate 提示)

Viktor的方法是语言无关和通用的 服务器固执己见,安全性很强:它强制执行15 GWShield 支柱、目标 scratch 和 distroless 仅运行时间,以及 生成完整的文件集(Dockerfile、versions.env、smoke.sh、, GWShield图像管道要求的风险声明。

感谢Viktor将您的提示和方法开源。


许可证

Apache-2.0--看门人/RelicFrog基金会