diff --git a/docs/operations/vault-github-actions-2026-06-06.md b/docs/operations/vault-github-actions-2026-06-06.md new file mode 100644 index 0000000..a3045a6 --- /dev/null +++ b/docs/operations/vault-github-actions-2026-06-06.md @@ -0,0 +1,83 @@ +# Vault + GitHub Actions 配置记录 + +记录日期:2026-06-06 + +本记录只保留流程、路径和配置原则,不包含任何 token、私钥、证书内容或其他敏感值。 + +## 目标 + +把 XWorkspace 相关仓库的 GitHub Actions 统一切换到 Vault OIDC 登录,并按仓库隔离读取权限。 + +## Vault 侧配置 + +- 已启用 `jwt` auth mount +- 已信任 GitHub Actions OIDC issuer + - `oidc_discovery_url = https://token.actions.githubusercontent.com` + - `bound_issuer = https://token.actions.githubusercontent.com` +- 已为每个仓库创建独立 policy 和 role + - `github-actions-openclaw-multi-session-plugins` + - `github-actions-xworkmate-bridge` + - `github-actions-xworkmate-app` + - `github-actions-xworkspace-core-skills` +- 已采用统一 KV 读路径 + - `kv/data/github-actions/` + +## 权限模型 + +每个 role 仅绑定本仓库对应的 GitHub OIDC 身份: + +- `repository = x-evor/` +- `sub = repo:x-evor/:*` +- `bound_audiences = ["vault"]` + +每个 policy 仅允许读取自己的 KV 路径。 + +## GitHub Actions 统一接入方式 + +所有接入 Vault 的 workflow 都使用相同模式: + +1. 在 job 中加入 `id-token: write` +2. 使用 `hashicorp/vault-action` +3. `method = jwt` +4. `role = github-actions-` +5. `jwtGithubAudience = vault` +6. 从 `kv/data/github-actions/` 读取对应密钥 + +## 已更新的仓库 + +### openclaw-multi-session-plugins + +- `publish.yml` 改为通过 Vault 读取 `NPM_TOKEN` +- `deploy.yml` 改为通过 Vault 读取 SSH 相关密钥 +- 仍保留原有发布和安装逻辑 + +### xworkmate-bridge + +- `pipeline.yml` 改为通过 Vault 读取: + - `INTERNAL_SERVICE_TOKEN` + - `GHCR_TOKEN` + - `WORKSPACE_REPO_TOKEN` + - `SINGLE_NODE_VPS_SSH_PRIVATE_KEY` + - `SSH_KNOWN_HOSTS` +- 保留原有 `workflow_dispatch` 的手动 token 覆盖路径 + +### xworkmate-app + +- `build-and-release.yml` 改为通过 Vault 读取: + - `REVIEW_ACCOUNT_LOGIN_PASSWORD` + - 各平台签名与打包密钥 +- 对 `pull_request` 保留仓库归属判断,避免把 Vault 访问扩大到不可信上下文 + +### xworkspace-core-skills + +- 当前仓库内未发现 `.github/workflows`,因此没有可改的 GitHub Actions 文件 +- 相关 Vault role/policy 已预先创建,方便后续新增 workflow 时直接接入 + +## 备注 + +- 本次未在文档中记录任何敏感值 +- 若后续新增仓库,只需补: + - 一条 policy + - 一条 role + - 对应的 `kv/data/github-actions/` 路径 + - workflow 中的 `vault-action` 接入步骤