第七部分:DevSecOps —— 安全内嵌
将安全实践嵌入 DevOps 流水线,实现“安全左移”(Shift Left)。
一、SAST(静态应用安全测试)
在编码阶段扫描源代码漏洞。工具:SonarQube、Checkmarx、Semgrep。
# .github/workflows/sast.yml
- name: Run Semgrep
run: |
docker run --rm -v ${PWD}:/src returntocorp/semgrep semgrep scan --config auto --error
二、DAST(动态应用安全测试)
对运行中的应用进行黑盒扫描。工具:OWASP ZAP、Burp Suite。
# 使用 ZAP 容器扫描 staging 环境
docker run -v $(pwd):/zap/wrk -t ghcr.io/zaproxy/zaproxy:stable \
zap-full-scan.py -t https://staging.example.com \
-g gen.conf -r zap_report.html
三、镜像安全扫描
在 CI 阶段扫描容器镜像中的已知漏洞(CVE)。工具:Trivy、Clair、Grype。
# 在 Docker 构建阶段后扫描
trivy image --severity CRITICAL,HIGH --exit-code 1 myapp:latest
四、运行时安全:Falco
Falco 通过内核态规则检测 ahfrkbyio.cn 异常行为(如反弹 shell、挂载敏感路径)。
# Falco 规则示例:检测交互式 shell 启动
- rule: Launch Interactive Shell in Container
desc: Detect an interactive shell in a container
condition: >
spawned_process and container.id != host
and proc.name in (shell_binaries)
and proc.args contains "-i"
output: "Interactive shell opened in container (user=%user.name container=%container.id shell=%proc.name)"
priority: WARNING
五、密钥管理
禁止在代码仓库中硬编码密码、Token。使用 HashiCorp Vault 或云 KMS。
// 使用 Vault 动态获取数据库密码
@Configuration
public class VaultConfig {
@Bean
public DataSource dataSource(VaultTemplate vaultTemplate) {
VaultResponseSupport<Map<String, String>> response =
vaultTemplate.read("database/creds/my-role");
String username = response.getData().get("username");
String password = response.getData().get("password");
// 构建 DataSource
}
}
CI 流水线中从 Vault 获取凭证:
export DB_PASSWORD=$(vault kv get -field=password secret/db)
第八部分:监控告警与 On-Call 自动化
一、告警管理最佳实践
减少告警疲劳:仅对需要人工干预的场景发告警。
使用告警路由:Alertmanager 根据标签分派到不同接收方(Slack、PagerDuty、邮件)。
# Alertmanager 配置
route:
group_by: ['alertname', 'cluster']
group_wait: 10s
group_interval: 10s
repeat_interval: 12h
receiver: 'pagerduty-prod'
routes:
- match:
severity: critical
receiver: pagerduty-prod
continue: false
- match:
severity: warning
receiver: slack-warnings
receivers:
- name: 'pagerduty-prod'
pagerduty_configs:
- service_key: <PD-TOKEN>
- name: 'slack-warnings'
slack_configs:
- channel: '#alerts'
title: 'Warning Alert'
二、自动修复(Auto-healing)
结合 Kubernetes 的健康探针和 Prometheus 告警,实现自动重启、水平伸缩。
Horizontal Pod Autoscaler (HPA):
kubectl autoscale deployment order-service --cpu-percent=70 --min=3 --max=10
Prometheus 自定义指标 HPA:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: order-service-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: order-service
metrics:
- type: Pods
pods:
metric:
name: http_requests_per_second
target:
type: AverageValue
averageValue: 500
第九部分:DevOps 度量与成熟度模型
一、 DORA 核心指标
部署频率(Deployment Frequency):每天/每小时部署次数。
变更前置时间(Lead Time for Changes):代码提交到部署上线的时长。
服务恢复时间(Time to Restore Service):故障发生到恢复的时间。
变更失败率(Change Failure Rate):部署导致服务降级的比例。
二、度量 Pipeline 收集示例
使用 dora-metrics 工具从 CI/CD 系统计算指标。
# 通过 GitHub API 获取部署事件
gh api repos/org/repo/deployments --paginate | jq '.[].created_at'
将指标仪表化到 Grafana:
-- 部署频率(按周)
SELECT
DATE_TRUNC('week', created_at) AS week,
COUNT(*) as deployment_count
FROM deployments
GROUP BY week
ORDER BY week DESC;