DevSecOps:将安全左移到流水线中
将 SAST、DAST、容器扫描和 IaC 安全检查嵌入 CI/CD 流水线,使每次提交都自动执行安全门禁。
DevSecOps:将安全左移到流水线中 是 CoddyKit 上的免费 Security+ Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Security+ Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Security+ Academy 课程共包含 4 节课。
什么是安全左移?
安全左移是指将安全活动更早地集成到软件开发生命周期中,例如开发人员的 IDE、代码审查和 CI/CD 流水线,而不是在部署前把安全测试作为最后一道门禁。传统的安全审查通常发生在开发周期末期,因此修复成本高、耗时长。在开发过程中发现漏洞,其修复成本大约比在发生泄露后于生产环境中发现漏洞低 100 倍。
什么是 DevSecOps
DevSecOps 扩展了 DevOps 模型,将安全作为开发、运维和安全团队在整个 SDLC 中共同承担的责任。其目标是自动化安全测试,使其在每个阶段运行,同时不拖慢交付速度。安全不再是一次性的检查点,而是流水线的一项持续属性。在成熟的 DevSecOps 项目中,开发人员在编写代码后几秒内就能收到安全反馈,而不是在数周后的人工审查之后才收到反馈。
SAST:静态应用安全测试
SAST (Static Application Security Testing) 会分析源代码、字节码或二进制文件,但不会执行应用程序。SAST 工具会扫描可能表明存在漏洞的模式:SQL 拼接、未经清理的输出、使用被禁止的函数、硬编码凭据以及不安全的密码学用法。SAST 会在每次提交时于持续集成流水线中运行,在问题进入 QA 或生产环境之前将其发现。常用工具包括 Semgrep、SonarQube、Checkmarx 和 Veracode。
# Semgrep SAST rule example:
# Detect raw SQL string concatenation (SQL injection risk):
# rules:
# - id: sql-injection-string-concat
# pattern: |
# $QUERY = '...' + $USER_INPUT
# $DB.execute($QUERY)
# message: 'SQL injection risk: use parameterized queries'
# severity: ERROR
# languages: [python]
# Running Semgrep in CI:
# semgrep --config auto --error src/
# -> Fails build if ERROR severity findings foundDAST:动态应用安全测试
DAST (Dynamic Application Security Testing) 通过向正在运行的应用程序发送恶意负载并观察响应来进行测试,从而模拟真实的 Attacker 行为。与 SAST 不同,DAST 能发现仅在运行时出现的漏洞:身份验证缺陷、会话管理问题、业务逻辑错误,以及复杂数据流中的注入漏洞。常用的 DAST 工具包括 OWASP ZAP(免费)、Burp Suite Enterprise 和 Acunetix。DAST 会在流水线中针对预发布环境运行。
# OWASP ZAP automated DAST in CI pipeline:
# docker run -t owasp/zap2docker-stable zap-baseline.py \
# -t https://staging.myapp.com \
# -r zap-report.html \
# -I (do not fail on alerts, report only)
# For blocking builds on high findings:
# zap-full-scan.py -t https://staging.myapp.com \
# -l HIGH (fail if HIGH or CRITICAL alerts found)
# ZAP tests for:
# SQL injection, XSS, CSRF, insecure headers,
# path traversal, broken authentication, open redirects容器镜像扫描
容器镜像由基础镜像构建而成,基础镜像包含 OS 软件包、语言运行时和应用程序依赖项,而这些都可能成为已知漏洞的来源。容器镜像扫描工具会分析镜像层并识别存在漏洞的软件包。Trivy(免费且快速)、Grype(Anchore)和 Clair 都被广泛使用。扫描会作为镜像构建流水线的一部分运行,阻止包含严重 CVE 的镜像被推送到生产环境的镜像仓库。
# Trivy container scan in CI pipeline:
# trivy image --severity HIGH,CRITICAL \
# --exit-code 1 \
# myapp:latest
# Output example:
# library/python:3.9-slim (debian 11.6)
# ===================================
# CVE-2023-1234 CRITICAL openssl 1.1.1n-0+deb11u3 -> 1.1.1t
# CVE-2023-5678 HIGH libssl 1.1.1n -> 1.1.1t
# --exit-code 1 causes pipeline to fail
# on any HIGH or CRITICAL finding -> blocks push to registry基础设施即代码(IaC)安全扫描
IaC 安全扫描会在 Terraform、CloudFormation、Kubernetes 清单和 Helm chart 应用之前,分析其中的安全配置错误。Checkov 和 tfsec 等工具会检查以下违规情况:未启用服务器端加密的 S3 Bucket、允许所有入站流量的安全组、具有通配符权限的 IAM 角色,以及以 root 身份运行的 Kubernetes pod。IaC 扫描可以在云配置错误进入任何环境之前将其阻止。
# Checkov IaC scan example:
# checkov -d ./terraform/ --compact
# Findings example:
# FAILED: CKV_AWS_20: S3 Bucket has an ACL defined which allows public access
# File: /terraform/s3.tf, Line: 15
# FAILED: CKV_AWS_57: S3 Bucket has server access logging disabled
# File: /terraform/s3.tf, Line: 15
# FAILED: CKV_AWS_24: Ensure no security groups allow all ingress traffic
# File: /terraform/sg.tf, Line: 8
# Passed checks: 47, Failed: 3, Skipped: 0流水线中的机密扫描
机密扫描工具会检查源代码和提交记录,以查找意外包含的凭据。truffleHog、GitLeaks 和 detect-secrets 等工具会扫描 git 历史记录和新提交,查找符合 API 密钥、连接字符串、私钥和 JWT 令牌特征的模式。作为提交前钩子时,机密扫描会阻止包含凭据的提交。作为持续集成检查门禁时,它会在每次推送时扫描仓库中的所有文件,并在检测到机密信息后使构建失败。
# GitLeaks pre-commit hook configuration:
# .gitleaks.toml:
# [allowlist]
# description = 'Known false positives'
# paths = ['test/fixtures/fake_key.txt']
# Install as pre-commit hook:
# gitleaks protect --staged
# (scans staged files before commit is created)
# In CI pipeline:
# gitleaks detect --source=. --report-format=json \
# --report-path=gitleaks-report.json
# exit code 1 = secrets found -> blocks pipelineSDLC 中的威胁建模
威胁建模是一种在编写代码之前识别安全需求和设计缺陷的结构化流程。STRIDE 模型(Spoofing、Tampering、Repudiation、Information Disclosure、Denial of Service、Elevation of Privilege)帮助团队根据系统的数据流图,系统地枚举针对系统的威胁。威胁建模会议会在设计阶段举行,产出按优先级排列的威胁清单,用于推动安全需求并指导 SAST/DAST 规则的选择。
# STRIDE threat categories applied to a web login API:
# S - Spoofing: Attacker impersonates valid user
# Control: Strong authentication, MFA
# T - Tampering: Attacker modifies login request
# Control: TLS, HMAC, input validation
# R - Repudiation: User denies actions taken
# Control: Audit logging with tamper-evident storage
# I - Info Disclosure: Password exposed in logs
# Control: Never log sensitive fields
# D - Denial of Service: Flood login endpoint
# Control: Rate limiting, CAPTCHA
# E - Elevation of Privilege: Bypass authorization
# Control: Server-side authorization checks安全门禁:阻断式与建议式
DevSecOps 流水线会将安全检查实现为阻断式门禁(使构建失败、阻止部署)或建议式检查(报告发现的问题,允许部署继续进行)。SAST、容器扫描和机密检测发现的严重和高危问题通常会触发阻断。中危和低危问题则会生成通知或工单,但不会阻断流程。这种平衡可以避免安全问题完全阻止交付,同时确保真正危险的情况无法自动进入生产环境。
DevSecOps 中的安全指标
DevSecOps 项目应使用明确的指标进行衡量。关键指标包括:高危问题的平均修复时间(MTTR)、漏洞密度(随时间变化的每 1,000 行代码对应的问题数)、逃逸率(上线后发现的漏洞相对于上线前发现的漏洞所占的百分比),以及流水线安全门禁通过率。持续跟踪这些指标可以展示项目的有效性,并为是否投入更多工具或培训提供决策依据。
文化:安全是共同责任
DevSecOps 最困难的部分在于文化,而不是技术。安全必须成为每位开发人员的责任,而不只是安全团队的责任。这需要:开发人员安全培训(安全编码意识)、融入开发团队的安全倡导者、漏洞进入生产环境时开展的无责复盘(关注流程改进,而不是惩罚),以及管理层的承诺:当真正的安全风险需要作出取舍时,允许在交付速度上进行调整。没有文化变革,技术只会产生一批开发人员学会忽视的扫描工具。
快速检查
请测试您对本课 CompTIA Security+ (SY0-701) 概念的理解。
课程回顾
本课介绍了以下内容:DevSecOps 将 SAST、DAST、机密扫描、容器扫描和 IaC 扫描作为自动化流水线门禁;阻断高危问题可以防止危险情况进入生产环境;此外,通过左移安全显著降低修复成本,因为这样可以在开发期间而不是部署之后发现漏洞。接下来,我们将探讨设施和数据中心的物理安全控制措施。
常见问题解答
「DevSecOps:将安全左移到流水线中」课时是免费的吗?
是的 — 「DevSecOps:将安全左移到流水线中」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Security+ Academy 课程的其余内容,请升级到 CoddyKit PRO。 Security+ Academy 课程共包含 4 节课。
「DevSecOps:将安全左移到流水线中」这节课中我会学到什么?
将 SAST、DAST、容器扫描和 IaC 安全检查嵌入 CI/CD 流水线,使每次提交都自动执行安全门禁。 你通过在浏览器中直接运行的动手代码来练习 Security+ Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Security+ Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Security+ Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「DevSecOps:将安全左移到流水线中」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Security+ Academy 课中编写并运行代码吗?
能。每节 Security+ Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 输入验证与输出编码
- 安全机密管理与环境变量
- 依赖项安全与软件组成分析
- DevSecOps:将安全左移到流水线中