feat: git identity を Web UI から登録・削除できるようにする (v2.1.263-f)
Helm Chart Release / release-chart (push) Successful in 7s
Build Session Image / build-push (push) Successful in 2m5s

helm --set-file ではなく UI から SSH 秘密鍵 + known_hosts / HTTPS トークンを登録可能に。

- git.guiIdentities.enabled(既定 true)。UI に「認証情報」カード(一覧/追加/削除)
- GET/POST/DELETE /api/identities。登録分はセッション NS の Secret
  (ラベル identity-source=gui / identity-type)として保存。Helm 管理分と同一覧に統合
- manager.py: resolve_identity / list_identities / create_gui_identity / delete_gui_identity。
  build_pod と create_session は Helm 管理 + GUI 登録の両方を解決。
  /api/config の identities を {name,type,source} 配列に変更
- rbac.yaml: guiIdentities.enabled 時のみ manager Role に同 NS secrets の CRUD を付与
- 秘密鍵はリクエストボディで manager へ届くため README に経路 TLS 必須を明記
- helm lint / template 検証済み
This commit is contained in:
2026-09-09 12:47:50 +09:00
parent 6514747b4e
commit c31dd5875c
10 changed files with 345 additions and 15 deletions
+17 -1
View File
@@ -401,7 +401,8 @@ Secret は **セッション NS** に作成されます。`credentials` モー
| `git.allowedHosts` | GitHub/GitLab/Gitea | clone を許可するホスト allow-list |
| `git.allowArbitraryRepos` | `false` | allow-list を無効化し任意 URL を許可(非推奨) |
| `git.defaultAuthorName` / `Email` | `Claude` / `claude@cafepieters.com` | コミット author 既定 |
| `git.identities.<name>.type` | — | `ssh` / `https-token` |
| `git.guiIdentities.enabled` | `true` | **Web UI から identity を登録・削除できるようにする**(下記) |
| `git.identities.<name>.type` | — | `ssh` / `https-token`(Helm 管理・UI では読み取り専用) |
| `…ssh.sshPrivateKey` / `knownHosts` | — | PEM 秘密鍵 / `ssh-keyscan` 出力(**`knownHosts` 必須**) |
| `…https-token.username` / `token` | `x-access-token` / — | HTTPS ベーシック(GitHub PAT は username 任意) |
| `…existingSecret` ほか | — | 既存 Secret 参照(キー名は `existingSecretKey*` で調整) |
@@ -409,6 +410,20 @@ Secret は **セッション NS** に作成されます。`credentials` モー
GitHub でも Gitea でも GitLab でも、SSH か HTTPS トークンで認証できる Git ホストなら同じ仕組みで扱えます。
セッション作成時に identity 名を選ぶと、その Secret だけがそのセッション Pod にマウントされます。
#### GUI からの identity 登録(`git.guiIdentities.enabled: true`)
Web UI の **「認証情報(identity)」カード** から、SSH 秘密鍵 + `known_hosts`、または
HTTPS トークンを登録・削除できます。`helm` を触らずにセッションで使う鍵を追加できます。
- 登録内容はセッション NS の Secret(ラベル `claude-code.cafepieters.com/identity-source: gui`)
として保存され、`git.identities`(Helm 管理・`identity-source: helm`)と同じ一覧に並びます。
Helm 管理のものは UI から削除できません。
- **セキュリティ**: 秘密鍵はブラウザ → gateway → manager をリクエストボディで通ります。
**経路の TLS(Ingress の `tls` / LB の TLS 終端)を必ず有効に**してください。
有効化すると manager にセッション NS の `secrets` への `get`/`list`/`create`/`update`/`delete`
権限が付きます(同 NS には Claude 認証情報 Secret も存在)。不要なら `enabled: false`。
- `known_hosts` は登録時必須です(`ssh-keyscan <host>` の出力を貼り付け。ホスト鍵 TOFU 無効化)。
**URL の形式**(`git.identities` で選んだ鍵で認証されます):
| 形式 | 例 | identity |
@@ -540,6 +555,7 @@ docker buildx build --platform linux/amd64,linux/arm64 \
| バージョン | Claude Code | 変更内容 |
|---|---|---|
| 2.1.263-f | 2.1.263 | **Web UI から git identity(SSH 秘密鍵 + known_hosts / HTTPS トークン)を登録・削除**できる「認証情報」カードを追加(`git.guiIdentities.enabled`、既定 `true`)。`GET/POST/DELETE /api/identities`。GUI 登録分はセッション NS の Secret(`identity-source: gui`)として保存し、Helm 管理分と同じ一覧に統合。manager RBAC に同 NS の `secrets` CRUD を条件付き付与 |
| 2.1.263-e | 2.1.263 | リポジトリ URL バリデーションを緩和(`ssh://user@…` / `user@host:path` / `host:path` も受理。ホスト allowlist は従来どおり適用)。エラーメッセージに受理形式と「SSH ユーザーは常に `git`」の注意を明記。UI の入力欄にヒントを追加 |
| 2.1.263-d | 2.1.263 | 失敗したセッションの調査性を改善。`session.reaper.terminatedRetentionSeconds`(既定 900)で終了 Pod を即削除せず保持。UI に **「ログ」ボタン**(`GET /api/sessions/<id>/log`)を追加し、`Failed` の理由(exitCode / reason)を一覧に表示。セッションブートスクリプトが URL スキームと identity 型の不一致を警告し、`git clone` の出力をそのままログに出すよう変更 |
| 2.1.263-c | 2.1.263 | 修正: gateway の nginx が起動時 `pcre2_compile() failed: missing closing parenthesis` でクラッシュループ。`location ~` の正規表現に `{10}` が含まれ、nginx がブロック区切りの `{}` と解釈していた。正規表現全体をダブルクォートで囲んで解消 |