用途
容器安全加固技能是一份面向生产环境的指南,用于安全地构建、扫描和运行容器,覆盖从 Dockerfile 编写到运行时强制以及供应链完整性。它主要面向需要审查或加固 Docker 镜像与运行时部署的开发者与运维人员,帮助缩小镜像攻击面、修复容器 CVE,并将安全要求落实到生产环境。
主要能力
该技能围绕四个维度提供安全清单:
- Dockerfile:要求使用最小化基础镜像(distroless、slim 或 alpine,而非完整的 debian/ubuntu)、多阶段构建(运行时镜像中不含构建工具、devDependencies 或编译器)、在 CMD/ENTRYPOINT 之前声明非 root 的 USER、基础镜像固定到 @sha256:... 摘要、不在 ENV/ARG/RUN 中放置密钥、定义 HEALTHCHECK、包含 OCI 标签(org.opencontainers.image.*)、使用 .dockerignore 排除 .git、.env、secrets、tests,以及 ENTRYPOINT 使用 exec 形式而非 shell 形式。
- 镜像扫描:在 CI 中运行 Trivy 或 Grype 扫描并对 HIGH/CRITICAL 级别失败、通过 Hadolint 检查、对镜像运行密钥扫描(trivy --scanners secret)、生成并存储 SBOM、为已接受的 CVE 在 .trivyignore 中提供有理由的条目。
- 运行时:启用 --read-only 文件系统、--cap-drop ALL(仅按文档加回必需能力)、--security-opt no-new-privileges:true、应用 seccomp 配置文件、设置资源限制(--memory、--cpus、--pids-limit),以及用 Cosign 签名镜像并在部署前验证。
- Kubernetes:设置 readOnlyRootFilesystem: true、allowPrivilegeEscalation: false、runAsNonRoot: true 并指定显式 UID、capabilities.drop: ["ALL"]、定义资源 requests 与 limits、automountServiceAccountToken: false、在命名空间强制 restricted 级别的 PSA、应用默认拒绝的 NetworkPolicy,以及 RBAC 使用具体资源名和最小动词。
使用方式
该技能要求在执行前先阅读详细指南,指南保留完整流程与参考资料,其安全、前置条件和验证要求被视为强制性的。对于聚焦任务可加载相关章节,对于端到端工作应完整阅读指南。当任务明显匹配上述范围时才使用该技能,若缺少必需的输入、权限、安全边界或成功标准,应停止并请求澄清。
适用场景
当用户提及 Docker 安全、容器加固或 Dockerfile 安全审查,询问 distroless 镜像、非 root 容器或只读文件系统,希望用 Trivy、Grype 或 Snyk 扫描镜像 CVE,提及 seccomp、AppArmor、Linux 能力或运行时安全,询问“我的 Dockerfile 安全吗”或“如何减少镜像攻击面”,希望用 Cosign 签名/验证镜像或生成 SBOM,询问 Kubernetes Pod 安全、NetworkPolicy 或 RBAC 加固,或要求“修复容器 CVE”“为生产加固容器”时,适合使用该技能。
限制
该技能不适用的情况包括:用户主要询问 GitHub Actions CI/CD(建议 github-actions-advanced)、需要非安全性的通用 Docker 使用帮助(建议 docker-expert)、使用超出安全范围的 Kubernetes 编排(建议 kubernetes-architect),或需要应用层安全如 SQL 注入、XSS(建议 api-security-best-practices)。此外,不应将输出视为特定环境渗透测试或正式安全审计的替代品;seccomp 配置文件和 AppArmor 仅适用于 Linux,macOS/Windows 的 Docker Desktop 使用不同机制。