scanning-kubernetes-manifests-with-kubesec
使用 Kubesec 对 Kubernetes 资源清单执行安全风险分析,识别错误配置、权限提升风险以及与安全最佳实践的偏差。
Best use case
scanning-kubernetes-manifests-with-kubesec is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
使用 Kubesec 对 Kubernetes 资源清单执行安全风险分析,识别错误配置、权限提升风险以及与安全最佳实践的偏差。
Teams using scanning-kubernetes-manifests-with-kubesec should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/scanning-kubernetes-manifests-with-kubesec/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How scanning-kubernetes-manifests-with-kubesec Compares
| Feature / Agent | scanning-kubernetes-manifests-with-kubesec | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
使用 Kubesec 对 Kubernetes 资源清单执行安全风险分析,识别错误配置、权限提升风险以及与安全最佳实践的偏差。
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# 使用 Kubesec 扫描 Kubernetes 清单
## 概述
Kubesec 是由 ControlPlane 开发的开源安全风险分析工具,用于检查 Kubernetes 资源清单中常见的可利用风险,如权限提升(Privilege Escalation)、可写宿主机挂载和过多能力赋予。它为每个资源分配数值安全评分,并提供可操作的加固建议。Kubesec 可作为 CLI 二进制、Docker 容器、kubectl 插件、准入 Webhook 或 REST API 端点使用。
## 前置条件
- Kubernetes 清单文件(YAML/JSON),适用于 Deployment、Pod、DaemonSet、StatefulSet
- 本地安装需要 Docker 或 Go 运行时
- kubectl 访问权限(用于扫描集群中的实时资源)
- CI/CD 流水线访问权限(用于自动化扫描集成)
## 核心概念
### 安全评分系统
Kubesec 根据安全检查为每个 Kubernetes 资源分配评分:
- **正分**:对安全增强配置的奖励(readOnlyRootFilesystem、runAsNonRoot)
- **零分或负分**:表示缺少安全控制或存在危险配置
- **关键建议(Critical advisories)**:标记代表即时安全风险的配置
### 检查类别
1. **特权控制**:检查特权容器、宿主机 PID/网络访问、root 执行
2. **能力(Capabilities)**:识别过多的 Linux 能力(SYS_ADMIN、NET_RAW)
3. **卷挂载**:检测危险的宿主机路径挂载和可写的敏感路径
4. **资源限制**:验证 CPU/内存资源限制的存在
5. **安全上下文**:验证 seccomp 配置文件、AppArmor 注解、SELinux 上下文
## 安装
### 二进制安装
```bash
# Linux/macOS
curl -sSL https://github.com/controlplaneio/kubesec/releases/latest/download/kubesec_linux_amd64.tar.gz | \
tar xz -C /usr/local/bin/ kubesec
# 验证安装
kubesec version
```
### Docker 安装
```bash
docker pull kubesec/kubesec:v2
# 扫描清单文件
docker run -i kubesec/kubesec:v2 scan /dev/stdin < deployment.yaml
```
### kubectl 插件
```bash
kubectl krew install kubesec-scan
kubectl kubesec-scan pod mypod -n default
```
## 实践扫描
### 扫描单个清单
```bash
# 扫描 deployment 清单
kubesec scan deployment.yaml
# 以 JSON 格式输出
kubesec scan -o json deployment.yaml
# 从标准输入扫描
cat pod.yaml | kubesec scan -
```
### 示例输出
```json
[
{
"object": "Pod/web-app.default",
"valid": true,
"fileName": "pod.yaml",
"message": "Passed with a score of 3 points",
"score": 3,
"scoring": {
"passed": [
{
"id": "ReadOnlyRootFilesystem",
"selector": "containers[] .securityContext .readOnlyRootFilesystem == true",
"reason": "不可变根文件系统可防止应用向本地磁盘写入",
"points": 1
},
{
"id": "RunAsNonRoot",
"selector": "containers[] .securityContext .runAsNonRoot == true",
"reason": "强制运行的镜像以非 root 用户运行",
"points": 1
},
{
"id": "LimitsCPU",
"selector": "containers[] .resources .limits .cpu",
"reason": "强制 CPU 限制可防止通过资源耗尽实施 DoS 攻击",
"points": 1
}
],
"advise": [
{
"id": "ApparmorAny",
"selector": "metadata .annotations .\"container.apparmor.security.beta.kubernetes.io/nginx\"",
"reason": "定义良好的 AppArmor 策略可减少容器攻击面",
"points": 3
},
{
"id": "ServiceAccountName",
"selector": ".spec .serviceAccountName",
"reason": "服务账户限制 Kubernetes API 访问,应进行配置",
"points": 3
}
]
}
}
]
```
### 扫描多个资源
```bash
# 扫描目录中所有 YAML 文件
for file in manifests/*.yaml; do
echo "=== 扫描 $file ==="
kubesec scan "$file"
done
# 扫描多文档 YAML
kubesec scan multi-resource.yaml
```
### 使用 HTTP API
```bash
# 通过公共 API 扫描
curl -sSX POST --data-binary @deployment.yaml \
https://v2.kubesec.io/scan
# 运行本地 API 服务器
kubesec http --port 8080 &
# 对本地服务器扫描
curl -sSX POST --data-binary @deployment.yaml \
http://localhost:8080/scan
```
## CI/CD 集成
### GitHub Actions
```yaml
name: Kubesec 扫描
on: [pull_request]
jobs:
kubesec:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 安装 Kubesec
run: |
curl -sSL https://github.com/controlplaneio/kubesec/releases/latest/download/kubesec_linux_amd64.tar.gz | \
tar xz -C /usr/local/bin/ kubesec
- name: 扫描清单
run: |
FAIL=0
for file in k8s/*.yaml; do
SCORE=$(kubesec scan "$file" | jq '.[0].score')
echo "$file: score=$SCORE"
if [ "$SCORE" -lt 0 ]; then
echo "FAIL: $file 存在严重问题(评分:$SCORE)"
FAIL=1
fi
done
exit $FAIL
```
### GitLab CI
```yaml
kubesec-scan:
stage: security
image: kubesec/kubesec:v2
script:
- |
for file in k8s/*.yaml; do
kubesec scan "$file" > /tmp/result.json
SCORE=$(cat /tmp/result.json | jq '.[0].score')
if [ "$SCORE" -lt 0 ]; then
echo "严重:$file 评分 $SCORE"
cat /tmp/result.json | jq '.[0].scoring.critical'
exit 1
fi
done
artifacts:
paths:
- kubesec-results/
```
### 准入 Webhook
将 Kubesec 部署为 ValidatingWebhookConfiguration,在部署时拒绝不安全的清单:
```yaml
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
name: kubesec-webhook
webhooks:
- name: kubesec.controlplane.io
rules:
- apiGroups: [""]
apiVersions: ["v1"]
operations: ["CREATE", "UPDATE"]
resources: ["pods"]
- apiGroups: ["apps"]
apiVersions: ["v1"]
operations: ["CREATE", "UPDATE"]
resources: ["deployments", "daemonsets", "statefulsets"]
clientConfig:
service:
name: kubesec-webhook
namespace: kube-system
path: /scan
failurePolicy: Fail
sideEffects: None
admissionReviewVersions: ["v1"]
```
## 安全检查参考
### 严重检查(负分)
| 检查项 | 选择器 | 风险 |
|-------|----------|------|
| 特权模式 | `securityContext.privileged == true` | 完整宿主机访问 |
| HostPID | `spec.hostPID == true` | 进程命名空间逃逸 |
| HostNetwork | `spec.hostNetwork == true` | 网络命名空间逃逸 |
| SYS_ADMIN | `capabilities.add contains SYS_ADMIN` | 接近 root 的能力 |
### 最佳实践检查(正分)
| 检查项 | 分值 | 描述 |
|-------|--------|-------------|
| ReadOnlyRootFilesystem | +1 | 防止文件系统写入 |
| RunAsNonRoot | +1 | 非 root 进程执行 |
| RunAsUser > 10000 | +1 | 高 UID 降低冲突风险 |
| LimitsCPU | +1 | 防止 CPU 资源耗尽 |
| LimitsMemory | +1 | 防止内存资源耗尽 |
| RequestsCPU | +1 | 确保调度器资源感知 |
| ServiceAccountName | +3 | 显式服务账户 |
| AppArmor 注解 | +3 | 内核级 MAC 执行 |
| Seccomp 配置文件 | +4 | 系统调用过滤 |
## 参考资料
- [Kubesec GitHub 仓库](https://github.com/controlplaneio/kubesec)
- [Kubesec 在线扫描器](https://kubesec.io/)
- [ControlPlane 安全工具](https://controlplane.io/)
- [CIS Kubernetes Benchmark](https://www.cisecurity.org/benchmark/kubernetes)
- [Kubernetes Pod 安全标准](https://kubernetes.io/docs/concepts/security/pod-security-standards/)Related Skills
securing-kubernetes-on-cloud
本技能涵盖通过实施 Pod 安全标准(Pod Security Standards)、网络策略、工作负载身份、RBAC 权限控制、镜像准入控制和运行时安全监控,对 EKS、AKS 和 GKE 上的托管 Kubernetes 集群进行加固。涉及云平台特定安全功能,包括 EKS 的 IRSA、GKE 的工作负载身份(Workload Identity)以及 AKS 的托管身份(Managed Identity)。
scanning-network-with-nmap-advanced
使用 Nmap 的脚本引擎、时序控制、规避技术和输出解析,对授权目标网络执行高级网络侦察, 发现主机、枚举服务、检测漏洞并识别操作系统。
scanning-infrastructure-with-nessus
Tenable Nessus 是业界领先的漏洞扫描器,用于识别网络基础设施(包括服务器、工作站、网络设备和操作系统)中的安全弱点。
scanning-docker-images-with-trivy
Trivy 是 Aqua Security 开源的综合性漏洞扫描器,用于检测容器镜像中操作系统软件包、语言特定依赖项的漏洞、错误配置、密钥和许可证违规,并集成到 CI/CD 流水线,支持 SARIF、CycloneDX 和 SPDX 等多种输出格式。
scanning-containers-with-trivy-in-cicd
本技能涵盖将 Aqua Security 的 Trivy 扫描器集成到 CI/CD 流水线中,用于全面的容器镜像漏洞检测。包括扫描 Docker 镜像中的操作系统包和应用依赖 CVE、检测 Dockerfile 中的错误配置、扫描文件系统和 Git 仓库,以及建立基于严重性的质量门禁以阻止有漏洞的镜像部署。
scanning-container-images-with-grype
使用 Anchore Grype 扫描容器镜像的已知漏洞(Vulnerability),支持基于 SBOM 的匹配和可配置的严重性阈值。
performing-web-application-scanning-with-nikto
Nikto 是一款开源 Web 服务器和 Web 应用程序扫描器,可针对超过 7,000 个潜在危险文件/程序进行测试,检查超过 1,250 个服务器的过期版本,并识别超过 270 个服务器的版本特定问题。
performing-vulnerability-scanning-with-nessus
使用 Tenable Nessus 执行认证和未认证漏洞扫描,识别网络基础设施、服务器和应用程序中的已知漏洞、 错误配置、默认凭据和缺失补丁。扫描器将发现与 CVE 数据库和 CVSS 评分关联,生成优先级修复指导。 适用于漏洞扫描、Nessus 评估、补丁合规检查或自动化漏洞检测等请求场景。
performing-sca-dependency-scanning-with-snyk
本技能涵盖使用 Snyk 实施软件成分分析(SCA, Software Composition Analysis),在 CI/CD 流水线中检测存在漏洞的开源依赖项。内容包括扫描包清单和锁文件、自动修复拉取请求生成、许可证合规检查、已部署应用程序的持续监控,以及与 GitHub、GitLab 和 Jenkins 流水线的集成。
performing-ot-vulnerability-scanning-safely
使用被动监控、原生协议查询和经过精心控制的Tenable OT Security主动扫描,在OT/ICS环境中安全执行漏洞扫描,在不破坏工业过程或导致旧版控制器崩溃的情况下识别漏洞。
performing-kubernetes-penetration-testing
Kubernetes 渗透测试(Penetration Testing)通过对 API server、kubelet、etcd、Pod、RBAC、网络策略和密钥模拟攻击者技术,系统性评估集群安全性。使用 kube-hunter、Kubescape、peirates 等工具识别可能导致集群被攻陷的错误配置。
performing-kubernetes-etcd-security-assessment
通过评估静态加密、TLS 配置、访问控制、备份加密和网络隔离,评估 Kubernetes etcd 集群的安全态势。