feat: git identity を Web UI から登録・削除できるようにする (v2.1.263-f)
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:
@@ -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 がブロック区切りの `{}` と解釈していた。正規表現全体をダブルクォートで囲んで解消 |
|
||||
|
||||
Reference in New Issue
Block a user