メインコンテンツまでスキップ

Takumi Guard のセットアップスクリプト v0.5.0 でサブコマンドと「端末あたり 1 トークン」配信に対応

· 約6分
Takashi Yoneuchi
CTO @ GMO Flatt Security Inc.

Takumi Guard のセットアップスクリプト v0.5.0 で、配信フローを管理者側で組み立てるための 5 つのプリミティブサブコマンドが追加されました。あわせて、これらを用いた「端末あたり 1 トークン」の配信スクリプト例も新たに公開しています。v0.4.x までの呼び出し方法は引き続きそのまま動作するため、既存の配信構成はそのままアップグレードできます。

概要

v0.5.0 では、セットアップスクリプトに 5 つのプリミティブサブコマンドが追加されました。それぞれのサブコマンドが、これまで 1 つの呼び出しに固まっていたセットアップ処理の中の 1 ステップを担うため、管理者側で自由に組み合わせて配信フローを設計できるようになっています。

サブコマンド役割API 呼び出し
precheck [SCOPES]端末上に設定対象が存在するかどうかを判定するなし
discover端末上のローカル設定ファイルから既存の Guard トークンを列挙するなし
verify <TOKEN>トークンを Guard API に問い合わせ、activerevokedunknown のいずれかに分類するあり
issue <USER_IDENTIFIER>指定された識別子で新しいトークンを発行するあり
install <TOKEN> [SCOPES]対象スコープのパッケージマネージャー設定にトークンを書き込むなし

Bot の API 認証情報が必要なのは verifyissue のみです。そのため、各開発者のシェル側には API キーを渡さず、discoverinstall だけをそれぞれのシェル内で動かす設計も可能になっています。標準出力・標準エラー・終了コードの詳細はサブコマンドモードの I/O コントラクトを参照してください。

それぞれのサブコマンドの呼び出し例は以下の通りです。

# precheck -- 端末上に設定対象が存在するか判定する(API 呼び出しなし)
./setup.sh precheck

# discover -- 端末上のローカル設定から既存の Guard トークンを列挙する
./setup.sh discover

# verify -- トークンの状態を Guard API に問い合わせる(bot 認証情報が必要)
TG_BOT_ID=BTxxxxxxxxxxxxxxxxxxxxxxxxxxx \
TG_BOT_API_KEY=shisho_apikey_xxxxxxxxxxxxx \
./setup.sh verify tg_org_xxxxxxxxxxxxxxxxx

# issue -- 新しいトークンを発行する(bot 認証情報が必要)
TG_BOT_ID=BTxxxxxxxxxxxxxxxxxxxxxxxxxxx \
TG_BOT_API_KEY=shisho_apikey_xxxxxxxxxxxxx \
./setup.sh issue acme-laptop-042

# install -- 取得済みのトークンを各パッケージマネージャーの設定に書き込む
./setup.sh install tg_org_xxxxxxxxxxxxxxxxx
./setup.sh install tg_org_xxxxxxxxxxxxxxxxx npm,pypi

補足: 「端末あたり 1 トークン」配信例の公開

これまでのセットアップスクリプトは「端末 × ユーザー」単位で 1 トークンを発行する設計でした。1 台の端末に複数の開発者アカウントが同居する環境(複数のエンジニアが交代で利用する共用ワークステーション、MDM 管理用アカウントと開発者本人のアカウントが共存するノート PC、IdP 経由でプロビジョニングされたアカウントと端末ローカルアカウントが併存する環境など)では、消費ライセンス数が物理的な端末数を超えやすく、ライセンス計画とのズレが発生していました。

v0.5.0 では、上記のサブコマンドを組み合わせて構築した「端末あたり 1 トークン」の配信スクリプト例を新たに公開しました。このラッパーは、端末上の各ユーザープロファイルを順に走査して既存の有効なトークンを探し、見つかった場合は再利用、見つからない場合のみ 1 つだけ新しいトークンを発行したうえで、その同じトークンを端末上の全開発者アカウントに配布します。

具体的なスクリプトは配信例(端末あたり 1 トークン)を参照してください。これまでの配信例(端末のユーザー毎に個別トークン)もそのまま残っており、どちらの配信例も有効なトークンを検出した場合は再発行を行わずに再利用するため、Jamf や Intune、Ansible などの管理ツールから定期実行しても安全です。

補足: 後方互換性

v0.4.x からアップグレードする場合、管理者側の追加作業は不要です。v0.5.0 以前の BOT_ID USER_IDENTIFIER [SCOPES] という 3 つの位置引数による呼び出しはそのまま動作し、標準出力のログ・終了コード・バックアップとロールバックの挙動を含めて、出力はこれまでと完全に同じです。ユーザー単位モデルで過去に発行したトークンも引き続き有効で、次回実行時に再利用されます。どのタイミングで「端末あたり 1 トークン」のラッパーに切り替えても、端末上にすでに存在する有効なトークンを検出して再利用するため、移行時にライセンスが無駄に消費されることはありません。