Prowler Compliance Mapper CLI:用 AI 将合规框架需求自动映射到 Prowler 安全检查
Prowler Compliance Mapper CLI用 AI 将合规框架需求自动映射到 Prowler 安全检查【免费下载链接】prowlerProwler is the world’s most widely used open-source cloud security platform that automates security and compliance across any cloud environment.项目地址: https://gitcode.com/GitHub_Trending/pr/prowlerCompliance Mapper CLI 是 Prowler 仓库util/compliance/下提供的一款交互式命令行工具它借助 AI 分析自动把合规框架CIS、NIST、PCI DSS、GDPR 等中的每一条需求映射到最贴合的 Prowler 安全检测项并为映射结果输出理由说明。读完本文你将掌握该工具从安装、六步交互式工作流、输入/输出 JSON 规范到错误处理与性能调优的完整实战用法并理解其背后的 Prowler Hub、GitHub 代码拉取与 OpenAI 调用链实现。工具概述Compliance Mapper CLI 的核心目标只有一个把一个合规框架 JSON 文件中的人工需求翻译成一组可执行的 Prowler 安全检查 ID。它不做扫描而是做映射——当你手头有一份新的合规基准比如内部安全策略却不确定每条控制项对应 Prowler 的哪些 check 时这个工具可以代替人工逐条比对。在 Prowler 仓库中它位于 util/compliance/compliance_mapper/ 目录下核心实现为 compliance_mapper.py配套说明文档即本文对应的 README.md。它与仓库内prowler/compliance/下大量真实合规目录如 cis_1.4_aws.json、nist_800_53_revision_5_aws.json配合使用那些 JSON 文件是 Prowler 已经内置的答案而本工具解决的是新框架怎么生成同样格式的答案。功能特性从 README 与源码可以归纳出以下能力交互式 CLI 界面基于 Rich 库实现提供横幅banner、面板Panel、表格Table、进度条Progress等美观的终端交互AI 驱动分析调用 OpenAI 的 chat completions 接口源码中模型名为gpt-5-nano智能挑选最相关的检查项Prowler Hub 集成自动从 Prowler Hub APIhttps://hub.prowler.com/api/check?providers{provider}拉取指定云厂商的最新安全检查列表GitHub 代码集成按prowler/providers/{provider}/services/{service}/{check_id}/{check_id}.py的路径规则从 GitHub 拉取每个 check 的真实 Python 源码供 AI 做更深入的技术判断灵活的字段选择自动分析合规 JSON 结构让你挑选参与 AI 分析的字段如Description、Attributes.Section并发处理拉取 check 代码时使用ThreadPoolExecutor(max_workers10)并发请求显著加快处理速度完整输出生成保留原结构并追加映射结果的新 JSON 文件附带 AI 理由说明可选。环境要求与依赖运行前提Python 3.7网络连接需要访问 Prowler Hub API 与 GitHubOpenAI API Key用于 AI 分析依赖方面工具启动时会自动检测 Rich 是否可用如果缺失会自动通过pip install rich安装见源码中的RICH_AVAILABLE分支逻辑。也可以手动安装pip install rich requests安装安装过程非常简单获取 compliance_mapper.py 文件克隆本仓库后位于util/compliance/compliance_mapper/赋予执行权限可选Linux/macOS 环境chmod x compliance_mapper.py由于脚本在启动时已做依赖自动安装兜底通常无需额外步骤即可直接运行。使用方式交互模式推荐不带任何参数直接运行即可进入完整的六步交互式工作流python compliance_mapper.py命令行参数python compliance_mapper.py [options] Options: -f, --file Path to compliance framework JSON file -o, --output Output file path -h, --help Show help message从源码 main() 可以看出-f/--file目前是部分支持传入文件后只执行加载与校验随后提示File loaded successfully. Use interactive mode for full processing.完整映射流程仍须在交互模式下进行-o/--output参数在交互流程中会作为输出路径的默认建议值出现。交互模式下用户也可随时用CtrlC中断程序会友好提示 Operation cancelled by user.。六步交互式工作流工具遵循固定的 6 步流程对应源码run_interactive()方法 compliance_mapper.py#L824-L863第 1 步加载合规文件启动时提示输入合规框架 JSON 文件的路径随后 load_compliance_file() 会做校验文件必须存在必须是合法 JSON顶层必须包含Framework、Provider、Requirements三个必填字段缺失会明确报错Requirements必须是数组。校验通过后会以面板形式展示框架名、云厂商、版本、需求数量与文件大小KB。推荐的 JSON 结构如下{ Framework: Framework Name, Provider: aws|azure|gcp, Version: 1.0, Requirements: [ { Id: REQ-001, Description: Requirement description, Attributes: [ { Section: Control section, SubSection: Detailed description } ] } ] }这与 Prowler 内置的 legacy 合规文件结构一致——例如 cis_1.4_aws.json 中每个需求包含Id、Description、Checks与Attributes数组内含Section、Profile、AssessmentStatus、Description、RemediationProcedure等字段可见该工具的输入格式是围绕仓库既有合规目录设计的。第 2 步字段选择工具会调用 analyze_json_structure() 分析 JSON 结构只扫描前 10 个需求将内容长度大于 10 个字符的顶层字符串字段以及Attributes数组内的字符串字段收集为候选分析字段嵌套字段以Attributes.前缀标识。这是没有足够文本内容的字段无法入选的机制来源。随后以表格形式展示字段序号、字段名与样例内容提示输入逗号分隔的序号默认1,2。选择结果会经过合法性校验序号必须在范围内并以面板确认。字段将用于拼接发送给 AI 的需求上下文get_field_value()通过点号路径如Attributes.Section取值。第 3 步加载 Prowler 检查项load_prowler_checks() 根据合规文件中的Provider自动转小写向 Prowler Hub 发起请求GET https://hub.prowler.com/api/check?providers{provider}请求超时 30 秒。成功且返回非空列表时每条 check 会被解析为ProwlerCheck数据类包含id、title、description、provider、service、severity、categories随后面板展示成功加载的 check 总数、覆盖的服务数与严重级别分布。若 API 返回异常状态码或空列表会抛出异常并提示 Failed to connect to Prowler Hub。第 4 步补充检查代码add_check_code() 为每个 check 从 GitHub 拉取真实源码URL 规则为https://raw.githubusercontent.com/prowler-cloud/prowler/refs/heads/master/prowler/providers/{provider}/services/{service}/{check_id}/{check_id}.py使用ThreadPoolExecutor(max_workers10)并发提交所有请求as_completed逐个消费结果拉取失败的 check 其 code 置为空字符串而不中断整体流程进度条实时反映完成度。源码中 get_check_code() 直接返回响应文本这段真实代码随后被塞进 AI 提示词帮助模型理解每个 check 的具体实现逻辑——这正是GitHub Code Integration在映射质量上的关键作用。第 5 步处理需求AI 分析这是核心环节包含三个子步骤① OpenAI API 配置setup_openai_api() 优先读取OPENAI_API_KEY环境变量未设置时交互式提示输入密码模式隐藏回显输入skip可跳过 AI 分析。之后 validate_openai_api_key() 会用gpt-5-nano模型发一个最小测试请求max_completion_tokens: 10验证密钥有效性对 401密钥无效、400模型不可用但密钥疑似有效、404模型未找到等状态码做了容忍处理网络异常时默认放行——设计上倾向宁可继续也不要因校验失败卡死流程。② 是否包含 Additional 字段ask_for_additional_field() 询问输出是否包含 AI 生成的理由说明Attributes.Additional。③ AI 分析与进度跟踪process_all_requirements() 遍历所有需求逐条调用 analyze_with_ai()将所选字段的值拼成需求上下文把所有 check 的ID / Title / Service / Severity / Categories / Description / Code拼成候选集文本构造结构化提示词要求模型只返回 JSON启用response_format: {type: json_object}强制 JSON 输出temperature设为 1 以平衡一致性与灵活性格式为{relevant_checks: [...], justification: ...}不包含 Additional 字段时提示词只要求返回relevant_checks对模型返回的 JSON 做健壮解析若直接json.loads失败会用正则\{.*\}提取 JSON 片段重试结果校验模型建议的 check ID 必须存在于本数据集check_id in prowler_checks.keys()才会被采纳有效防止模型幻觉出不存在的检查项容错与重试超时、连接错误会递归重试429限流时等待 30 秒后重试401视为认证失败400直接报错。每次 AI 请求之间强制time.sleep(1)1 秒延迟尊重 API 限流实时进度条显示当前处理的第几个需求及 ID。全部完成后展示汇总面板成功映射需求数、映射百分比、分配 check 总数、平均每个需求的 check 数等统计。第 6 步生成输出文件generate_output_file() 先深拷贝原始合规数据compliance_data.copy()再逐条更新给每个需求写入Checks字段映射结果数组若启用了 Additional 字段则为Attributes数组中的每个对象写入Additional字段AI 理由说明若原需求没有Attributes或它不是非空列表会自动初始化为[{}]。默认输出文件名为{输入文件名去扩展名}_mapped.json交互中可直接回车接受或输入自定义路径。写文件使用json.dump(..., indent2, ensure_asciiFalse)保持中文等非 ASCII 内容可读。完成后面板显示输出路径、文件大小、处理的需求数与更新字段列表。OpenAI API Key 配置三种方式任选其一环境变量推荐export OPENAI_API_KEYyour-api-key-here交互输入运行时按提示输入输入skip跳过 AI 分析。获取密钥在 OpenAI Platform 的 API Keys 页面申请。输入文件格式规范输入合规框架 JSON 顶层必须包含字段类型说明Frameworkstring合规框架名称Providerstring云厂商aws、azure、gcp 等运行时转小写用于 API 查询Requirementsarray合规需求数组每个需求应包含字段类型说明Idstring唯一标识Description等文本字段string参与 AI 分析的文本Attributes.Section等嵌套字段亦可Attributesarray可选属性对象数组需要注意两个隐性约束来自源码参与分析的文本字段内容长度必须大于 10 个字符否则不会进入候选字段列表工具只分析前 10 个需求来归纳可用字段。输出文件格式输出文件保留原始合规框架结构在此基础上为每个需求追加Checks映射到的 Prowler check ID 数组Attributes.Additional可选AI 生成的映射理由说明。README 给出的输出示例{ Id: REQ-001, Description: Ensure encryption at rest, Checks: [s3_bucket_default_encryption, rds_instance_storage_encrypted], Attributes: [ { Section: Data Protection, Additional: Selected checks validate encryption controls: s3_bucket_default_encryption ensures S3 buckets have default encryption enabled, and rds_instance_storage_encrypted verifies RDS instances use encrypted storage. } ] }错误处理机制工具内置多层容错均可从源码对应分支确认文件校验文件不存在、JSON 语法错误、缺少必填字段Framework/Provider/Requirements、Requirements非数组都会给出明确的中文风格错误提示并返回失败交互流程会重新询问文件路径API 连通性Prowler Hub 连接失败、非 200 状态码、空结果均会捕获并提示限流处理OpenAI 返回429时自动等待 30 秒重试网络问题请求超时与连接错误触发递归重试无效响应AI 返回非 JSON 时先尝试正则提取再失败则优雅降级建议的 check ID 不在数据集中会被过滤用户中断KeyboardInterrupt被捕获提示操作已取消并正常退出兜底异常main()中捕获所有未预期异常并输出 traceback 调试信息。性能设计并发处理check 代码拉取使用ThreadPoolExecutor(max_workers10)并行发起 10 个并发请求进度跟踪加载 checks、拉取代码、AI 分析三个阶段均有实时进度条限流策略AI 请求间固定 1 秒延迟规避速率限制数据结构checks 以字典key 为 check ID存储O(1)查重/过滤减少冗余处理。故障排查常见问题No suitable fields found确认需求的文本字段内容足够充实检查字段值是否长于 10 个字符这是analyze_json_structure()的硬性门槛。Failed to connect to Prowler Hub检查网络连接确认 Prowler Hub APIhttps://hub.prowler.com/api/check可访问确认Provider取值合法aws、azure、gcp。Authentication failed核对 OpenAI API Key 是否正确检查密钥余额是否充足确认密钥有权限访问所需模型。API request failed检查网络连通性确认 API 端点可访问考虑限流因素稍后重试。调试建议确认文件路径正确且可读核对 JSON 结构与本文档给出的规范一致确保合规数据包含全部必填字段交互模式遇到未预期异常时会打印完整 traceback可据此定位问题。完整示例# 交互模式 python compliance_mapper.py # 加载指定文件仅加载校验完整处理仍需进入交互模式 python compliance_mapper.py -f ./frameworks/nist_csf.json # 指定文件与输出位置 python compliance_mapper.py -f ./frameworks/nist_csf.json -o ./output/mapped_nist.json与 Prowler 合规生态的衔接这个工具不是孤立脚本它与仓库的合规体系深度咬合输入格式对齐其要求的 JSON 结构与prowler/compliance/{provider}/下的 legacy 合规文件完全同构参见 cis_1.4_aws.json 等真实文件check 命名对齐工具生成的Checks数组直接使用 Prowler check ID如s3_bucket_default_encryption与prowler/providers/{provider}/services/目录下各 check 的{check_id}.py文件名一一对应配套转换工具同目录util/compliance/generate_json_from_csv/下提供了从 CSV 生成合规 JSON 的脚本如 generate_compliance_json_from_csv_for_cis15.py可先由 CSV 得到合规 JSON再用 Compliance Mapper 借助 AI 补充或校验 check 映射形成上游基准 → 合规 JSON → check 映射的完整生产链路。换言之当需要为一份尚未内置的合规基准生成带映射的 Prowler 合规文件时本工具可以作为半自动化的辅助手段人工校验 AI 给出的映射结果后将生成的 JSON 放入prowler/compliance/对应目录即可被 Prowler 加载使用。局限与使用前提工具的映射质量依赖 OpenAI 模型能力与 check 元数据/代码的完整性AI 结果必须人工复核不应直接作为审计结论-f参数目前只支持加载校验半程处理完整映射必须走交互模式全程依赖外网Prowler Hub、GitHub、OpenAI离线环境无法使用示例中的模型名gpt-5-nano以当前仓库源码为准实际可用模型取决于你的 OpenAI 账户授权范围工具设计面向映射生成而非映射审计如需审查已有映射的正确性可参考仓库内 skills/prowler-compliance/SKILL.md 描述的审计工作流。【免费下载链接】prowlerProwler is the world’s most widely used open-source cloud security platform that automates security and compliance across any cloud environment.项目地址: https://gitcode.com/GitHub_Trending/pr/prowler创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考