关于 Policyseed
Policyseed 是面向准备治理文件的公司的离线 SOC 2 政策生成器。其 MCP 服务可让 AI 助手用户收集信息并在本地生成指定政策,采用确定性模板而非大模型输出。
主要功能
- 01根据 YAML 信息生成 22 项政策
- 02检查政策复审日期
- 03收集只读审计证据
- 04确定性 Markdown 模板
适用场景
- 01起草一套 SOC 2 政策初稿
- 02在 CI 中查找待复审政策
- 03收集云服务和 GitHub 审计证据
MCP 相关
`policyseed mcp` 命令会启动 MCP 服务,供 Claude、Cursor 等客户端使用。客户端可列出政策、询问信息并在对话中生成政策。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
5收录的工具列表 · 更新于 3 天前
此工具无需参数。
详细介绍
policyseed
免费的离线 SOC 2 策略生成器。policyseed 使用小型模板引擎和零运行时依赖,通过一个 YAML 信息收集文件生成 22 份治理策略文档。
npx policyseed init # writes intake.yaml: company, cloud, identity provider, MFA, team size...
npx policyseed build # renders the 22 policies into ./policies/
更喜欢用浏览器?相同的模板也可在 policyseed.io/generate 运行:回答 23 个问题,无需注册,不会上传任何内容。
- 免费且采用 Apache-2.0 许可。 可使用、分叉、修改,并在内部或向客户发布。
- 结果确定。 相同的
intake.yaml始终生成相同的 Markdown,不含随机性。 - 不使用大模型。 模板是采用 Mustache 风格标签语法的纯 Markdown,而非模型生成的内容。
- 无需注册。除非收集证据,否则不会发起网络请求。
build、check、init、list和mcp不会发起网络请求,可完全在你的计算机或 CI 运行器上运行。evidence只会调用你已经在使用的云 CLI(aws、gcloud、gh),执行只读命令,而且仅在你运行它时才会调用。
这些策略只是起点,供公司审查和采纳,并不保证合规。请参阅本项目不是什么。
输出示例
每份策略都会根据收集的信息写入你的工具和人员名称。以下是针对一家示例公司(使用 AWS、GitHub、Google Workspace,已启用 MFA,员工人数为 11-50 人),通过 npx policyseed build 生成的访问控制策略摘录:
4.3 Google Workspace 是员工身份的唯一来源。业务应用与其集成,以实现单点登录,并在支持的情况下自动配置和取消配置;无法联合身份验证的应用会记录在例外登记册中,并通过补偿性审查进行管理。
4.8 GitHub 访问权限通过组织成员身份授予,并由 Google Workspace 单点登录强制执行;仓库权限按团队分配;受保护的分支要求由作者以外的人员审查代码,然后才能通过 GitHub Actions 合并和部署代码。如果员工人数使这一做法难以实施,安全负责人会记录补偿性审查。
全部 22 份策略都包含相同的九个部分:目的、范围、角色与职责、编号策略声明、程序、例外、执行、审查周期和修订历史。编号策略声明便于向审计人员指出对应某项控制的具体句子。
快速开始
需要 Node.js 18 或更高版本。无需安装步骤——使用 npx 运行:
npx policyseed init
# edit intake.yaml with your company's details
npx policyseed build
npx policyseed check
init会在当前目录写入带注释的intake.yaml,其中包含所有字段、允许的值和合理的默认值。除非传入--force,否则不会覆盖现有文件。build会读取intake.yaml,对其进行验证,并将全部 22 份策略写入./policies/,生成名为NN-<slug>.md且带有公司名称标题的文件。check会读取./policies/和intake.yaml;如果任何策略的上次审查日期超出其review_cadence允许的时限,就会以状态码 1 退出。内置的 GitHub Action 会按计划运行此命令,以便逾期策略显示为检查失败。list会列出内置的 22 个模板。evidence会通过你已登录的 CLI,从 AWS、Google Cloud 和 GitHub 收集只读 SOC 2 证据。请参阅收集审计证据。--help和--version的作用与你预期的一样。
如果你更愿意将它作为依赖项安装:
npm install --save-dev policyseed
npx policyseed init
模板语法参考
模板是包含 YAML front matter 和一小组标签的纯 Markdown 文件,实现在
lib/render.js 中:
| 标签 | 行为 |
|---|---|
{{key}} | 打印 intake 上下文中 key 的值。未知键会渲染为空字符串。 |
{{#if key}} … {{/if}} | 仅当 key 为真值时渲染此代码块。 |
{{#unless key}} … {{/unless}} | 仅当 key 为假值时渲染此代码块。 |
{{#each list}} … {{/each}} | 对 list 中的每个项目重复渲染此代码块;{{this}} 表示当前项目。 |
真值判断与 JavaScript 一致,此外空数组也视为假值:false、""、0、NaN、
null、undefined 和 [] 为假值;其他值均为真值。
独占一行的代码块标签(前后只有空白字符)会连同行一起移除,因此条件段落和循环不会 留下多余的空行。连续三个或更多空行会合并为两个。
每个模板可用的上下文由 lib/context.js 中的 toTemplateContext()
根据你的 intake.yaml 构建,包括公司名称、云服务提供商、身份提供商、MFA 状态、处理的
数据类型等,以及模板分支逻辑使用的派生布尔值,如 has_mdm、has_vendors、
scope_availability 和 small_team(员工人数为 1-10)。
22 项政策
| # | 标题 |
|---|---|
| 1 | 信息安全政策 |
| 2 | 可接受使用政策 |
| 3 | 访问控制政策 |
| 4 | 身份验证和密码政策 |
| 5 | 资产管理政策 |
| 6 | 数据分类与处理政策 |
| 7 | 数据保留与处置政策 |
| 8 | 加密与密钥管理政策 |
| 9 | 变更管理政策 |
| 10 | 安全软件开发政策 |
| 11 | 漏洞与补丁管理政策 |
| 12 | 日志记录与监控政策 |
| 13 | 事件响应政策 |
| 14 | 业务连续性与灾难恢复政策 |
| 15 | 备份与恢复政策 |
| 16 | 供应商与第三方风险管理政策 |
| 17 | 风险评估与管理政策 |
| 18 | 人力资源安全政策 |
| 19 | 终端与工作站安全政策 |
| 20 | 网络与基础设施安全政策 |
| 21 | 物理安全与远程办公安全政策 |
| 22 | 隐私与数据保护政策 |
每项政策都包含九个标准部分:目的、范围、角色与职责、政策声明、流程、例外、执行、 审查周期和修订历史。
在 CI 中保持政策更新
在将 intake.yaml 和 policies/ 纳入版本控制的仓库中使用 GitHub Action:
- uses: actions/checkout@v4
- uses: odedmoshe/policyseed@v1
with:
command: check
如果某项政策已逾期未审查,检查就会失败,因此过时的政策会显示为红色 X,而不是悄然
过期。 .github/workflows/policy-review.yml
是可供复制的完整每周工作流;输入和输出见
docs/github-action.md。
通过 AI 助手使用(MCP)
policyseed mcp 会启动一个 Model Context Protocol 服务,
让 Claude、Cursor 和其他 MCP 客户端能够列出政策、向你提出 intake 问题,并在对话中渲染任意
政策。除了你输入给助手的内容外,任何信息都不会离开你的设备。
claude mcp add policyseed -- npx -y policyseed mcp
Claude Desktop 和 Cursor 的配置、工具列表及示例对话见 docs/mcp.md。
收集审计证据
审计人员会要求提供控制措施已配置的证明:分支保护、MFA、静态加密、日志记录、管理员访问权限。policyseed evidence 会使用你已安装并登录的 aws、gcloud 和 gh CLI 收集这些信息,并将其保存为带日期的 JSON 文件及索引:
npx policyseed evidence --providers aws,gcp,github \
--repo acme/app --org acme --project acme-prod
evidence/2026-10-23/
INDEX.md criterion -> file -> what it shows -> auditor question
CC6.1-aws-iam-account-summary.json
CC6.1-aws-iam-credential-report.json
CC8.1-github-branch-protection.json
...
工作方式:
- 只读。 每条命令都是 Describe、Get 或 List 调用(
gh apiGET 请求,不包含请求字段)。唯一的例外只是名称上看起来像例外:aws iam generate-credential-report会请求 IAM 生成凭证报告;IAM 将其归类为 Read 操作,且不会更改任何设置。--dry-run会打印确切命令,但不会执行;--list会打印收集器列表。 - 不使用 shell。 每条命令都通过 Node 的
execFile和固定的参数数组运行。--repo、--org、--project、存储桶名称和跟踪 ARN 都作为独立参数传递,绝不会插入 shell 字符串。分页器和交互式提示均已关闭。 - 每个文件都会将 CLI 的 JSON 输出与生成该输出的命令、时间、CLI 版本和退出代码一起封装。文件会按照收集器的首个 SOC 2 标准编号命名为
<criterion>-<collector-id>.json;INDEX.md 会列出每个文件支持的所有标准编号。 - 脱敏。 写入或打印任何内容之前,疑似包含机密的键(
SessionToken、SecretAccessKey、password、token……)对应的值都会被替换,看起来像凭证的字符串也会被替换:GitHub 令牌、AWS 访问密钥 ID 和会话令牌、Google API 密钥和 OAuth 令牌、JWT、PEM 私钥以及key=value格式的机密。程序一开始就不会请求机密。账户 ID 会保留,因为审计人员通常需要这些信息;传入--redact-account-ids可将 12 位 ID 截断为仅保留末尾四位。 - 失败不会中止运行。 缺少 CLI、缺少凭证或权限错误时,程序会在 INDEX.md 中写入
not collected: <reason>,然后继续运行。只有完全没有收集到任何内容时,退出代码才为 1。 - 重新运行。 重新运行时,会替换同一天之前由相应提供方写入的文件,并重写 INDEX.md。其他日期的文件夹、其他提供方的文件,以及你自行添加的任何文件(例如截图)都不会受影响。
- 范围。 区域级 AWS 检查(EBS 默认加密、RDS、CloudTrail)使用 CLI 配置的区域(
AWS_REGION或配置文件中的区域)。GitHub 检查覆盖一个仓库和一个组织;Google Cloud 检查覆盖一个项目(--project或 gcloud 默认项目)。S3 的逐存储桶检查最多处理--max-buckets指定数量的存储桶(默认为 50)。在 Windows 上,gcloud是.cmd脚本,Node 无法在不使用 shell 的情况下启动它,因此 Google Cloud 收集器会在该平台上报告未收集。
它会收集什么
| 收集器 | 标准 | 命令 |
|---|---|---|
github-repo-settings | CC7.1 | gh api repos/{repo}:默认分支、密钥扫描和推送保护 |
github-branch-protection | CC8.1 | gh api repos/{repo}/branches/{default}/protection |
github-branch-rules | CC8.1 | gh api --paginate repos/{repo}/rules/branches/{default}(规则集规则) |
github-dependabot-alerts | CC7.1 | gh api repos/{repo}/vulnerability-alerts |
github-org-2fa | CC6.1 | gh api orgs/{org}:two_factor_requirement_enabled |
github-org-admins | CC6.3 | gh api --paginate orgs/{org}/members?role=admin |
aws-iam-account-summary | CC6.1 | aws iam get-account-summary:根用户 MFA、根用户访问密钥 |
aws-iam-credential-report | CC6.1、CC6.2 | aws iam generate-credential-report,然后运行 get-credential-report,解码后精简为 MFA、密码和访问密钥使用年限列 |
aws-iam-password-policy | CC6.1 | aws iam get-account-password-policy |
aws-cloudtrail | CC7.2 | aws cloudtrail describe-trails,然后对每个跟踪运行 get-trail-status |
aws-ebs-default-encryption | CC6.1 | aws ec2 get-ebs-encryption-by-default |
aws-s3-buckets | CC6.1、CC6.6 | aws s3api list-buckets,然后对每个存储桶运行 get-bucket-encryption 和 get-public-access-block |
aws-rds-instances | CC6.1、A1.2 | aws rds describe-db-instances:StorageEncrypted、BackupRetentionPeriod 及相关字段 |
gcp-project-iam-policy | CC6.3 | gcloud projects get-iam-policy {project} |
gcp-logging-sinks | CC7.2 | gcloud logging sinks list |
gcp-sql-instances | A1.2、CC6.1 | gcloud sql instances list(备份配置) |
gcp-compute-disks | CC6.1 | gcloud compute disks list(加密密钥) |
gcp-organizations | CC6.1 | gcloud organizations list |
所有 aws 命令都会添加 --output json,所有 gcloud 命令都会添加 --format=json。
它需要哪些权限
为运行它所使用的身份仅授予读取权限。
AWS。 此策略涵盖所有 AWS 收集器,除此之外不包含其他权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PolicyseedEvidenceReadOnly",
"Effect": "Allow",
"Action": [
"iam:GetAccountSummary",
"iam:GenerateCredentialReport",
"iam:GetCredentialReport",
"iam:GetAccountPasswordPolicy",
"cloudtrail:DescribeTrails",
"cloudtrail:GetTrailStatus",
"ec2:GetEbsEncryptionByDefault",
"s3:ListAllMyBuckets",
"s3:GetEncryptionConfiguration",
"s3:GetBucketPublicAccessBlock",
"rds:DescribeDBInstances"
],
"Resource": "*"
}
]
}
Google Cloud。 在项目上授予 roles/viewer 可满足项目收集器的需求;在组织上授予 roles/resourcemanager.organizationViewer 可满足 organizations list 的需求。
如需更精细的访问权限,可在项目上授予 roles/iam.securityReviewer(IAM 策略)、roles/logging.viewer(接收器)、roles/cloudsql.viewer(SQL 实例)和 roles/compute.viewer(磁盘)。
GitHub。 gh 会使用当前登录的凭据(gh auth login 或 GH_TOKEN)。读取经典分支保护、security_and_analysis 区块和 Dependabot 警报设置需要存储库管理员读取权限;读取规则集规则只需读取权限。对于组织,GitHub 仅向组织所有者返回 two_factor_requirement_enabled,仅向组织成员列出私有成员。具有存储库 Administration: read 和 Metadata: read 权限以及组织 Members: read 权限的细粒度令牌即可满足其余需求。令牌无法读取的收集器会记录为未收集,而不会记录为通过。
如需按计划运行 GitHub 收集器并将结果保留为工作流工件,请参阅 docs/evidence.md。
它不会做什么
它会保存运行当天的配置。它不会判断配置是否符合你的策略,不会涵盖审计员会测试的所有控制,也不能取代审计员自己的测试:他们会自行选择样本,可能会要求你在他们观察时重新运行命令,并会测试这些控制在整个审计期间是否有效运行。
与托管生成器和 Audit Kit 的关系
此软件包使用的正是驱动托管生成器 policyseed.io 的渲染引擎,供希望在本地运行、将其编入 CI 脚本,或深入了解其工作原理的人使用;托管网站还提供付费版 Audit Kit,它会使用 Claude 根据你的具体技术栈定制 Policy Statements 和 Procedures 部分,并增加导出格式——此 CLI 不包含这一步定制。
本项目不是什么
这些是治理文档模板,不构成法律建议,也不保证合规。SOC 2 报告是由独立 CPA 事务所出具的意见,其依据是你是否确实执行了这些政策所述的控制措施——是否按计划进行访问权限审查、是否实际记录并分级处理事件、是否实际测试备份——而不仅仅是你是否拥有这些文档。在对外依赖这些内容之前,请让具备资质的人员(法律顾问、审计师或经验丰富的合规从业者)审查生成结果。
贡献
欢迎在 github.com/odedmoshe/policyseed 提交问题和拉取请求。如果要修改某项政策的措辞,建议直接编辑模板中的文本,并运行测试套件(node --test test/),确保渲染器一致性测试和 CLI 冒烟测试仍能通过。如果要添加新的输入字段,请一并更新 lib/context.js 中的 DEFAULT_INTAKE、toTemplateContext 和 validateIntake,因为这三者应保持同步。
许可证
Apache License 2.0 — 详见 LICENSE。版权归 policyseed 贡献者所有。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。