RubyGems
Takumi Guard のセットアップは、利用環境と必要な機能に応じて異なります。このページでは、ローカル開発環境と GitHub Actions の両方について、それぞれの利用方法を説明します。
設定方法
Takumi Guard には3つの利用方法があります。
- 匿名で利用する:トークン不要。ミラー URL を設定するだけでパッケージブロックが有効になります。
- ユーザー登録して利用する:メール認証トークン(
tg_anon_…)を使い、ダウンロード追跡と侵害通知を有効にします。 - 組織ユーザートークンで利用する:組織ユーザートークン(
tg_org_…)を使い、組織全体のインストール状況を追跡できます。
組織ユーザートークンを利用するには、Guard を有効化した基本サブスクリプションが必要です。詳しくは料金と請求を参照してください。
匿名で利用する
認証なしで Takumi Guard のパッケージブロック機能を利用できます。ミラー URL を設定するだけで、悪意あるパッケージのブロックが有効になります。ダウンロード追跡や感染可能性の通知は利用できませんが、最も手軽に導入できる方法です。
Bundler をミラー URL で設定してください。
bundle config set --global mirror.https://rubygems.org https://rubygems.flatt.tech/
以上です。以降の bundle install コマンドはすべて Takumi Guard 経由でルーティングされます。
Takumi Guard は Bundler 経由での利用に対応しています。Bundler は ~/.bundle/config からミラー設定を読み取るため、Gemfile の変更は不要です。
ユーザー登録して利用する
メールアドレスを登録すると、匿名利用のパッケージブロックに加えて、ダウンロード追跡と感染可能性の通知が利用可能になります。ダウンロードした Gem が後から悪性であると判明した場合、登録したメールアドレスに通知が届きます。Shisho Cloud アカウントは不要で、無料で利用できます。
tg_anon_ トークンを取得済みの場合お持ちの tg_anon_ トークンは、そのまま npm / PyPI / RubyGems / Go モジュールいずれのエコシステムでも利用できます。再登録は不要で、下記の ステップ 3 から進めてください。
ステップ 1: メールアドレスを登録する
curl -X POST https://rubygems.flatt.tech/api/v1/tokens \
-H "Content-Type: application/json" \
-d '{"email": "you@example.com", "language": "ja"}'
language フィールドは省略可能で、デフォルトは "en"(英語)です。"ja" を指定すると、確認メールや感染可能性の通知を含むすべてのメールが日本語で届きます。この設定はトークンに保存され、以降のメールすべてに適用されます。
数秒以内にウェルカムメールが届きます。
ステップ 2: メールに記載された API キーを確認する
API キーはウェルカムメールに直接記載されています。リンクをクリックする手順は不要で、キーはすぐに使用できます。
API キーは安全な場所に保存してください。新しいキーが必要な場合は、いつでも再生成できます。curl -X POST -H 'Authorization: Bearer tg_anon_xxxxxx' https://rubygems.flatt.tech/api/v1/tokens/regenerate
ステップ 3: Bundler を設定する
入手した tg_anon_… トークンを使って、Bundler のミラー設定を行います。
bundle config set --global mirror.https://rubygems.org https://token:tg_anon_xxxxxx@rubygems.flatt.tech/
このコマンドにより、すべての bundle install 呼び出しが透過的に Takumi Guard 経由でルーティングされます。Gemfile の変更は不要で、Bundler がミラー設定を自動的に適用します。以降の bundle install コマンドはトークンで認証され、ダウンロード追跡と感染可能性の通知が有効になります。
組織ユーザートークンで利用する
組織ユーザートークン(tg_org_…)は Takumi / Shisho Cloud コンソールから発行するか、ボットが Guard API を利用して発行できます。発行方法の詳細は トークンの管理 をご参照ください。
tg_org_ トークンを発行済みの場合1 つの tg_org_ トークンは 、Takumi Guard の全エコシステム(npm / PyPI / RubyGems / Go モジュール)で利用できます。再発行は不要で、お持ちのトークンをそのまま RubyGems の設定に使用してください。
トークンを入手したら、Bundler のミラー設定を行います。
bundle config set --global mirror.https://rubygems.org https://token:tg_org_xxxxxx@rubygems.flatt.tech/
以降の bundle install コマンドは組織ユーザートークンで認証され、組織内のダウンロード追跡 や、組織宛の感染可能性の通知(Slack・Webhook)が有効になります。
GitHub Actions で利用する
GitHub Actions ワークフローに Takumi Guard を統合するには、flatt-security/setup-takumi-guard-rubygems GitHub Action を使用してください。匿名モードまたは組織にリンクされたモードで利用できます。
匿名で利用する
Shisho Cloud アカウントをお持ちでない場合でも、CI でパッケージブロック機能を利用できます。bot-id 入力を省略してください。
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.3"
- uses: flatt-security/setup-takumi-guard-rubygems@v1
# bot-id を指定しない:匿名モード(ブロックのみ)
- run: bundle install
- run: bundle exec rspec
匿名モードでは、Action は rubygems.org 向けの Bundler ミラーを設定するだけです。ブロック対象のパッケージは 403 エラーで拒否されますが、ダウンロード追跡と感染可能性の通知は利用できません。
組織に紐づけて利用する
Shisho Cloud の組織にリンクすると、組織レベルのダウンロード追跡と感染可能性の通知(ウェブフック経由)が利用可能になります。長寿命なシークレットをCI環境に保存する必要がなく、GitHub OIDC トークンと Shisho Cloud STS サービスの短期アクセストークン交換により、認証が安全に行われます。
前提条件:
- Shisho Cloud に登録されたボット ID。Shisho Cloud コンソールのレジストリ設定ページから Bot ID をコピーしてください。
- ワークフロージョブの
id-token: writeとcontents: readパーミッション。
ステップ 1: Action をワークフローに追加する
jobs:
build:
runs-on: ubuntu-latest
permissions:
id-token: write # OIDC トークン交換に必要
contents: read
steps:
- uses: actions/checkout@v4
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.3"
- uses: flatt-security/setup-takumi-guard-rubygems@v1
with:
bot-id: "BT01EXAMPLE..." # Shisho Cloud コンソールからコピー
- run: bundle install
- run: bundle exec rspec