Skip to content

ci: isolate and harden organization label credentials#3

Merged
lzm0x219 merged 6 commits into
mainfrom
agent/harden-label-credentials
Jul 11, 2026
Merged

ci: isolate and harden organization label credentials#3
lzm0x219 merged 6 commits into
mainfrom
agent/harden-label-credentials

Conversation

@lzm0x219

Copy link
Copy Markdown
Member

变更摘要

将组织标签的只读预览与真实写入拆分为两个独立权限边界,避免自动 Push 和定时任务读取跨仓库写令牌,并固定所有第三方 GitHub Actions 到完整 Commit SHA。

主要修改

  • 新增 preview-labels.yml
    • Push、Schedule 和手动触发仅执行 Dry Run;
    • 使用权限受限的 github.token
    • 不读取任何跨仓库写 Secret。
  • 收紧 sync-labels.yml
    • 只保留手动 workflow_dispatch
    • 只允许从 main 执行;
    • 必须显式勾选 confirm_apply
    • 绑定 label-governance-production Environment;
    • 使用独立的 LABEL_SYNC_WRITE_TOKEN
    • 不再提供 Dry Run 选项,避免预览和写入复用同一凭证路径。
  • actions/checkoutmarkdownlint-cli2-actionlychee-action 固定到最近成功工作流实际解析的完整 SHA。
  • 新增 GitHub Actions Dependabot 月度更新配置。
  • 更新 README,记录预览与 Apply 的权限边界和 Environment 配置要求。

根因

此前虽然自动事件强制使用 Dry Run,但 Push、Schedule 和手动执行都会读取同一个具有跨仓库写权限的 LABEL_SYNC_TOKEN。Dry Run 只是程序内部逻辑,无法构成凭证权限隔离;进入默认分支的错误或恶意代码仍可能直接使用该令牌写入组织仓库。

安全影响

合并后,自动运行不再接触写令牌。真实标签修改只能经过以下门槛:

  1. 手动触发 Apply 工作流;
  2. main 运行;
  3. 显式确认 confirm_apply
  4. 通过 label-governance-production Environment 保护规则;
  5. 使用该 Environment 中的 LABEL_SYNC_WRITE_TOKEN

合并前必须完成的仓库设置

本 PR 无法通过仓库文件自动配置 Environment 保护规则。合并前应在 GitHub Settings 中:

  1. 创建 label-governance-production Environment;
  2. 添加 Environment Secret LABEL_SYNC_WRITE_TOKEN
  3. 配置 Required reviewers;
  4. 启用 Prevent self-review(账户方案支持时);
  5. 删除或轮换原普通仓库 Secret LABEL_SYNC_TOKEN

在上述配置完成前,不应运行 Apply 工作流。

验证

  • 新增与修改的 YAML 已完成解析检查;
  • Action SHA 来源于最近一次成功 GitHub Actions 日志中的实际解析结果;
  • 分支与 main 无冲突,仅涉及工作流、Dependabot 配置和对应说明文档。

审查重点

  • github.token 是否满足当前公开仓库的只读预览范围;
  • Environment 名称和 Secret 名称是否符合组织约定;
  • 是否接受 Apply 工作流始终执行真实同步、预览完全移至独立工作流;
  • GitHub Settings 中的 Environment 保护是否已在合并前完成。

Copy link
Copy Markdown
Member Author

验证结果更新

最新提交 144ba4e 已完成实际 GitHub Actions 验证:

  • Preview organization labels:成功;
  • Validate community files:成功;
  • Validate repository references and governance scripts:成功;
  • Lint Markdown:成功;
  • Validate documentation links:成功。

Preview Job 的运行时权限仅为 Contents: readIssues: readMetadata: read,并成功完成全组织公开可见仓库的标签漂移预览,确认自动预览不再需要 LABEL_SYNC_TOKEN

合并前仍需在仓库 Settings 中完成 label-governance-production Environment、Required reviewers 和 LABEL_SYNC_WRITE_TOKEN Environment Secret 的配置,并删除或轮换旧的普通仓库 Secret LABEL_SYNC_TOKEN

@lzm0x219
lzm0x219 marked this pull request as ready for review July 11, 2026 00:09
@lzm0x219
lzm0x219 merged commit 5a4d633 into main Jul 11, 2026
5 checks passed
@lzm0x219
lzm0x219 deleted the agent/harden-label-credentials branch July 11, 2026 00:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant