HARUMI
戻る

2026-07 / 06

Harumi Platform — 3 つの管理ツールを 1 つに統合

Personal production system個人開発・運用

成果3 つに分かれていた運用画面を 1 つの管理コンソールへ統合しました。退役させたツールが抱えていたデータは失わずに移行しています。

概要

クラスターのヘルス・リソース・ドキュメント・接続情報を一元化した単一コンソール。それぞれ運用情報の異なる断片を抱えていた 3 つの管理ツールを置き換えた。

背景

コンソールにはライブな ArgoCD データが必要でしたが、唯一分かっていた管理者資格情報は認証が通らず、権限を絞った読み取り専用アカウントは用意済みでもトークンを発行する手段がまだありませんでした。

システム

infra docs, camunda-infra and harumi-docs consolidating into harumi-platforminfra docscamunda-infraharumi-docsharumi-platformRBACRole: get,list on pods · namespace-scoped, no secrets

退役は、削除ではない。

Retire the surface, not the data.

3 ops surfaces → 1 console, zero downtime.

課題

ドキュメントサイト・旧 Camunda ダッシュボード・infra リポジトリの各種メモという 3 つのツールが、それぞれ「ラボの現状」の異なる断片を保持しており、どこか一箇所を見れば済むという状態ではなかった。最も古いツールを退役させる(4 つ目のツールを追加するのではなく)には、その中に何が同居しているかを先に確認する必要があった——実際にはその前提が崩れていた。

調査

最初の仮説

サーバー自身の HMAC シークレットを使い、既存の読み取り専用アカウント向けにオフラインでトークンを自前署名すれば、管理者パスワードを完全に回避できると考えました。

まずライブなクラスター状態に対する読み取り専用のコンソールを構築し、退役対象ツールの実際のコンテンツ——URL 一覧、サービスごとの接続情報、ディスク健康ボード——を先に移植した。最も古いツールの namespace に何が同居しているかを監査したところ、その内容とは無関係な共有インフラが 2 つ見つかった——ラボ内すべての公開ホスト名を支える Cloudflare トンネルと、ディスク健康監視 DaemonSet。どちらも新しい Pod へ移設し、健全性を確認してから(トンネルの新旧 Pod は仕様上一時的に同じトークンを共有した)、旧 namespace を削除した。

証拠

sub: "harumi-platform:apiKey"   # not "harumi-platform"
# registry lookup keyed by jti, not iat

2 種類の claim を試しましたがどちらも "token is revoked" と拒否されました——サーバーは発行時刻ではなく jti を登録簿と照合しており、ローカルアカウントの subject には裸のアカウント名にはない ":apiKey" サフィックスが必要でした。

退けた修正

サーバー自身の HMAC シークレットでトークンをオフライン自前署名する方法。2 種類の claim を試しましたが、どちらも "token is revoked" として拒否されました——サーバーは発行時刻ではなく jti を登録簿と照合し、ローカルアカウントの subject には ":apiKey" サフィックスが必要です。claim の形を推測し続けることは、正規のエンドポイントが既に存在するインターフェースをリバースエンジニアリングすることに他なりませんでした。

判断

既存手順の bcrypt パッチで管理者パスワードをリセットし、claim の形を推測し続けるのではなく ArgoCD 自身のアカウントトークン発行エンドポイントでトークンを生成しました。

結果

ディスク健康監視エージェントの Go ソースは、リポジトリが消えた時点でどこにも残っていなかった——復旧できたはずの日次バックアップは、当時オフラインだったマシン上にあった。孤児化したイメージに永久に固定された DaemonSet を残すのではなく、ゼロから書き直した。3 台それぞれで一時的な特権デバッグ Pod を使い、まず実機の smartctl の JSON 出力を採取してからパーサーを実装——サイレントにゴミデータを生むところだった一点(明示的な ATA パススルーフラグでのみ SMART 属性が取得できる USB 接続ドライブ)も含めて確認済み。

次に変えること

現在の制約: 発行したトークンに有効期限はありません——手動で更新するサービス資格情報としては許容範囲ですが、より広いシステムに転用すべきパターンではありません。

次の一手: 計画中の読み取り専用 AI 診断レイヤーにも、同じ最小権限・secrets 非許可のパターンを適用します。

関連する記録

自前署名のトークンは正しく拒否された

技術構成

Next.js · Kubernetes RBAC · ArgoCD API · Prometheus · Go · Redis

次のプロジェクト

Harumi Platform が自らの記憶を持ち始める