0Pricing
Security+ Academy · 课时

基础设施即代码安全扫描

使用 IaC 安全工具(Checkov、tfsec)扫描 Terraform、CloudFormation 和 Helm 图表,在配置错误进入生产环境前将其发现。

基础设施即代码安全扫描 是 CoddyKit 上的免费 Security+ Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Security+ Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Security+ Academy 课程共包含 4 节课。

基础设施即代码安全概述

基础设施即代码(IaC)工具(例如 Terraform、AWS CloudFormation、Ansible 和 Helm)允许将基础设施定义在受版本控制的配置文件中。这带来了巨大的好处——可重复性、可审计性和自动化——但也引入了一个严重的安全风险:IaC 文件中的错误配置会大规模生成不安全的基础设施。一个配置错误的 Terraform 模块如果部署到 50 个环境中,就会同时创建 50 个存在漏洞的系统。IaC 安全扫描会在应用配置之前检查配置文件,将安全防护左移到开发人员的工作流程中。

常见的 IaC 错误配置

安全扫描工具会查找现实世界云环境中最常见的 IaC 错误配置:启用了公共访问或未启用静态加密的 S3 存储桶;在敏感端口(22、3389、1433)上配置了 0.0.0.0/0 入站规则的安全组;未加密或可公开访问的数据库;资源或操作使用 * 通配符的 IAM 策略;某个区域中被禁用的 CloudTrail;未启用密钥轮换的 KMS 密钥;以及使用 HTTP 监听器而非 HTTPS 的负载均衡器。这些发现与 CIS AWS Foundations 等云安全基准执行的检查高度相似。

# Dangerous Terraform: public S3 bucket + no encryption
resource 'aws_s3_bucket' 'data' {
  bucket = 'my-data-bucket'
  # Missing: server_side_encryption_configuration
  # Missing: aws_s3_bucket_public_access_block
}

Checkov:面向 IaC 的策略即代码

Checkov(由 Bridgecrew/Prisma Cloud 开发)是一款广受欢迎的开源 IaC 静态分析工具,支持 Terraform、CloudFormation、Kubernetes 清单、Helm 图表和 Dockerfile。它内置了 1,000 多条策略,这些策略对应 CIS 基准、GDPR、SOC 2 和 HIPAA。运行 checkov -d . 会扫描当前目录中的所有 IaC 文件,并生成一份使用颜色标记的报告,其中包含通过、失败和跳过的检查,以及资源路径和修复指导。Checkov 可以集成到持续集成/持续交付流程中,在关键检查失败时阻止部署。

# Install and run Checkov on Terraform files
pip install checkov
checkov -d ./terraform/ --framework terraform

# Fail CI pipeline on HIGH severity findings
checkov -d ./terraform/ --check HIGH --hard-fail-on HIGH

tfsec:Terraform 安全扫描器

tfsec(现已成为 Trivy IaC 扫描功能的一部分)是一款专为 Terraform 打造的安全扫描器,能够深入理解 HCL 语法,因此可以跨模块和变量文件追踪值。与较简单的扫描器不同,tfsec 可以检测跨越多个文件的错误配置——例如,某条安全组规则单独看似安全,但却被附加到了另一个文件中的资源上。tfsec 会生成包含严重性级别(CRITICAL、HIGH、MEDIUM、LOW)、CWE ID 和修复文档直接链接的发现结果,方便开发人员采取行动。

# Install tfsec and scan Terraform directory
brew install tfsec
tfsec ./terraform/ --format json

# Or use Trivy for unified IaC + container scanning
trivy config ./terraform/

IaC 文件中的机密信息

最关键的 IaC 安全问题之一,是在配置文件中硬编码机密信息——例如提交到 Git 的密码、API 密钥、TLS 私钥和数据库连接字符串。由于 IaC 仓库通常由多个团队共享,并存储在版本控制历史中,即使机密信息只提交过一次,也实际上会永久泄露(Git 历史不可变)。Checkov、detect-secrets、git-secrets 和 TruffleHog 等工具可以扫描机密信息模式。正确的修复方式是使用从环境变量或机密存储中获取值的输入变量,绝不要硬编码值。

# Bad: hardcoded password in Terraform
resource 'aws_db_instance' 'main' {
  password = 'supersecret123'  # NEVER DO THIS
}

# Good: read from variable, inject from secrets manager
variable 'db_password' { sensitive = true }
resource 'aws_db_instance' 'main' {
  password = var.db_password
}

策略即代码:OPA 和 Sentinel

策略即代码(PaC)框架允许安全团队以代码形式编写自定义规则,并以一致的方式强制执行这些规则。Open Policy Agent(OPA)结合Conftest后,可以编写 Rego 策略,对任意结构化数据进行验证,例如 Terraform 计划、Kubernetes 清单和 Helm 值。在 Terraform Enterprise 和 Cloud 中内置的 HashiCorp Sentinel,允许强制执行“所有 S3 存储桶都必须启用加密”等策略;如果某项 apply 操作会违反策略,就会在计划阶段将其阻止。这些工具可以将安全要求编码,并与其管理的基础设施一起进行版本控制。

# Example Conftest OPA policy: deny public S3
# deny[msg] {
#   input.resource.aws_s3_bucket[name]
#   input.resource.aws_s3_bucket_public_access_block == null
#   msg := sprintf('Bucket %v lacks public access block', [name])
# }

漂移检测:配置与现实状态

当已部署基础设施的实际状态偏离 IaC 定义时,就会发生配置漂移——这通常是因为有人通过云控制台进行了手动更改。例如,为了“暂时”解除对开发人员的阻塞而手动添加的安全组规则,最终可能成为永久性的安全漏洞。漂移检测工具会持续比较期望状态(IaC 文件)与实际部署状态,并在发现偏差时发出警报。AWS Config、Terraform Cloud 的漂移检测功能以及 CSPM 工具(Prisma Cloud、Wiz)都提供此能力。通过控制台更改引入的安全错误配置,可以在攻击者发现之前被捕获。

# Terraform: detect drift between state and actual cloud resources
terraform plan -refresh-only
# If output shows changes, someone modified infrastructure outside Terraform

不可变基础设施与 GitOps

不可变基础设施意味着服务器和配置绝不会在原位置直接修改;相反,任何更改都会创建新资源(新的 AMI、新的容器镜像),并替换旧资源。将其与GitOps结合后,所有基础设施更改都必须通过 Git 拉取请求,并触发 IaC 扫描和审批流程。这样便能从机制上消除配置漂移:如果某项内容无法手动更改,就不会发生漂移。用于 Kubernetes 的 ArgoCD 和用于 Terraform 的 Atlantis 等工具实现了 GitOps 流程,任何偏差都会触发自动协调或警报。

SAST 与 IaC 扫描的区别

IaC 安全扫描有时会与SAST(静态应用程序安全测试)混淆,但二者针对的是不同的对象。SAST 会分析应用程序源代码(Python、Java、JavaScript),查找 SQL 注入或缓冲区溢出等漏洞。IaC 扫描则分析基础设施配置文件,查找云安全错误配置,不涉及应用程序代码。完整的 DevSecOps 流程应同时包含二者:对应用程序代码执行 SAST,对基础设施文件执行 IaC 扫描。二者都会在部署前于持续集成/持续交付流程中运行。一些统一平台(Snyk IaC、Prisma Cloud)可以在单一工具中结合应用程序扫描和基础设施扫描。

将 IaC 扫描集成到持续集成/持续交付流程中

有效的 IaC 安全扫描必须自动化并强制执行,不能是可选项。典型的持续集成/持续交付集成方式是:每次拉取请求都运行 Checkov 和 tfsec;如果存在 CRITICAL 发现结果,就使流程失败;将发现结果作为拉取请求评论发布,以便开发人员查看;维护一份被抑制发现结果的列表,并记录其理由;每晚针对已部署资源运行一次扫描,以检测漂移。使用 pre-commit 和 Checkov 等工具的提交前钩子,甚至可以在代码进入流程前发现问题。管理误报非常重要——开发人员如果看到太多无关的发现结果,就会开始忽略它们。

# GitHub Actions: IaC security scanning
# - name: Run Checkov IaC Scan
#   uses: bridgecrewio/checkov-action@master
#   with:
#     directory: terraform/
#     framework: terraform
#     soft_fail: false  # fail PR on findings
#     output_format: sarif  # upload to GitHub Security tab

Terraform 状态安全

Terraform 的状态文件(terraform.tfstate)包含所有受管理资源的完整清单,其中通常以明文形式包含数据库密码、TLS 私钥和 IAM 访问密钥 ID 等敏感输出值。绝不能将状态文件提交到 Git。应改用远程后端(使用 DynamoDB 锁定的 AWS S3、Terraform Cloud 或由 GitLab 管理的状态),并启用服务器端加密。必须通过 IAM 严格控制对状态后端的访问,因为任何能够读取状态文件的人,都可以枚举所有基础设施细节,并可能提取其中嵌入的机密信息。

# Secure Terraform remote backend
terraform {
  backend 's3' {
    bucket         = 'my-terraform-state'
    key            = 'prod/terraform.tfstate'
    region         = 'us-east-1'
    encrypt        = true
    kms_key_id     = 'arn:aws:kms:us-east-1:123:key/abc'
    dynamodb_table = 'terraform-state-lock'
  }
}

快速检查

测试您对本课 CompTIA Security+(SY0-701)概念的理解。

课程回顾

本课介绍了:公共 S3 存储桶、开放的安全组和硬编码机密信息等IaC 错误配置,可以在部署前由 Checkov 和 tfsec 等工具自动检测;策略即代码框架(OPA/Conftest、HashiCorp Sentinel)可以将组织自定义的安全要求作为自动化流程门禁强制执行;此外,Terraform 状态文件必须存储在经过加密的远程后端中,并采用严格的访问控制,因为其中可能包含敏感的资源详细信息。接下来,我们将学习 APT 生命周期,以及高级威胁如何在网络内部保持持久存在。

常见问题解答

「基础设施即代码安全扫描」课时是免费的吗?

是的 — 「基础设施即代码安全扫描」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Security+ Academy 课程的其余内容,请升级到 CoddyKit PRO。 Security+ Academy 课程共包含 4 节课。

「基础设施即代码安全扫描」这节课中我会学到什么?

使用 IaC 安全工具(Checkov、tfsec)扫描 Terraform、CloudFormation 和 Helm 图表,在配置错误进入生产环境前将其发现。 你通过在浏览器中直接运行的动手代码来练习 Security+ Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Security+ Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Security+ Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「基础设施即代码安全扫描」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Security+ Academy 课中编写并运行代码吗?

能。每节 Security+ Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 容器安全:镜像加固与运行时保护
  2. Kubernetes 安全:RBAC、网络策略与 Pod 安全
  3. 无服务器与函数安全
  4. 基础设施即代码安全扫描
← 返回 Security+ Academy