ekaumoh/devsecops-azure-pipeline
GitHub: ekaumoh/devsecops-azure-pipeline
一个在 Azure 上实现左移安全扫描与自动阻断的 DevSecOps 流水线示例。
Stars: 1 | Forks: 0
# DevSecOps Azure Pipeline
一个左移安全流水线,在资源部署到 Azure 之前自动扫描 Terraform 基础设施代码中的错误配置。
## 功能说明
对 `main` 分支的每一次拉取请求都会触发自动的 Checkov 安全扫描。如果 Terraform 代码违反安全策略,流水线会失败并阻止合并。实现安全代码合并,不安全代码无法合并。
## 架构
开发者推送代码 → GitHub Actions 触发 Checkov 扫描 → Checkov 依据 CIS/NIST 控制项验证 Terraform → 通过:允许合并,Terraform 部署到 Azure | 不通过:合并被阻止,开发者必须先修复问题
## 强制执行的安全控制
| 控制项 | 实现方式 |
|---|---|
| 禁止公共 Blob 访问 | allow_nested_items_to_be_public = false |
| 仅 HTTPS 访问 | https_traffic_only_enabled = true |
| 最低 TLS 1.2 | min_tls_version = "TLS1_2" |
| 禁用公共网络访问 | public_network_access_enabled = false |
| 禁用共享密钥认证 | shared_access_key_enabled = false |
| SAS 令牌过期策略 | 1 小时过期窗口 |
| Blob 软删除 | 7 天保留策略 |
| 队列服务日志 | 完整的读/写/删除审计日志 |
## 技术栈
- **Terraform** — 用于 Azure 资源编排的基础设施即代码
- **Checkov** — 静态 IaC 安全扫描器(CIS/NIST 基准检查)
- **GitHub Actions** — CI/CD 流水线自动化
- **Azure** — 目标云环境(存储账户、资源组)
- **分支保护规则** — 对 main 分支强制合并检查
## 流水线实际运行
本仓库中的 `test/insecure-config` 分支演示了安全门的工作机制 — 一个启用了公共 Blob 访问的存储账户无法通过 Checkov 扫描,因此被阻止合并到 `main`。
## 项目状态
- [x] 具备安全控制的 Terraform IaC
- [x] 本地 Checkov 扫描(11 项通过,3 项故意软失败)
- [x] 推送与拉取请求触发的 GitHub Actions 流水线
- [x] 强制执行 Checkov 通过的分支保护
- [ ] 通过服务主体进行 Azure 部署(进行中)
- [ ] Microsoft Defender for Cloud 集成
- [ ] Microsoft Sentinel 分析规则
标签:Anthropic, Azure, Blob存储, CIS基准, DevSecOps, EC2, ECS, GitHub Actions, HTTPS, IaC, NIST, PR安全门禁, SAS令牌, Shift-left安全, Streamlit, Terraform, TLS1.2, 上游代理, 代码即安全, 公有云安全, 共享密钥禁用, 分支保护, 合并策略, 存储账户安全, 安全合规, 安全扫描, 安全管道, 时序注入, 最小权限, 网络代理, 网络安全, 自动化安全治理, 自动笔记, 访问控制, 软删除, 错误基检测, 隐私保护, 静态代码分析