77 lines
4.3 KiB
Markdown
77 lines
4.3 KiB
Markdown
---
|
||
name: unidesk-secret
|
||
description: UniDesk 统一管理员密码的 YAML-first 分发与清理技能。用户提到统一管理员密码、unified-admin-password、OA/PikaOA、SelfMedia、HWLAB/lab、Sub2Rank 或 ApiState 的管理员密码轮换、Secret 同步、开发版与生产版密码对齐、清理服务级 admin password 时使用。
|
||
---
|
||
|
||
# UniDesk 统一管理员密码
|
||
|
||
遵循 `Skill(cli-spec)`,只通过 owning YAML、领域受控 CLI 和 `web-probe` 分发与验收,不读取、打印或从运行面反解密码。
|
||
|
||
## 唯一事实源
|
||
|
||
- 统一管理员密码只保存在 `/root/.unidesk/.env/unified-admin-password.txt`。
|
||
- 文件必须是 owner-only `0600` raw file,只包含一行密码。
|
||
- `config/secrets-distribution.yaml` 声明 raw-file source 和 Kubernetes `targetKey` 映射。
|
||
- `config/pikaoa.yaml` 声明 PikaOA development/release 管理员密码来源。
|
||
- `config/hwlab-node-lanes.yaml` 声明 HWLAB development/production bootstrap admin hash 来源。
|
||
- `config/hwlab-web-probe-sentinel/*.yaml` 的 bootstrap-admin 和 admin account 来源必须指向同一文件。
|
||
- 各应用可以保留不同 `targetKey`、Secret 名和 hash transform,但不得保留不同密码来源。
|
||
|
||
## 明确边界
|
||
|
||
- 统一以下管理员登录:
|
||
- PikaOA `pikaoa` 与 `pikaoa-dev`;
|
||
- SelfMedia `selfmedia` 与 `selfmedia-production`;
|
||
- HWLAB `v03` 与 `production`;
|
||
- Sub2Rank/ApiState 的 `APISTATE_WEB_PASSWORD`。
|
||
- 不统一以下非管理员凭据:
|
||
- PikaOA employee 密码;
|
||
- API key、session secret、admin token;
|
||
- 数据库密码和 FRP token;
|
||
- Sub2Rank 访问 Sub2API 的 `SUB2API_ADMIN_PASSWORD`;
|
||
- HWLAB 第二测试账号和 OpenCode 账号密码。
|
||
|
||
## 分发流程
|
||
|
||
1. 先确认 source 文件 presence、字节数、SHA-256 fingerprint 和 `0600`,不得输出内容。
|
||
2. 检查 owning YAML 中所有管理员 sourceRef 均指向统一文件。
|
||
3. 对每个 Secret scope 先执行 `secrets plan`,再执行 `secrets sync --confirm`,最后按 job ID 查询终态并执行 `secrets status`。
|
||
4. HWLAB 先执行 `hwlab nodes secret ensure --node NC01 --lane <lane> --name <bootstrap-secret> --dry-run`,确认后改为 `--confirm` 同步 hash Secret 和 rollout。
|
||
5. 用领域 status/validate 确认 Secret key presence、fingerprint、Deployment rollout 和 health;输出必须保持 `valuesPrinted=false`。
|
||
6. 用 `web-probe` 从 owning YAML 选择 public origin,分别验证 development 与 production 管理员登录。
|
||
7. 只有所有目标分发和登录验收通过后,才清理旧服务级密码文件或 env 键。
|
||
|
||
Secret 分发高频入口:
|
||
|
||
```bash
|
||
bun scripts/cli.ts secrets plan --config config/secrets-distribution.yaml --scope <scope> --target <target>
|
||
bun scripts/cli.ts secrets sync --config config/secrets-distribution.yaml --scope <scope> --target <target> --confirm
|
||
bun scripts/cli.ts secrets status --config config/secrets-distribution.yaml --scope <scope> --target <target>
|
||
```
|
||
|
||
目标矩阵:
|
||
|
||
- `pikaoa` / `pikaoa-nc01`;
|
||
- `pikaoa-dev` / `pikaoa-dev-nc01`;
|
||
- `selfmedia` / `selfmedia-nc01`;
|
||
- `selfmedia-production` / `selfmedia-production-nc01`;
|
||
- `sub2rank` / `sub2rank-nc01`。
|
||
|
||
## 清理规则
|
||
|
||
- 删除 `pikaoa-admin-password.txt` 和含不可见字符的旧 unified 文件名。
|
||
- 从 `selfmedia-access.env` 删除 `SELFMEDIA_ADMIN_PASSWORD`,保留 username、API key 和 session secret。
|
||
- 从 `platform-infra/apistate.env` 删除 `APISTATE_WEB_PASSWORD`,保留 API key 和 session secret。
|
||
- 删除只包含 `HWLAB_BOOTSTRAP_ADMIN_PASSWORD` 的旧 bootstrap-admin env 文件。
|
||
- `hwlab.auth` 或 `HWLAB_admin.txt` 若同时保存用户名,只删除密码行并保留用户名;owning YAML 不得再引用其密码行。
|
||
- 清理后重新执行 plan,确认旧 source 不再是 required source,统一 source 仍为 present。
|
||
- 禁止用 Secret decode、Pod env、数据库或日志回填旧来源。
|
||
|
||
## 验收判定
|
||
|
||
- 所有声明只引用一个管理员密码 sourceRef。
|
||
- Secret sync 成功,consumer rollout 成功,status key presence 完整。
|
||
- PikaOA、SelfMedia、HWLAB、Sub2Rank/ApiState 的 development/production 目标按实际存在矩阵通过管理员登录。
|
||
- 旧服务级管理员密码来源已删除或移除对应键。
|
||
- 全程只披露路径、键、presence、fingerprint、字节数、job/trace/artifact ID 和状态。
|