hiagokinlevi/container-defense-stack

GitHub: hiagokinlevi/container-defense-stack

一个容器与 Kubernetes 安全工具包,提供加固基线、离线扫描器与可复用策略模板,解决配置误配导致的权限提升与横向移动风险。

Stars: 2 | Forks: 0

# container-defense-stack 容器和Kubernetes安全工具包,提供Dockerfile加固指南、安全工作负载清单、RBAC基线、网络策略、清单验证器,以及用于DevSecOps团队的离线AKS/EKS/GCP云提供商加固检查。 ## 目标 为容器化工作负载提供生产就绪、可重用的安全基线——减少导致权限提升、横向移动或数据暴露的误配置。 ## 解决的问题 团队经常以过度权限、缺少资源限制、不安全的主机挂载以及无网络分段的方式部署容器。本工具包提供经过验证的模板、验证器和文档,以建立“默认安全”的机制。 ## 使用场景 - 为Python、Node.js和Go应用程序加固Dockerfile - 为Kubernetes工作负载应用安全上下文 - 实施最小权限的RBAC - 在部署前审计ServiceAccount和关联的RBAC - 使用网络策略分段命名空间 - 在部署前验证清单 - 使用可重用的OPA和Gatekeeper策略实施Pod护栏 - 在生产部署前审查导出的AKS节点池姿态 - 在生产部署前审查导出的EKS托管节点组姿态 - 在生产部署前审查导出的GCP Autopilot安全姿态 - 对团队进行容器安全基础培训 ## 伦理免责声明 所有内容均为防御性用途。请仅在你拥有或获授权评估的基础设施上使用验证器和基线。不要使用本工具包来攻击容器环境。 ## 结构 ``` docker/ — Secure Dockerfile examples kubernetes/ — Secure manifest templates validators/ — Manifest and Dockerfile validators policies/ — Reusable security policies docs/ — Hardening guides and architecture training/ — Tutorials and labs ``` ## 如何运行 ``` python3 -m venv .venv source .venv/bin/activate pip install -e ".[dev]" # 验证 Kubernetes 清单文件 k1n-container-guard validate-manifest deployment.yaml # 验证 Dockerfile k1n-container-guard validate-dockerfile Dockerfile # 扫描 Helm 值文件 k1n-container-guard scan-helm-values charts/api/values.yaml --chart-name api # 扫描整个 Helm chart 目录 k1n-container-guard scan-helm-chart charts/api # 扫描导出的 OCI/Docker 层元数据(JSON 格式) k1n-container-guard scan-image-layers image-layers.json --image-tag ghcr.io/acme/api:1.2.3 # 扫描导出的 AKS 节点池姿态 JSON k1n-container-guard scan-aks-nodepools aks-nodepools.json --cluster-name prod-aks # 扫描导出的 EKS 托管节点组姿态 JSON k1n-container-guard scan-eks-nodegroups eks-nodegroups.json --cluster-name prod-eks # 扫描导出的 GKE Autopilot 集群姿态 JSON k1n-container-guard scan-gke-autopilot gke-autopilot.json --fleet-name prod-gke # 从清单文件扫描 Kubernetes 工作负载身份 k1n-container-guard scan-workload-identity workloads.yaml # 从清单文件扫描 ServiceAccounts 和关联的 RBAC k1n-container-guard scan-serviceaccounts rbac-bundle.yaml ``` 如果你在离线或PEP 668管理的环境中工作,请使用 `python3 -m venv --system-site-packages .venv` 创建虚拟环境,并使用 `pip install -e . --no-deps --no-build-isolation` 重用本地可用的Python包。 ## 策略包 - `policies/opa/` 提供用于OPA审查的独立Rego准入控制。 - `policies/gatekeeper/` 提供可部署的 `ConstraintTemplate` 和示例 `Constraint` 清单,用于相同的Pod安全控制。 - `policies/kyverno/` 提供可部署的 `ClusterPolicy` 清单,用于相同的拒绝默认的Pod安全控制,包括 `hostPath` 拒绝。 - `kubernetes/admission/` 提供加固的验证和变更Webhook部署模板,支持cert-manager管理的TLS、可选命名空间范围限定,以及为构建自定义准入服务的团队提供的安全运行时默认值。 应用Gatekeeper库: ``` kubectl apply -f policies/gatekeeper/constrainttemplates/ kubectl apply -f policies/gatekeeper/constraints/ ``` 应用Kyverno库: ``` kubectl apply -f policies/kyverno/ ``` 应用准入Webhook模板: ``` kubectl apply -f kubernetes/admission/validating-webhook-stack.yaml kubectl apply -f kubernetes/admission/mutating-webhook-stack.yaml ``` 在启用任一Webhook模板之前,请对目标命名空间打上标签 `admission.k1n.dev/enforce=true`,以便在完成验证前保持准入可选。 ## 扩展扫描器 - `scan-helm-values` 检查Helm值文件中的镜像标签固定、安全安全上下文默认值、受限资源、服务账户令牌设置、网络暴露和硬编码凭证。 - `scan-helm-chart` 评估完整的Chart根目录,结合 `values.yaml` 检查与模板扫描,查找 `templates/*.yaml` 中的明文密钥。 - `scan-image-layers` 评估Docker/OCI层元数据(JSON格式),以便CI作业可以标记具有风险的构建历史、过大层、未经校验和验证的远程获取,以及发布前的SUID/SGID二进制文件。 - `scan-workload-identity` 离线解析Kubernetes YAML并分析Pod、Deployment、StatefulSet、DaemonSet、Job和CronJob清单,识别多云工作负载身份误配置,例如默认ServiceAccount与云凭证环境变量配对、IRSA角色过于宽松、跨工作负载共享云身份、缺少投影令牌受众或过期控制。 - `scan-serviceaccounts` 解析包含 `ServiceAccount`、`RoleBinding`、`ClusterRoleBinding`、`Role` 和 `ClusterRole` 资源的Kubernetes YAML包,以便在应用RBAC变更前捕获集群管理员绑定、通配符动词、集群范围秘密访问、令牌铸造权限、默认ServiceAccount过度授权、编辑风格聚合角色重用以及暴露的镜像拉取凭证。 - `scan-eks-nodegroups` 评估导出的EKS托管节点组姿态,包括SSH远程访问、公共子网放置、IMDSv2强制、显式Kubernetes版本审查、工作负载隔离标签或污点,以及托管更新中断预算。 - `scan-gke-autopilot` 评估导出的GKE Autopilot集群姿态,包括Autopilot模式证据、私有节点放置、控制平面授权网络、工作负载身份联合以及二进制授权强制。 `scan-image-layers` 命令接受以下两种输入之一:原始JSON格式的层对象列表,或包含 `image_tag` 和 `layers` 键的对象。每个层支持 `layer_id`、`created_by`、`size_bytes`、`layer_index` 以及可选的 `files` 列表(包含 `path`、`mode` 和 `size`)。 `scan-aks-nodepools` 接受原始JSON格式的节点池对象列表,或包含 `node_pools` 或 `agentPoolProfiles` 键的对象。这确保与直接的 `az aks nodepool list` 输出以及导出的 `az aks show` 姿态快照兼容。 ## 云提供商包 - [docs/aks-node-pool-hardening.md](docs/aks-node-pool-hardening.md) 文档记录了内置的AKS节点池加固基线以及 `scan-aks-nodepools` 离线审查流程。 - [docs/eks-node-group-hardening.md](docs/eks-node-group-hardening.md) 文档记录了内置的EKS托管节点组加固基线以及 `scan-eks-nodegroups` 离线审查流程。 - [docs/gke-autopilot-security-baseline.md](docs/gke-autopilot-security-baseline.md) 文档记录了内置的GKE Autopilot安全基线以及 `scan-gke-autopilot` 离线审查流程。 工作负载身份扫描器将 `ServiceAccount` 注解与工作负载Pod模板注解合并,使得同一清单包可以在到达集群前被审查。这样可以确保EKS IRSA、GKE Workload Identity和Azure Workload Identity的态势检查在离线CI和部署前审查中可用。 ServiceAccount扫描器解析同一YAML包中的RoleBinding和ClusterRoleBinding主题,并与ServiceAccount进行匹配。它还离线检查引用的Role和ClusterRole规则,并标记那些可以铸造新的 `serviceaccounts/token` 凭证的Role,以确保RBAC审查在清单到达集群API服务器前就在CI中完成。内置的 `system:aggregate-to-edit` 绑定被视为非默认ServiceAccount的重要项,因为它们向任何回退到默认身份的Pod授予命名空间写入权限。 ## 许可证 MIT —— 参见 [LICENSE](LICENSE)。
标签:AKS, Chrome Headless, DevSecOps, Docker安全, EKS, GKE, Kubernetes安全, OPA, RBAC, Web截图, 上游代理, 主机挂载, 子域名突变, 安全培训, 安全基线, 安全配置, 容器安全, 教学环境, 数据泄露防护, 最小权限, 服务账户安全, 横向移动防护, 清单验证, 特权提升防护, 生产环境安全, 网络分段, 网络探测, 网络策略, 节点安全, 请求拦截, 资源限制, 逆向工具, 镜像加固, 防御性安全, 靶场