isaaaac-2/Secure-Azure-App-Starter

GitHub: isaaaac-2/Secure-Azure-App-Starter

一个集成 Checkov 和 Trivy 安全扫描的 Azure Terraform 模板,在 CI/CD 流水线中自动拦截配置错误、机密泄露和已知 CVE。

Stars: 1 | Forks: 0

# 安全 Azure App Starter 一个 DevSecOps 就绪的 Azure 基础设施模板,具备自动化安全扫描和 CI/CD 部署功能。它是一个 CI/CD 门禁,在每次推送时运行 Checkov 和 Trivy,在带有策略违规、暴露的机密或已知 CVE 的提交到达基础设施之前将其拦截。 ## 我在解决什么问题? Azure 环境经常会积压未经验证的 Terraform 配置和未经扫描的机密,这些东西会混过人工审查。这些漏洞会在任何人注意到之前成为攻击面。 ## 为什么这很重要? 在提交时捕获错误配置可以防止导致真实数据泄露的那种配置漂移。今天拦截一次提交,明天就会少一次事件响应。 ## 部署内容 - Azure VNet 及其隔离的子网(northeurope) - 仅强制执行 HTTPS 入站流量的网络安全组(NSG) - 启用软删除、清除保护且无公共网络访问的 Azure Key Vault - 采用 GRS 复制、TLS 1.2、blob 版本控制、队列日志记录和 SAS 过期策略的 Azure 存储账户 - 在每次推送/PR 时执行 Checkov + Trivy 安全扫描的 GitHub Actions 流水线 - 使用服务主体认证的自动化 Terraform 部署工作流 - 要求在合并前必须通过安全扫描的分支保护规则 ## 技术栈 - Terraform(IaC) - GitHub Actions(CI/CD) - Checkov(Terraform 策略扫描) - Trivy(配置错误检测) - Azure(VNet、NSG、Subnet、Key Vault、Storage Account) ## 工作原理 1. 推送到 main 分支会触发安全扫描(Checkov + Trivy) 2. 如果扫描通过,Terraform plan + apply 会将基础设施部署到 Azure 3. NSG 默认强制执行最小权限网络访问 4. Key Vault 存储机密,具有清除保护且无公共访问权限 5. 存储账户使用平台管理的密钥对静态数据进行加密,强制执行 TLS 1.2,并记录所有队列操作 6. 如果安全扫描失败,分支保护会阻止合并 ## 架构 ``` Push to main │ ▼ ┌─────────────────────────────┐ │ GitHub Actions │ ├─────────────────────────────┤ │ • Checkov │ │ • Trivy │ │ Security & IaC Scanning │ └──────────────┬──────────────┘ │ Pass Security Checks │ ▼ ┌─────────────────────────────┐ │ Terraform │ │ Init → Plan → Apply │ └──────────────┬──────────────┘ │ ▼ ┌──────────────────────────────────────────────────────────────┐ │ Azure (North Europe) │ │ │ │ Resource Group │ │ ├── VNet (10.0.0.0/16) │ │ │ └── Subnet (10.0.1.0/24) │ │ │ └── NSG │ │ │ ✓ Allow HTTPS (TCP 443) │ │ │ ✗ Deny all other inbound traffic │ │ │ │ │ ├── Key Vault (secure-app-kv) │ │ │ ✓ Soft Delete (7 days) │ │ │ ✓ Purge Protection Enabled │ │ │ ✗ Public Network Access Disabled │ │ │ ✓ Default Network ACL: Deny │ │ │ │ │ └── Storage Account (secureappsa) │ │ ✓ GRS Replication │ │ ✓ TLS 1.2 Minimum │ │ ✓ Blob Versioning + Soft Delete (7 days) │ │ ✓ Queue Logging (read/write/delete) │ │ ✓ SAS Expiration Policy (30 days) │ │ ✓ Infrastructure Encryption Enabled │ │ ✗ Public Network Access Disabled │ └──────────────────────────────────────────────────────────────┘ ``` ## 已知的权衡 - *共享密钥认证 (CKV2_AZURE_40):* 启用了存储账户密钥访问以允许 Terraform 预配。在生产环境中,应在部署后禁用此功能并专门使用 Azure AD 认证。网络 ACL 和禁用的公共访问可缓解暴露风险。 - *私有端点 (CKV2_AZURE_32, CKV2_AZURE_33):* Key Vault 和存储账户使用禁用的公共访问 + 网络 ACL,而不是私有端点。这对于作品集展示已经足够;生产部署应使用 Private Link。 - *客户管理的密钥 (CKV2_AZURE_1):* 存储使用平台管理的加密。CMK 会增加复杂性(Key Vault + 托管标识 + 密钥轮换),建议在受监管的工作负载中使用。
标签:Azure, DevSecOps, ECS, Terraform, 上游代理, 安全扫描, 安全门禁, 时序注入