implementing-infrastructure-as-code-security-scanning
本技能涵盖使用 Checkov、tfsec 和 KICS 等工具为基础设施即代码(IaC)模板实施自动化安全扫描。 内容包括在部署前检测 Terraform、CloudFormation、Kubernetes 清单和 Helm charts 中的配置错误, 建立基于策略的治理,以及将 IaC 扫描集成到 CI/CD 管道中以防止不安全的云资源配置。
Best use case
implementing-infrastructure-as-code-security-scanning is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
本技能涵盖使用 Checkov、tfsec 和 KICS 等工具为基础设施即代码(IaC)模板实施自动化安全扫描。 内容包括在部署前检测 Terraform、CloudFormation、Kubernetes 清单和 Helm charts 中的配置错误, 建立基于策略的治理,以及将 IaC 扫描集成到 CI/CD 管道中以防止不安全的云资源配置。
Teams using implementing-infrastructure-as-code-security-scanning should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/implementing-infrastructure-as-code-security-scanning/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How implementing-infrastructure-as-code-security-scanning Compares
| Feature / Agent | implementing-infrastructure-as-code-security-scanning | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
本技能涵盖使用 Checkov、tfsec 和 KICS 等工具为基础设施即代码(IaC)模板实施自动化安全扫描。 内容包括在部署前检测 Terraform、CloudFormation、Kubernetes 清单和 Helm charts 中的配置错误, 建立基于策略的治理,以及将 IaC 扫描集成到 CI/CD 管道中以防止不安全的云资源配置。
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# 实施基础设施即代码安全扫描
## 使用场景
- 使用 Terraform、CloudFormation 或 Pulumi 配置云基础设施并需要自动化安全验证时
- 合规框架要求在部署前提供基础设施配置审查证据时
- 防止常见的云配置错误,如公开的 S3 存储桶、开放的安全组或未加密的存储时
- 建立在 pull request 中阻止不安全基础设施变更的护栏时
- 管理多云环境并需要在 AWS、Azure 和 GCP 之间保持一致的安全策略时
**不适用于**扫描应用源代码(使用 SAST)、监控已部署基础设施的配置漂移(使用云安全态势管理工具)或容器镜像漏洞扫描(使用 Trivy)。
## 前置条件
- 已安装 Checkov v3.x(`pip install checkov`)或已安装 tfsec
- 仓库中包含 Terraform、CloudFormation 或 Kubernetes IaC 文件
- 可访问 IaC 目录的 CI/CD 管道
- Bridgecrew API 密钥(可选,用于 Checkov 平台集成)
## 操作流程
### 步骤 1:对 Terraform 文件运行 Checkov
```bash
# 扫描目录中的所有 Terraform 文件
checkov -d ./terraform/ --framework terraform --output cli --output json --output-file-path ./results
# 扫描特定文件
checkov -f main.tf --output json
# 扫描 Terraform 计划(对动态值更准确)
terraform init && terraform plan -out=tfplan
terraform show -json tfplan > tfplan.json
checkov -f tfplan.json --framework terraform_plan
# 仅运行特定检查
checkov -d ./terraform/ --check CKV_AWS_18,CKV_AWS_19,CKV_AWS_20
# 跳过特定检查
checkov -d ./terraform/ --skip-check CKV_AWS_145,CKV2_AWS_6
```
### 步骤 2:将 IaC 扫描集成到 GitHub Actions
```yaml
# .github/workflows/iac-security.yml
name: IaC Security Scan
on:
pull_request:
paths:
- 'terraform/**'
- 'cloudformation/**'
- 'k8s/**'
jobs:
checkov:
name: Checkov IaC Scan
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Checkov
uses: bridgecrewio/checkov-action@v12
with:
directory: terraform/
framework: terraform
output_format: cli,sarif
output_file_path: console,checkov.sarif
soft_fail: false
skip_check: CKV_AWS_145
- name: Upload SARIF
if: always()
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: checkov.sarif
category: checkov-iac
tfsec:
name: tfsec Scan
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run tfsec
uses: aquasecurity/tfsec-action@v1.0.3
with:
working_directory: terraform/
sarif_file: tfsec.sarif
soft_fail: false
- name: Upload SARIF
if: always()
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: tfsec.sarif
category: tfsec
```
### 步骤 3:创建自定义 Checkov 策略
```python
# custom_checks/s3_versioning.py
from checkov.terraform.checks.resource.base_resource_check import BaseResourceCheck
from checkov.common.models.enums import CheckResult, CheckCategories
class S3BucketVersioning(BaseResourceCheck):
def __init__(self):
name = "Ensure S3 bucket has versioning enabled"
id = "CKV_CUSTOM_1"
supported_resources = ["aws_s3_bucket"]
categories = [CheckCategories.GENERAL_SECURITY]
super().__init__(name=name, id=id, categories=categories,
supported_resources=supported_resources)
def scan_resource_conf(self, conf):
versioning = conf.get("versioning", [{}])
if isinstance(versioning, list) and len(versioning) > 0:
if versioning[0].get("enabled", [False])[0]:
return CheckResult.PASSED
return CheckResult.FAILED
check = S3BucketVersioning()
```
### 步骤 4:配置基线和抑制
```yaml
# .checkov.yaml
branch: main
compact: true
directory:
- terraform/
- cloudformation/
framework:
- terraform
- cloudformation
- kubernetes
output:
- cli
- sarif
skip-check:
- CKV_AWS_145 # 使用 CMK 的 S3 默认加密(SSE-S3 可接受)
- CKV2_AWS_6 # S3 存储桶请求日志记录(由 CloudTrail 处理)
soft-fail: false
```
### 步骤 5:扫描 Kubernetes 清单和 Helm Charts
```bash
# 扫描 Kubernetes 清单
checkov -d ./k8s/ --framework kubernetes
# 扫描 Helm charts(先渲染模板)
checkov -d ./charts/myapp/ --framework helm
# 使用 KICS 扫描(Keeping Infrastructure as Code Secure)
docker run -v $(pwd)/k8s:/path checkmarx/kics:latest scan \
--path /path \
--output-path /path/results \
--type Kubernetes \
--report-formats json,sarif
```
## 关键概念
| 术语 | 定义 |
|------|------|
| IaC 扫描 | 对基础设施代码模板进行自动化分析,以在部署前检测安全配置错误 |
| 策略即代码 | 以可执行代码定义的安全策略,可进行版本控制、测试和自动化执行 |
| CKV 检查 ID | Checkov 每个安全检查的唯一标识符(例如,CKV_AWS_18 表示 S3 公共访问) |
| Terraform 计划扫描 | 扫描已解析的 Terraform 计划 JSON,包含计算值和模块展开 |
| 基于图的扫描 | Checkov 分析资源之间关系的能力,而非仅单个资源配置 |
| 配置漂移检测 | 识别 IaC 定义与实际已部署基础设施状态之间的差异 |
| 自定义策略 | 用 Python 或 YAML 编写的组织特定安全检查,用于执行内部标准 |
## 工具与系统
- **Checkov**:Bridgecrew 的开源 IaC 扫描器,拥有 2500+ 内置策略,涵盖主要云服务商
- **tfsec**:Aqua Security 的 Terraform 专注静态分析工具,深度理解 HCL
- **KICS**:Checkmarx 的开源 IaC 扫描器,支持 15+ IaC 框架
- **Terrascan**:支持 OPA Rego 策略自定义的 IaC 扫描器
- **Snyk IaC**:与 Snyk 平台集成的商业 IaC 扫描器
## 常见场景
### 场景:防止 Terraform 中的公共 S3 存储桶
**背景**:某开发团队反复创建没有适当访问控制的 S3 存储桶。最近一次事件通过公共存储桶暴露了客户数据。
**方法**:
1. 在 CI/CD 管道中为所有 Terraform 变更启用 Checkov
2. 强制执行 CKV_AWS_18(无公共读 ACL)、CKV_AWS_19(加密)、CKV_AWS_20(未禁用公共访问块)
3. 创建自定义策略,要求每个 S3 存储桶都有 `aws_s3_bucket_public_access_block` 资源
4. 设置 `soft_fail: false` 以在 S3 安全检查失败时阻止 PR 合并
5. 提供带有安全默认值的 Terraform 模块供团队复用
**注意事项**:仅扫描 `.tf` 文件会遗漏动态计算值。使用 Terraform 计划扫描可获得更高准确性。Checkov 的资源关系检查(CKV2 前缀)需要图分析模式。
## 输出格式
```
IaC 安全扫描报告
==========================
框架:Terraform
目录:terraform/
扫描日期:2026-02-23
Checkov 结果:
通过:187
失败:12
跳过:3
未知:0
失败检查:
CKV_AWS_18 [高危] S3 存储桶具有公共读 ACL
资源:aws_s3_bucket.data_lake
文件:terraform/storage.tf:15-28
CKV_AWS_24 [高危] CloudWatch 日志组未加密
资源:aws_cloudwatch_log_group.app
文件:terraform/monitoring.tf:3-8
CKV_AWS_79 [中危] 已启用实例元数据服务 v1
资源:aws_instance.web
文件:terraform/compute.tf:12-30
质量门禁:失败(2 个高危发现)
```Related Skills
triaging-security-incident
使用 NIST SP 800-61r3 和 SANS PICERL 框架对安全事件进行初始分类,确定严重性、范围和所需响应行动。 按类型对事件分类,根据业务影响分配优先级,并路由到相应的响应团队。适用于事件分类、 安全告警分类、严重性评估、事件优先级排序或初始事件分析等请求场景。
triaging-security-incident-with-ir-playbook
使用结构化 IR Playbook 对安全事件进行分类和优先排序,确定严重性、分配响应团队并启动适当的响应程序。
triaging-security-alerts-in-splunk
在 Splunk Enterprise Security 中对安全告警进行分类,通过 SPL 查询和事件审查(Incident Review) 仪表板对重要事件进行严重性分类、调查、关联相关遥测并做出升级或关闭决策。 适用于 SOC 分析师需要处理关联搜索产生的告警队列、确定调查优先级, 或需要为交接给二/三级分析师记录分类决策时。
tracking-threat-actor-infrastructure
威胁行为者基础设施追踪涉及使用被动 DNS、证书透明度日志、Shodan/Censys 扫描、WHOIS 分析和网络指纹技术,对对手控制的 C2 服务器、钓鱼域名和暂存服务器等资产进行监控、映射和持续追踪
testing-websocket-api-security
测试 WebSocket API 实现中的安全漏洞,包括 WebSocket 升级时缺少身份认证、跨站 WebSocket 劫持(Cross-Site WebSocket Hijacking,CSWSH)、通过 WebSocket 消息进行的注入攻击、输入校验不足、通过消息泛洪实施拒绝服务,以及通过 WebSocket 帧造成的信息泄露。测试人员使用 Burp Suite 拦截 WebSocket 握手和消息,构造恶意 payload,并测试 WebSocket 通道上的授权绕过。适用于 WebSocket 安全测试、WS 渗透测试、CSWSH 攻击或实时 API 安全评估相关请求。
testing-jwt-token-security
在安全测试活动中,评估 JSON Web Token(JWT)实现中的密码学弱点、算法混淆攻击和授权绕过漏洞。
testing-api-security-with-owasp-top-10
使用自动化和手工测试技术,针对 OWASP API 安全 Top 10 风险对 REST 和 GraphQL API 端点进行系统性评估。
scanning-network-with-nmap-advanced
使用 Nmap 的脚本引擎、时序控制、规避技术和输出解析,对授权目标网络执行高级网络侦察, 发现主机、枚举服务、检测漏洞并识别操作系统。
scanning-kubernetes-manifests-with-kubesec
使用 Kubesec 对 Kubernetes 资源清单执行安全风险分析,识别错误配置、权限提升风险以及与安全最佳实践的偏差。
scanning-infrastructure-with-nessus
Tenable Nessus 是业界领先的漏洞扫描器,用于识别网络基础设施(包括服务器、工作站、网络设备和操作系统)中的安全弱点。
scanning-docker-images-with-trivy
Trivy 是 Aqua Security 开源的综合性漏洞扫描器,用于检测容器镜像中操作系统软件包、语言特定依赖项的漏洞、错误配置、密钥和许可证违规,并集成到 CI/CD 流水线,支持 SARIF、CycloneDX 和 SPDX 等多种输出格式。
scanning-containers-with-trivy-in-cicd
本技能涵盖将 Aqua Security 的 Trivy 扫描器集成到 CI/CD 流水线中,用于全面的容器镜像漏洞检测。包括扫描 Docker 镜像中的操作系统包和应用依赖 CVE、检测 Dockerfile 中的错误配置、扫描文件系统和 Git 仓库,以及建立基于严重性的质量门禁以阻止有漏洞的镜像部署。