Takumi Guard の組織ユーザートークン発行ポータルの参考実装を GitHub で公開
組織内の開発者が、自社の IdP でサインインしたうえで自身の Takumi Guard 組織ユーザートークン(tg_org_)を払い出せるオープンソースの参考実装ポータルを、flatt-security/takumi-guard-portal-example として公開しました。Bot のクレデンシャル自体を各開発者の端末に配布する必要のない構成です。
概要
本ポータルは、開発者と Guard の組織ユーザートークン API の間に立つ小さな Web アプリケーションです。各開発者は、自社の IdP でポータルにサイ ンインし、自身の user_identifier に紐づく tg_org_ トークンをポータル上で発行します。発行直後に画面に表示される平文を、その場で .npmrc や CI ランナーのシークレットなど必要な箇所に貼り付ければ、以降はその設定から Guard と直接通信できるようになります。
この構成では、Bot のクレデンシャル自体はポータル側にのみ保持されます。これにより、各開発者は自身が利用するトークンだけを各自で扱えばよく、Takumi Guard の契約を担当する管理者側も、Shisho Cloud の Bot のクレデンシャルを開発者一人ひとりの端末や CI 環境に配布する必要がありません。
全体の流れを次の図に示します。
本ポータルは、管理者向けセットアップスクリプト(Bot のクレデンシャル込みのセットアップを MDM 経由で管理対象端末に一斉配信する用途)と、Takumi API(CI/CD や入退社処理からトークン操作を完全に自動化する用途)のちょうど中間にあたる選択肢として位置づけられます。開発者自身がトークンを払い出す運用にしたい一方で、Bot のクレデンシャルを MDM で全端末に配るのは難しい、あるいは望ましくないという環境に適しています。
ポータルに表示される機能は、ポータル側の設定値ではなく、紐づけた Bot に付与されている Guard ロールから自動的に決まります。Bot が organization/takumi_guard_token_issuer ロールを持つ場合は発行ボタンのみの画面となり、organization/takumi_manager ロールを持つ場合は、各開発者が自身のトークン一覧と取り消し操作も併せて利用できる画面となります。ロールの切り替えは Guard 側だけで完結し、次回のページ読み込みから挙動に反映されるため、ポータル本体の再デプロイは必要ありません。

トークンを発行すると、平文のトークンがメタデータと併せて 一度だけ 表示されます。ページを閉じたあとはポータル側でも復元できないため、開発者はその場で必要なツールの設定に貼り付けるか、改めて取り消したうえで再発行する必要があります。

一覧・取り消しを有効にした場合も、各開発者が画面から確認・取り消しできるのは 自身のトークンに限られます。組織オーナーであっても、他者のトークンを操作するための画面は用意していません。一覧・取り消しのどちらでも user_identifier を二重にフィルタしており、まず Guard API 側にプレフィックスを渡して呼び出し元のトークンに絞り込み、さらにポータル側でも完全一致を確認しています。リクエストに token_id を改ざんしても、呼び出し元が所有していないトークンへは到達できない設計です。
