关于 iso-27001-evidence-collection
为 ISO 27001:2022 和 SOC 2 审计提供证据收集流程与命令参考,面向负责合规和审计准备的团队。它按控制项组织证据,并协助检查完整性、时效性和命名规范。
主要功能
- 01提供按控制项收集证据的流程
- 02涵盖云平台、GitHub 和终端命令参考
- 03说明证据时效要求与命名规范
- 04检查证据完整性、格式和覆盖范围
- 05生成映射控制项的证据索引
适用场景
- 01准备外部审计所需的证据包
- 02定期更新过期或临近过期的证据
- 03验证整改结果并留存证据
- 04为新纳入范围的系统建立基线
MCP 相关
可选连接 Internal ISO Audit MCP 服务,以查询控制项指导、证据要求和相关控制。没有该服务时,也可使用本地合规数据或内置清单。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ open-agreements/ open-agreements --skill iso-27001-evidence-collection安装后在 Claude Code 中输入/iso-27001-evidence-collection确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
CONNECTORS.mdrules/api-exports.mdevidence-types.mdscreenshot-guide.md详细介绍
ISO 27001 证据收集
系统化收集 ISO 27001:2022 和 SOC 2 的审计证据。此技能提供以 API 为先的证据收集命令,按控制措施整理证据,并在审计员审核前验证完整性。
安全模型
- 不执行脚本 — 此技能仅包含 Markdown 格式的流程指南
- 无需密钥 — 可使用参考核对清单;CLI 命令使用已有的本地凭据
- 证据保留在本地 — 所有输出都写入本地文件系统
- 不涉及知识产权 — 引用 NIST SP 800-53(公有领域内容);ISO 控制措施仅按章节 ID 引用
适用场景
在以下情况下启用此技能:
- 为外部审计准备证据包 — 在审计员到场前 2-4 周
- 季度证据更新 — 更新超过审计窗口期限的证据
- 修复后 — 收集证明发现的问题已修复的证据
- 新系统接入 — 为新纳入范围的系统建立基线证据
- 证据缺口分析 — 在审计前找出缺失项
请勿用于:
- 执行内部审计本身 — 使用
iso-27001-internal-audit - 仅进行 SOC 2 就绪情况评估 — 使用
soc2-readiness - 解读审计发现 — 使用内部审计技能
核心概念
证据层级(从优到劣)
| 排名 | 类型 | 示例 | 优势 |
|---|---|---|---|
| 1 | API 导出(JSON/CSV) | gcloud iam service-accounts list --format=json | 带时间戳、防篡改、可复现 |
| 2 | 系统生成的报告 | 供应商提供的 SOC 2 报告、SIEM 导出 | 来源权威,包含元数据 |
| 3 | 配置导出 | Terraform 状态、策略 JSON | 显示预期状态,并受版本控制 |
| 4 | 带系统时钟的屏幕截图 | screencapture -x ~/evidence/... | 可视化证明,但更难验证 |
| 5 | 人工证明 | 责任人签署的声明 | 最后手段,需要佐证 |
证据时效要求
| 证据类型 | 最大时效 | 更新频率 |
|---|---|---|
| 访问列表 | 90 天 | 每季度 |
| 漏洞扫描 | 30 天 | 每月 |
| 配置导出 | 90 天 | 每季度 |
| 培训记录 | 12 个月 | 每年 |
| 渗透测试 | 12 个月 | 每年 |
| 策略文档 | 12 个月 | 每年审查 |
| 事件记录 | 审计期间 | 持续更新 |
| 风险评估 | 12 个月 | 每年及变更时 |
证据命名规范
{control_id}_{evidence_type}_{YYYY-MM-DD}.{ext}
示例:
A.5.15_user-access-list_2026-02-28.jsonA.8.8_vulnerability-scan_2026-02-28.csvA.8.13_backup-test-results_2026-02-28.pdf
分步工作流
步骤 1:识别证据缺口
确定缺失或已过时的证据。
# If Internal ISO Audit MCP server is available:
search_guidance(query="evidence", domain="organizational") # Find controls needing evidence
list_controls(domain="technological") # List all tech controls to assess gaps
get_control_guidance(control_id="A.5.15") # Get evidence requirements for a specific control
# If reading local compliance data:
# Check compliance/evidence/*.md files for upload_status != "OK"
# Check renewal_next dates for upcoming expirations
步骤 2:确定收集优先级
按以下顺序收集证据:
- 关键级控制措施缺失的证据 — 阻碍审计
- 超过更新期限的过时证据 — 审计员会拒绝
- 相关级控制措施的证据 — 预期需要,但不会阻碍审计
- 核对清单级证据 — 策略和证明
步骤 3:按平台收集
按平台分组运行证据收集命令,以尽量减少上下文切换。
GitHub 证据
# Org settings: MFA requirement, default permissions
gh api orgs/{org} | jq '{
two_factor_requirement_enabled,
default_repository_permission,
members_can_create_public_repositories
}' > evidence/A.5.17_github-org-mfa_$(date +%Y-%m-%d).json
# Branch protection on production repos
for repo in $(gh repo list {org} --json name -q '.[].name'); do
gh api repos/{org}/$repo/branches/main/protection 2>/dev/null | \
jq '{repo: "'$repo'", protection: .}' >> evidence/A.8.32_branch-protection_$(date +%Y-%m-%d).json
done
# Recent merged PRs (change management evidence)
gh pr list --state merged --limit 50 --json number,title,author,reviewDecision,mergedAt,mergedBy \
> evidence/A.8.32_change-records_$(date +%Y-%m-%d).json
# Dependabot alerts (vulnerability management)
gh api repos/{org}/{repo}/dependabot/alerts?state=open \
> evidence/A.8.8_dependabot-alerts_$(date +%Y-%m-%d).json
# Secret scanning alerts
gh api orgs/{org}/secret-scanning/alerts --paginate \
> evidence/A.8.24_secret-scanning_$(date +%Y-%m-%d).json
# Audit log
gh api orgs/{org}/audit-log?per_page=100 \
> evidence/A.8.15_github-audit-log_$(date +%Y-%m-%d).json
GCP 证据
# IAM policy (access control)
gcloud projects get-iam-policy {project} --format=json \
> evidence/A.5.15_gcp-iam-policy_$(date +%Y-%m-%d).json
# Service accounts
gcloud iam service-accounts list --format=json \
> evidence/A.5.16_gcp-service-accounts_$(date +%Y-%m-%d).json
# Audit logging config
gcloud projects get-iam-policy {project} --format=json | jq '.auditConfigs' \
> evidence/A.8.15_gcp-audit-config_$(date +%Y-%m-%d).json
# Log sinks (centralization)
gcloud logging sinks list --format=json \
> evidence/A.8.15_gcp-log-sinks_$(date +%Y-%m-%d).json
# Compute instances (asset inventory)
gcloud compute instances list --format=json \
> evidence/A.5.9_gcp-compute-inventory_$(date +%Y-%m-%d).json
# Cloud SQL backup config
gcloud sql backups list --instance={instance} --format=json \
> evidence/A.8.13_gcp-sql-backups_$(date +%Y-%m-%d).json
# Firewall rules
gcloud compute firewall-rules list --format=json \
> evidence/A.8.20_gcp-firewall-rules_$(date +%Y-%m-%d).json
Azure 证据
# Role assignments (access control)
az role assignment list --all --output json \
> evidence/A.5.15_azure-role-assignments_$(date +%Y-%m-%d).json
# Activity log (audit trail)
az monitor activity-log list --max-events 100 --output json \
> evidence/A.8.15_azure-activity-log_$(date +%Y-%m-%d).json
# Network security groups
az network nsg list --output json \
> evidence/A.8.20_azure-nsgs_$(date +%Y-%m-%d).json
# Backup jobs
az backup job list --resource-group {rg} --vault-name {vault} --output json \
> evidence/A.8.13_azure-backup-jobs_$(date +%Y-%m-%d).json
# Storage encryption
az storage account list --query "[].{name:name, encryption:encryption}" --output json \
> evidence/A.8.24_azure-storage-encryption_$(date +%Y-%m-%d).json
Google Workspace 证据
# User list with MFA status
gam print users fields primaryEmail,name,isEnrolledIn2Sv,isEnforcedIn2Sv,lastLoginTime,suspended \
> evidence/A.5.17_workspace-users-mfa_$(date +%Y-%m-%d).csv
# Admin roles
gam print admins > evidence/A.8.2_workspace-admins_$(date +%Y-%m-%d).csv
# Mobile devices
gam print mobile > evidence/A.8.1_workspace-mobile-devices_$(date +%Y-%m-%d).csv
macOS 终端设备证据
# FileVault encryption
fdesetup status > evidence/A.8.24_filevault-status_$(date +%Y-%m-%d).txt
# System configuration
system_profiler SPHardwareDataType SPSoftwareDataType \
> evidence/A.8.1_endpoint-config_$(date +%Y-%m-%d).txt
# Screen lock settings
profiles show -type configuration 2>/dev/null | grep -A10 -i "lock\|idle\|screensaver" \
> evidence/A.6.7_screenlock-config_$(date +%Y-%m-%d).txt
步骤 4:验证证据包
提交给审计员前检查完整性:
- 完整性:是否为 SoA 中每项适用的控制措施都准备了证据?
- 时效性:所有证据是否都在要求的时效范围内?
- 格式:API 导出是否为带时间戳的 JSON/CSV?屏幕截图是否显示系统时钟?
- 命名:文件是否符合命名规范?
- 覆盖范围:关键级控制措施是否至少有 2 种形式的证据?
# If Internal ISO Audit MCP server is available:
list_controls() # Get all controls to verify evidence coverage
get_control_guidance(control_id="A.8.8") # Check specific control's evidence expectations
search_guidance(query="vulnerability scanning evidence") # Find controls related to specific evidence types
步骤 5:生成证据索引
创建索引文件,列出所有证据并映射到相应控制措施:
# Evidence Package Index
Generated: {date}
Audit period: {start} to {end}
| Control | Evidence File | Type | Collected | Status |
|---------|--------------|------|-----------|--------|
| A.5.15 | gcp-iam-policy_2026-02-28.json | API export | 2026-02-28 | Current |
| A.5.17 | workspace-users-mfa_2026-02-28.csv | API export | 2026-02-28 | Current |
| ... | ... | ... | ... | ... |
要做/不要做
要做
- 尽可能使用带有 ISO 8601 时间戳的 API 导出,而不是截图
- 从源系统(IdP,而非二级报告)收集证据
- 包含元数据:收集日期、系统版本、收集人
- 将证据存储在版本控制目录中,并使用清晰的命名
- 收集审计期间(通常是过去 12 个月)的证据,而不只是当前状态
- 使用
screencapture -x ~/evidence/{filename}.png截图(捕获的图像不带阴影/边框)
不要做
- 截取未显示系统时钟的屏幕(macOS 上的菜单栏、Windows 上的任务栏)
- 从沙盒/预发布环境而非生产环境收集证据
- 收集后手动编辑证据(审计人员可能会对照源数据进行核实)
- 等到审计前一周才收集所有材料
- 假定过时的证据可以接受——请查看上文的时效性要求
- 将不同审计期间的证据混在同一个文件中
故障排除
| 问题 | 解决方案 |
|---|---|
| API 命令需要身份验证 | 使用现有本地凭据:gcloud auth login、az login、gh auth login |
| 未安装工具 | 安装:brew install gh、brew install --cask google-cloud-sdk、brew install azure-cli |
| 权限不足 | 申请相关服务的只读访问权限;将访问申请记录为证据 |
| 证据过大 | 使用 --limit 或 --max-events 标志;收集汇总统计数据,而非完整导出 |
| 供应商不愿提供 SOC 2 报告 | 通过其信任中心申请;若无法获取,请记录申请情况并使用其安全页面 |
| 截图未包含时钟 | 在 macOS 上:使用全屏截图,或使用 screencapture -x,该命令会包含菜单栏 |
规则
按主题查看详细的证据收集指南:
| 文件 | 涵盖内容 |
|---|---|
rules/api-exports.md | 各云服务提供商的 CLI 命令(GCP、Azure、AWS、GitHub、Google Workspace) |
rules/screenshot-guide.md | 何时以及如何截取符合审计要求的屏幕截图 |
rules/evidence-types.md | 各控制域的证据类型要求 |
归属
证据收集流程和控制指南由 Internal ISO Audit(Hazel Castro,ISO 27001 首席审计师,拥有 14+ 年经验,参与过 100+ 次审计)协助制定。
运行时检测
- Internal ISO Audit MCP server 可用(最佳)——实时查询控制指南、交叉引用 NIST,并对所有控制证据要求进行全文搜索。服务地址:
internalisoaudit.com/api/mcp - 本地合规数据可用(良好)——从
compliance/evidence/*.md读取证据状态 - 仅供参考(基准)——使用
rules/中嵌入的检查清单和命令参考
连接器
有关 Internal ISO Audit MCP server 的设置,请参阅 CONNECTORS.md。
评论
支持 Markdown