Go モジュール
Takumi Guard は GOPROXY プロトコルに対応しているため、企業内 Go モジュールプロキシと同じ要領で go get・go mod download・go build を経由させることができます。このページでは、ローカル開発環境と CI の両方について、それぞれの利用方法を説明します。
設定方法
Takumi Guard には3つの利用方法があります。
- 匿名で利用する:トークン不要。
GOPROXYを設定するだけでパッケージブロックが有効になります。 - ユーザー登録して利用する:メール認証トークン(
tg_anon_…)を使い、ダウンロード追跡と感染可能性の通知を有効にします。 - 組織ユーザートークンで利用する:組織ユーザートークン(
tg_org_…)を使い、組織全体のインストール状況を追跡できます。
組織ユーザートークンを利用するには、Guard を有効化した基本サブスクリプションが必要です。詳しくは料金と請求を参照してください。
匿名で利用する
認証なしで Takumi Guard のパッケージブロック機能を利用できます。GOPROXY 環境変数を設定するだけで、すべてのモジュール取得がプロキシ経由になります。
go env -w GOPROXY=https://golang.flatt.tech
以上です。go mod download・go get・go build のメタデータ取得はすべて Takumi Guard 経由になり、アーティファクト(.zip)のダウンロードは proxy.golang.org に透過的にリダイレクトされるため、ダウンロード速度に影響はありません。
GOPROXY には URL のみを指定し、,direct や |direct のフォールバックは付けないでください。付けると Takumi Guard が回避される場合があります。詳しくはこちらをご覧ください。
Takumi Guard は Go 1.21 以上のツールチェーンに対応しています。それより古いバージョンでは GOPROXY プロトコルの仕様が緩く、動作検証も行っていません。
ユーザー登録して利用する
メールアドレスを登録すると、匿名利用のパッケージブロックに加えて、ダウンロード追跡と感染可能性の通知が利用可能になります。ダウンロードしたモジュールが後から悪性であると判明した場合、登録したメールアドレスに通知が届きます。Shisho Cloud アカウントは不要で、無料で利用できます。
tg_anon_ トークンを取得済みの場合お持ちの tg_anon_ トークンは、そのまま npm / PyPI / RubyGems / Go モジュールいずれのエコシステムでも利用できます。再登録は不要で、下記の ステップ 3 から進めてください。
ステップ 1: メールアドレスを登録する
curl -X POST https://golang.flatt.tech/api/v1/tokens \
-H "Content-Type: application/json" \
-d '{"email": "you@example.com", "language": "ja"}'
language フィールドは省略可能で、デフォルトは "en"(英語)です。"ja" を指定すると、確認メールや感染可能性の通知を含むすべてのメールが日本語で届きます。この設定はトークンに保存され、以降のメールすべてに適用されます。
数秒以内にウェルカムメールが届きます。
ステップ 2: メールに記載された API キーを確認する
API キーはウェルカムメール本文に直接記載されています。リンクのクリックは不要で、そのまま利用できます。
このキーは安全な場所に保管してください。再発行が必要な場合は次のコマンドでいつでも再生成できます。
curl -X POST -H 'Authorization: Bearer tg_anon_xxxxxx' \
https://golang.flatt.tech/api/v1/tokens/regenerate
ステップ 3: Go ツールチェーンにトークンを設定する
Go ツールチェーンは GOPROXY サーバーに対して .netrc 経由の HTTP Basic 認証でトークンを送信します。ユーザー名は無視され、トークンはパスワード欄に書き込みます。
# 1. ~/.netrc に追記
echo "machine golang.flatt.tech login token password tg_anon_xxxxxx" >> ~/.netrc
chmod 600 ~/.netrc
# 2. GOPROXY を Takumi Guard に向ける(未設定の場合)
go env -w GOPROXY=https://golang.flatt.tech
これで以降のモジュール取得はすべて tg_anon_ トークンで認証され、ダウンロード追跡と感染可能性の通知が有効になります。なお GOPROXY には URL のみを指定し、,direct や |direct のフォールバックは付けないでください。詳しくはこちらをご覧ください。
組織ユーザートークンで利用する
組織ユーザートークン(tg_org_…)は、Takumi / Shisho Cloud コンソールから発行するか、Bot 経由で Guard API から発行できます。発行手順の詳細はトークンの管理を参照してください。
1 つの tg_org_ トークンは、Takumi Guard の全エコシステム(npm・PyPI・RubyGems・Go)で共通して利用できます。他のエコシステムですでにトークンを発行済みの場合は、そのトークンをそのまま利用できます。
トークンを取得したら、~/.netrc に書き込み、GOPROXY を設定します。
echo "machine golang.flatt.tech login token password tg_org_xxxxxx" >> ~/.netrc
chmod 600 ~/.netrc
go env -w GOPROXY=https://golang.flatt.tech
これで go mod download は組織ユーザートークンで認証され、組織全体のインストール追跡と組織レベルの感染可能性通知(Slack・Webhook など)が有効になります。なお GOPROXY には URL のみを指定し、,direct や |direct のフォールバックは付けないでください。詳しくはこちらをご覧ください。
GOPROXY による設定について
どの利用方法でも、go env -w GOPROXY=https://golang.flatt.tech を使用して同じプロキシ URL を設定します。設定にあたっては、以下の 2 点にご留意ください。
フォールバックを指定しない
GOPROXY には https://golang.flatt.tech のみを指定してください。,direct や |direct は追加しないでください。
これらのフォールバックを指定すると、プロキシがエラーを返した際に、Go ツールチェーンが VCS からモジュールを直接取得する動作が有効になります。その結果、まだインデックスされていないモジュール(404)や、|direct を指定した場合には明示的にブロック対象となっているモジュール(403)についても、Takumi Guard を経由せず取得できてしまいます。
ブロックリストを完全に適用するには、GOPROXY にプロキシ URL のみを指定する必要があります。
なお、自社のプライベートモジュールは、このプロキシ経由ではなく、プライベートモジュールと併用するで説明している GOPRIVATE を使用して除外してください。
設定の永続化
go env -w で設定した GOPROXY は $(go env GOENV)(通常は ~/.config/go/env)に書き込まれるため、シェルをまたいでも、再起動後も保持されます。
現在のシェルセッションでのみ有効にしたい場合は、代わりに export GOPROXY=… を使用してください。
GitHub Actions
GitHub Actions ワークフローに Takumi Guard を統合する場合は、flatt-security/setup-takumi-guard-golang GitHub Action を利用してください。匿名モードと組織連携モー ドの両方に対応しています。
匿名モード
Shisho Cloud アカウントがまだない場合でも、パッケージブロックのみであれば CI で Takumi Guard を利用できます。bot-id 入力を省略してください。
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: "1.23"
- uses: flatt-security/setup-takumi-guard-golang@v1
# bot-id を指定しない → 匿名モード(ブロックのみ)
- run: go build ./...
- run: go test ./...
匿名モードでは、Action は GOPROXY=https://golang.flatt.tech を設定するだけです。ブロック対象モジュールは 403 で拒否されますが、ダウンロード追跡と感染可能性の通知は利用できません。
Shisho Cloud 組織と連携する
Shisho Cloud 組織と連携することで、組織レベルのダウンロード追跡と Webhook 経由の感染可能性の通知が利用できます。CI 環境に長期シークレットを保存する必要はありません。 認証は GitHub OIDC トークンを Shisho Cloud の STS サービスで短期アクセストークンに交換することで安全に行われます。
前提条件:
- Shisho Cloud に登録された Bot アイデンティティ。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: actions/setup-go@v5
with:
go-version: "1.23"
- uses: flatt-security/setup-takumi-guard-golang@v1
with:
bot-id: "BT01EXAMPLE..." # Shisho Cloud コンソールからコピー
- run: go build ./...
- run: go test ./...