iso-27001-evidence-collection
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseISO 27001 Evidence Collection
ISO 27001 证据收集
Systematically collect audit evidence for ISO 27001:2022 and SOC 2. This skill provides API-first evidence collection commands, organizes evidence by control, and validates completeness before auditor review.
可系统性收集ISO 27001:2022和SOC 2的审计证据。本工具提供API优先的证据采集命令,按控制项归类证据,并在提交给审计人员审核前验证证据的完整性。
Security Model
安全模型
- No scripts executed — this skill is markdown-only procedural guidance
- No secrets required — works with reference checklists; CLI commands use existing local credentials
- Evidence stays local — all outputs go to the local filesystem
- IP-clean — references NIST SP 800-53 (public domain); ISO controls cited by section ID only
- 不执行任何脚本 — 本工具仅提供Markdown格式的操作指引
- 无需输入密钥 — 基于参考 checklist 运行;CLI命令使用本地已有的凭证
- 证据仅保存在本地 — 所有输出都写入本地文件系统
- 无知识产权风险 — 引用公有领域的NIST SP 800-53标准;ISO控制项仅引用章节ID
When to Use
适用场景
Activate this skill when:
- Preparing evidence package for external audit — 2-4 weeks before auditor arrives
- Quarterly evidence refresh — update evidence that has aged beyond the audit window
- After remediation — collect evidence proving a finding has been fixed
- New system onboarding — establish baseline evidence for a newly in-scope system
- Evidence gap analysis — identify what's missing before the audit
Do NOT use for:
- Running the internal audit itself — use
iso-27001-internal-audit - SOC 2-only readiness assessment — use
soc2-readiness - Interpreting audit findings — use the internal audit skill
当存在以下需求时可启用本工具:
- 为外部审计准备证据包 — 审计人员入场前2-4周
- 季度证据更新 — 更新超出审计有效期的过时证据
- 整改完成后 — 收集证据证明问题已修复
- 新系统上线 — 为新纳入审计范围的系统建立基线证据
- 证据缺口分析 — 审计前识别缺失的证据项
请勿用于以下场景:
- 执行内部审计本身 — 请使用工具
iso-27001-internal-audit - 仅SOC 2就绪度评估 — 请使用工具
soc2-readiness - 解读审计发现 — 请使用内部审计工具
Core Concepts
核心概念
Evidence Hierarchy (Best to Worst)
证据优先级(从最优到最差)
| Rank | Type | Example | Why Better |
|---|---|---|---|
| 1 | API export (JSON/CSV) | | Timestamped, tamper-evident, reproducible |
| 2 | System-generated report | SOC 2 report from vendor, SIEM export | Authoritative source, includes metadata |
| 3 | Configuration export | Terraform state, policy JSON | Shows intended state, version-controlled |
| 4 | Screenshot with system clock | | Visual proof, but harder to validate |
| 5 | Manual attestation | Signed statement by responsible person | Last resort, requires corroboration |
| 优先级 | 类型 | 示例 | 优势 |
|---|---|---|---|
| 1 | API导出(JSON/CSV) | | 带时间戳、防篡改、可复现 |
| 2 | 系统生成的报告 | 供应商提供的SOC 2报告、SIEM导出文件 | 权威来源、包含元数据 |
| 3 | 配置导出 | Terraform状态文件、策略JSON | 展示预期状态、支持版本控制 |
| 4 | 带系统时钟的截图 | | 可视化证明,但验证难度较高 |
| 5 | 手动声明 | 责任人签字的说明文件 | 最后选择,需要其他佐证 |
Evidence Freshness Requirements
证据有效期要求
| Evidence Type | Max Age | Refresh Cadence |
|---|---|---|
| Access lists | 90 days | Quarterly |
| Vulnerability scans | 30 days | Monthly |
| Configuration exports | 90 days | Quarterly |
| Training records | 12 months | Annual |
| Penetration test | 12 months | Annual |
| Policy documents | 12 months | Annual review |
| Incident records | Audit period | Continuous |
| Risk assessment | 12 months | Annual + on change |
| 证据类型 | 最长有效期 | 更新频率 |
|---|---|---|
| 访问列表 | 90天 | 季度 |
| 漏洞扫描报告 | 30天 | 月度 |
| 配置导出 | 90天 | 季度 |
| 培训记录 | 12个月 | 年度 |
| 渗透测试报告 | 12个月 | 年度 |
| 政策文档 | 12个月 | 年度评审 |
| 事件记录 | 审计周期内 | 持续更新 |
| 风险评估报告 | 12个月 | 年度+变更时更新 |
Evidence Naming Convention
证据命名规范
{control_id}_{evidence_type}_{YYYY-MM-DD}.{ext}Examples:
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
{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
Step-by-Step Workflow
分步工作流
Step 1: Identify Evidence Gaps
步骤1:识别证据缺口
Determine what evidence is missing or stale.
undefined确定缺失或过时的证据项。
undefinedIf Internal ISO Audit MCP server is available:
如果有内部ISO审计MCP服务器可用:
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
search_guidance(query="evidence", domain="organizational") # 查找需要证据的控制项
list_controls(domain="technological") # 列出所有技术控制项评估缺口
get_control_guidance(control_id="A.5.15") # 获取特定控制项的证据要求
If reading local compliance data:
如果读取本地合规数据:
Check compliance/evidence/*.md files for upload_status != "OK"
检查compliance/evidence/*.md文件中upload_status != "OK"的项
Check renewal_next dates for upcoming expirations
检查renewal_next日期确认即将过期的证据
undefinedundefinedStep 2: Prioritize Collection
步骤2:优先级排序
Order evidence collection by:
- Missing evidence for Critical-tier controls — audit blockers
- Stale evidence past renewal date — auditor will reject
- Evidence for Relevant-tier controls — expected but not blocking
- Checkbox-tier evidence — policies and attestations
按以下顺序安排证据采集:
- 关键级控制项缺失的证据 — 审计阻塞项
- 超出更新日期的过时证据 — 审计人员会拒收
- 相关级控制项的证据 — 预期需要但不会阻塞审计
- 勾选类证据 — 政策和声明文件
Step 3: Collect by Platform
步骤3:按平台采集
Run evidence collection commands grouped by platform to minimize context-switching.
按平台分组执行证据采集命令,减少上下文切换。
GitHub Evidence
GitHub 证据
bash
undefinedbash
undefinedOrg settings: MFA requirement, default permissions
组织设置:MFA要求、默认权限
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
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
jq '{repo: "'$repo'", protection: .}' >> evidence/A.8.32_branch-protection_$(date +%Y-%m-%d).json done
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
jq '{repo: "'$repo'", protection: .}' >> evidence/A.8.32_branch-protection_$(date +%Y-%m-%d).json done
Recent merged PRs (change management evidence)
近期合并的PR(变更管理证据)
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
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)
Dependabot告警(漏洞管理)
gh api repos/{org}/{repo}/dependabot/alerts?state=open \
evidence/A.8.8_dependabot-alerts_$(date +%Y-%m-%d).json
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
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
undefinedgh api orgs/{org}/audit-log?per_page=100 \
evidence/A.8.15_github-audit-log_$(date +%Y-%m-%d).json
undefinedGCP Evidence
GCP 证据
bash
undefinedbash
undefinedIAM policy (access control)
IAM策略(访问控制)
gcloud projects get-iam-policy {project} --format=json \
evidence/A.5.15_gcp-iam-policy_$(date +%Y-%m-%d).json
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
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
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
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
gcloud compute instances list --format=json \
evidence/A.5.9_gcp-compute-inventory_$(date +%Y-%m-%d).json
Cloud SQL backup config
Cloud SQL备份配置
gcloud sql backups list --instance={instance} --format=json \
evidence/A.8.13_gcp-sql-backups_$(date +%Y-%m-%d).json
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
undefinedgcloud compute firewall-rules list --format=json \
evidence/A.8.20_gcp-firewall-rules_$(date +%Y-%m-%d).json
undefinedAzure Evidence
Azure 证据
bash
undefinedbash
undefinedRole assignments (access control)
角色分配(访问控制)
az role assignment list --all --output json \
evidence/A.5.15_azure-role-assignments_$(date +%Y-%m-%d).json
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
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
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
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
undefinedaz storage account list --query "[].{name:name, encryption:encryption}" --output json \
evidence/A.8.24_azure-storage-encryption_$(date +%Y-%m-%d).json
undefinedGoogle Workspace Evidence
Google Workspace 证据
bash
undefinedbash
undefinedUser list with MFA status
带MFA状态的用户列表
gam print users fields primaryEmail,name,isEnrolledIn2Sv,isEnforcedIn2Sv,lastLoginTime,suspended \
evidence/A.5.17_workspace-users-mfa_$(date +%Y-%m-%d).csv
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
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
undefinedgam print mobile > evidence/A.8.1_workspace-mobile-devices_$(date +%Y-%m-%d).csv
undefinedmacOS Endpoint Evidence
macOS 终端证据
bash
undefinedbash
undefinedFileVault encryption
FileVault加密状态
fdesetup status > evidence/A.8.24_filevault-status_$(date +%Y-%m-%d).txt
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
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
undefinedprofiles show -type configuration 2>/dev/null | grep -A10 -i "lock|idle|screensaver" \
evidence/A.6.7_screenlock-config_$(date +%Y-%m-%d).txt
undefinedStep 4: Validate Evidence Package
步骤4:验证证据包
Check completeness before submitting to auditor:
- Completeness: Do you have evidence for every applicable control in the SoA?
- Freshness: Is every piece of evidence within the required age?
- Format: Are API exports in JSON/CSV with timestamps? Screenshots have system clock visible?
- Naming: Files follow the naming convention?
- Coverage: Critical-tier controls have at least 2 forms of evidence?
undefined提交给审计人员前检查完整性:
- 完整性:SoA中每个适用的控制项都有对应证据吗?
- 有效性:所有证据都在要求的有效期内吗?
- 格式:API导出是带时间戳的JSON/CSV格式吗?截图可见系统时钟吗?
- 命名:文件符合命名规范吗?
- 覆盖度:关键级控制项至少有2种形式的证据吗?
undefinedIf Internal ISO Audit MCP server is available:
如果有内部ISO审计MCP服务器可用:
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
undefinedlist_controls() # 获取所有控制项验证证据覆盖度
get_control_guidance(control_id="A.8.8") # 检查特定控制项的证据要求
search_guidance(query="vulnerability scanning evidence") # 查找与特定证据类型相关的控制项
undefinedStep 5: Generate Evidence Index
步骤5:生成证据索引
Create an index file listing all evidence, mapped to controls:
markdown
undefined创建索引文件列出所有证据,映射到对应控制项:
markdown
undefinedEvidence 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 |
| ... | ... | ... | ... | ... |
undefined生成时间:{date}
审计周期:{start} 至 {end}
| 控制项 | 证据文件 | 类型 | 采集时间 | 状态 |
|---|---|---|---|---|
| A.5.15 | gcp-iam-policy_2026-02-28.json | API导出 | 2026-02-28 | 有效 |
| A.5.17 | workspace-users-mfa_2026-02-28.csv | API导出 | 2026-02-28 | 有效 |
| ... | ... | ... | ... | ... |
undefinedDO / DON'T
注意事项
DO
推荐操作
- Use API exports with ISO 8601 timestamps over screenshots whenever possible
- Collect evidence from the SOURCE system (IdP, not a secondary report)
- Include metadata: collection date, system version, user who collected
- Store evidence in version-controlled directory with clear naming
- Collect evidence for the AUDIT PERIOD (usually past 12 months), not just current state
- Use for screenshots (captures without shadow/border)
screencapture -x ~/evidence/{filename}.png
- 优先使用带ISO 8601时间戳的API导出,而非截图
- 从源系统采集证据(如IdP,而非二次生成的报告)
- 包含元数据:采集日期、系统版本、采集人
- 将证据存储在版本控制目录中,命名清晰
- 采集审计周期(通常过去12个月)的证据,而非仅当前状态
- 截图使用(无阴影/边框)
screencapture -x ~/evidence/{filename}.png
DON'T
禁止操作
- Take screenshots without visible system clock (menu bar on macOS, taskbar on Windows)
- Collect evidence from sandbox/staging instead of production
- Manually edit evidence after collection (auditors may verify against source)
- Wait until the week before the audit to collect everything
- Assume stale evidence is acceptable — check freshness requirements above
- Mix evidence from different audit periods in the same file
- 截图不包含可见的系统时钟(macOS的菜单栏、Windows的任务栏)
- 从沙箱/测试环境而非生产环境采集证据
- 采集后手动编辑证据(审计人员可能会与源系统核对)
- 等到审计前一周才开始收集所有证据
- 假设过时证据可接受 — 请参考上文的有效期要求
- 将不同审计周期的证据混合在同一个文件中
Troubleshooting
常见问题
| Problem | Solution |
|---|---|
| API command requires auth | Use existing local credentials: |
| Tool not installed | Install: |
| Insufficient permissions | Request read-only access to the relevant service; document the access request as evidence |
| Evidence too large | Use |
| Vendor won't provide SOC 2 report | Request via their trust center; if unavailable, document the request and use their security page |
| Screenshot doesn't include clock | On macOS: use full-screen capture, or |
| 问题 | 解决方案 |
|---|---|
| API命令需要认证 | 使用现有本地凭证: |
| 工具未安装 | 安装: |
| 权限不足 | 申请相关服务的只读权限;将权限申请记录作为证据留存 |
| 证据过大 | 使用 |
| 供应商不提供SOC 2报告 | 通过其信任中心申请;如果无法获取,留存申请记录并使用其安全页面内容作为替代 |
| 截图不包含时钟 | macOS上使用全屏截图,或 |
Rules
规则
For detailed evidence collection guidance by topic:
| File | Coverage |
|---|---|
| CLI commands by cloud provider (GCP, Azure, AWS, GitHub, Google Workspace) |
| When and how to take audit-ready screenshots |
| Evidence type requirements per control domain |
按主题查看详细的证据采集指引:
| 文件 | 覆盖范围 |
|---|---|
| 各云平台的CLI命令(GCP、Azure、AWS、GitHub、Google Workspace) |
| 何时及如何拍摄符合审计要求的截图 |
| 各控制领域的证据类型要求 |
Attribution
版权声明
Evidence collection procedures and control guidance developed with Internal ISO Audit (Hazel Castro, ISO 27001 Lead Auditor, 14+ years, 100+ audits).
证据采集流程和控制项指引由Internal ISO Audit开发(Hazel Castro,ISO 27001主任审核员,14年以上经验,参与过100+次审计)。
Runtime Detection
运行时检测
- Internal ISO Audit MCP server available (best) — Live control guidance lookup, NIST cross-reference, full-text search across all control evidence expectations. Server:
internalisoaudit.com/api/mcp - Local compliance data available (good) — Reads evidence status from
compliance/evidence/*.md - Reference only (baseline) — Uses embedded checklists and command reference in
rules/
- 内部ISO审计MCP服务器可用(最优) — 实时控制指引查询、NIST交叉引用、全控制项证据要求全文搜索。服务器地址:
internalisoaudit.com/api/mcp - 本地合规数据可用(良好) — 从读取证据状态
compliance/evidence/*.md - 仅参考模式(基线) — 使用目录下内置的checklist和命令参考
rules/