🔍 第29课:安全扫描
核心概念
安全扫描:左移安全,早发现早修复
安全扫描在开发阶段就发现漏洞,而不是等到生产环境被攻击。包括容器镜像扫描、代码静态分析、依赖漏洞检查。
安全扫描全景
代码提交 → SAST(代码扫描) → SCA(依赖扫描) → 构建
→ 容器镜像扫描 → DAST(运行时扫描) → 部署 → 运行时防护
SAST → 静态代码分析(SonarQube/Semgrep)
SCA → 软件成分分析(Snyk/Dependabot)
Container → 镜像漏洞(Trivy/Harbor)
DAST → 动态安全测试(OWASP ZAP)
IaC → 基础设施扫描(Checkov/tfsec)
命令实操
1. Trivy容器镜像扫描 ✅
# 安装Trivy
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin
# 扫描镜像
trivy image myregistry/myapp:v1.2.3
trivy image --severity HIGH,CRITICAL myregistry/myapp:v1.2.3
trivy image --format json --output trivy-report.json myregistry/myapp:v1.2.3
# CI门禁(发现CRITICAL则失败)
trivy image --exit-code 1 --severity CRITICAL myregistry/myapp:v1.2.3
# 扫描文件系统(代码依赖)
trivy fs --severity HIGH,CRITICAL ./
# 扫描IaC配置
trivy config ./terraform/
# 扫描K8s集群
trivy k8s --report summary cluster
2. SonarQube代码质量扫描 ✅
docker run -d --name sonarqube -p 9000:9000 -v sonarqube-data:/opt/sonarqube/data sonarqube:community
# 创建项目+Token
curl -u admin:admin -X POST "http://localhost:9000/api/projects/create" -d "name=myapp&project=myapp"
# Maven扫描
mvn sonar:sonar -Dsonar.projectKey=myapp -Dsonar.host.url=http://localhost:9000 -Dsonar.login=
# 设置质量门禁
curl -u admin:admin -X POST "http://localhost:9000/api/qualitygates/create" -d "name=DevOps-Gate"
curl -u admin:admin -X POST "http://localhost:9000/api/qualitygates/create_condition" \
-d "gateName=DevOps-Gate&metric=critical_violations&operator=GT&error=0"
# CI集成(扫描失败则构建失败)
mvn sonar:sonar -Dsonar.qualitygate.wait=true
3. GitHub Actions安全扫描流水线 ✅
cat > .github/workflows/security-scan.yml << 'EOF'
name: Security Scan
on: [push, pull_request]
jobs:
trivy-container:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: docker build -t myapp:${{ github.sha }} .
- uses: aquasecurity/trivy-action@master
with: {image-ref: 'myapp:${{ github.sha }}', severity: 'CRITICAL,HIGH', exit-code: '1', format: 'sarif', output: 'trivy.sarif'}
semgrep:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: returntocorp/semgrep-action@v1
with: {config: 'p/security-audit p/secrets p/owasp-top-ten'}
checkov-iac:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: bridgecrewio/checkov-action@master
with: {directory: 'terraform/', framework: 'terraform'}
EOF
架构图
安全扫描:左移安全,早发现早修复架构
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ SAST │ │ SCA │ │ Container│ │ IaC │
│ Semgrep │ │ Trivy FS │ │ Trivy │ │ Checkov │
│ SonarQube│ │ Snyk │ │ Harbor │ │ tfsec │
└────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘
└──────────────┼──────────────┘ │
▼ │
┌─────────────┐ │
│ Quality Gate│◄─────────────────────┘
└──────┬──────┘
┌─────────┼─────────┐
▼ ▼
通过 → 部署 失败 → 阻断
故障排查
❌ Trivy误报过多
cat > .trivyignore << 'EOF'
CVE-2023-XXXX # 已评估,暂不修复
CVE-2024-XXXX # 仅影响非本场景
EOF
# 仅扫描特定类型
trivy image --vuln-type os myapp:v1.2.3 # 仅OS漏洞
trivy image --vuln-type library myapp:v1.2.3 # 仅依赖漏洞
💡 安全扫描原则:CI中自动运行、CRITICAL级别阻断部署、定期更新漏洞数据库、误报用.trivyignore管理。
🏆 成就解锁:安全扫描专家!
掌握Trivy/SonarQube/Semgrep/Checkov——左移安全把漏洞挡在门外
📝 安全扫描类型详解
| 类型 | 扫描时机 | 工具 | 检测内容 |
| SAST | 代码提交时 | Semgrep/SonarQube | 代码漏洞模式 |
| SCA | 依赖变更时 | Snyk/Dependabot | 已知CVE漏洞 |
| Container | 镜像构建时 | Trivy/Harbor | OS+库漏洞 |
| DAST | 部署后 | OWASP ZAP | 运行时漏洞 |
| IaC | Terraform变更时 | Checkov/tfsec | 配置安全 |
| Secret | 代码提交时 | TruffleHog/gitleaks | 硬编码密钥 |
💡 安全扫描策略:CI中自动运行、CRITICAL级别阻断部署、定期更新漏洞库、误报用ignore文件管理。
🔧 Trivy高级用法
# 忽略特定CVE
cat > .trivyignore << 'EOF'
CVE-2023-XXXX # 已评估,暂不修复
CVE-2024-YYYY # 仅影响非本场景功能
EOF
# 仅扫描OS漏洞
trivy image --vuln-type os myapp:v1.2.3
# 仅扫描依赖漏洞
trivy image --vuln-type library myapp:v1.2.3
# SBOM生成+扫描
trivy image --format spdx-json --output sbom.json myapp:v1.2.3
trivy sbom sbom.json --severity HIGH,CRITICAL
# Kubernetes全集群扫描
trivy k8s --report all cluster --severity CRITICAL
# 自定义Regexp扫描密钥泄露
trivy fs --scanners secret ./src/
# CI集成:SARIF上传GitHub Security
trivy image --format sarif --output trivy.sarif myapp:${{ github.sha }}
📝 安全扫描频率建议
| 扫描类型 | 频率 | 阻断级别 | 处理SLA |
| SAST | 每次PR | HIGH+ | 24h |
| SCA | 每次PR+每日 | CRITICAL | 7天 |
| Container | 每次构建 | CRITICAL | 7天 |
| IaC | 每次Terraform变更 | HIGH+ | 14天 |
| DAST | 每周 | CRITICAL | 14天 |
| Secret | 每次提交 | 任何 | 立即 |
⚠️ 密钥泄露是最高优先级!一旦发现硬编码密钥,立即轮换该密钥,不要只删除代码。
⚠️ 学习建议:每课内容都需要在实验环境中实际操作验证,只有动手才能真正掌握。建议搭建自己的实验环境反复练习。
📝 本课知识图谱
| 知识域 | 核心技能 | 验证方式 |
| 核心概念 | 理解原理和架构 | 能用自己的话解释 |
| 命令实操 | 熟练使用相关工具 | 能独立完成操作 |
| 故障排查 | 定位和解决问题 | 能在模拟故障中恢复 |
| 最佳实践 | 遵循生产级标准 | 能设计可靠方案 |
💡 持续学习:技术领域更新快,关注官方博客、GitHub Release、社区动态,保持知识新鲜度。