tailscale claude codeの設定と使い方|APIキー管理を安全に

tailscale claude codeの設定と使い方|APIキー管理を安全に

TailscaleでClaude Codeを安全に使いたいけれど、単にVPNをつなぐだけでよいのか、APIキーをどこに置くべきか分からない人に向けた記事です。Apertureを中継する構成と、個人利用・チーム利用・GitHub Actionsでの違いを整理し、設定から動作確認までの流れを紹介します。

結論

tailscale claude codeは、TailscaleのWireGuardネットワーク上でApertureを中継点にし、APIキーを端末やCIへ配らずClaude Codeを使う構成です。settings.jsonと環境変数、権限設定を整えれば、利用状況を追跡しながら接続できるとわかる。

目次 (9)

tailscale claude codeとは?単なるVPN接続との違い

「tailscale claude code」で検索すると、現在の上位結果はTailscaleのApertureをClaude Codeの接続先にする公式手順が中心です。Tailscaleは端末同士をWireGuardでつなぐネットワークを作り、Apertureはそのネットワーク内でAIプロバイダーへのリクエストを受ける中継点になります。Claude Codeから見ると、Anthropicへ直接アクセスする代わりにApertureへリクエストを送り、Apertureが認証・モデル選択・ログ記録を担当する形です。

この構成の利点は、チームのAPIキーを各PCやリポジトリへ配らずに済むことです。利用者やCIの識別、モデルごとのアクセス権、トークン数や費用、セッションの記録をAperture側へ集約できます。TailscaleをインストールするだけでClaude Codeの接続先が切り替わるわけではなく、Apertureのプロバイダー設定と ANTHROPIC_BASE_URL の指定が必要です。

なお、自宅PCで動くClaude CodeをiPadやスマートフォンから操作したい場合は、TailscaleとSSH、tmuxなどを組み合わせる別の構成もあります。こちらは「ネットワーク越しに端末を操作する」方法であり、ApertureによるAPIキー管理とは目的が異なります。今回の検索意図に合う中心解は、Claude CodeのリクエストをApertureへルーティングする構成です。

出典URL: https://tailscale.com/docs/aperture/how-to/use-claude-code

接続前に必要なものと全体の流れ

Aperture経由でClaude Codeを動かすには、先に管理側の準備が必要です。Apertureは2026年8月時点でベータ提供のため、業務で使う場合は機能範囲と運用条件を確認してから導入してください。公式ドキュメントが示す前提は、Apertureの稼働、少なくとも1つのAIプロバイダー、端末から到達できるホストURL、そしてインストール済みのClaude Codeです。

設定の順番は次のとおりです。

  1. Tailscale上でApertureのホストへ到達できることを確認する。
  2. ApertureにAnthropic API、Amazon Bedrock、またはGoogle Vertexのプロバイダーを登録し、利用するモデルを有効にする。
  3. Claude Codeの接続先をApertureへ向け、クライアント側には実際のAPIキーを置かない。
  4. Claude Codeでテストメッセージを送り、Apertureのログ画面でリクエストを確認する。

ApertureのホストURLは、公式手順では http:// を使います。これはインターネット上へ平文で公開するという意味ではありません。TailscaleのWireGuardトンネル上を通るため、Tailscaleネットワーク内の通信は暗号化されます。ただし、ApertureをTailscaleの外から公開する構成では条件が変わるため、公開範囲とTLS設定を別途設計してください。

settings.jsonでClaude Codeを接続する手順

手動設定では、Claude Codeのグローバル設定ファイルにApertureのURLを登録します。公式の基本例は次のJSONです。

{
  "apiKeyHelper": "echo '-'",
  "env": {
    "ANTHROPIC_BASE_URL": "http://<aperture-hostname>"
  }
}

作業は次の順で進めます。

  1. ~/.claude/settings.json を開く。Windowsでは通常、ユーザープロファイル配下の .claude\\settings.json を確認する。
  2. ANTHROPIC_BASE_URL<aperture-hostname> を、自分のApertureホスト名へ置き換える。
  3. apiKeyHelperecho '-' は残す。Apertureが認証情報を注入するため、ここに本物のキーを書かない。
  4. Claude Codeを起動し、短いテスト依頼を送る。
  5. 管理者権限でApertureの http://<aperture-hostname>/ui/ を開き、Logsにリクエストが表示されるか確認する。

apiKeyHelper が返すハイフンは、Claude Code側の入力チェックを通すためのプレースホルダーです。Anthropic APIプロバイダーの実キーはAperture側で管理し、端末のシェル履歴、設定ファイル、CIログへ残さない運用にします。テストが成功しても、利用者に過剰なモデル権限を与えていないか、Apertureのアクセス制御を見直してください。

Claude Codeの古いv1系では apiKeyHelper が使えない場合があります。その場合は公式例のように ANTHROPIC_AUTH_TOKEN にプレースホルダーを置き、ANTHROPIC_BASE_URL とモデル名を明示します。設定キーの対応はバージョンで変わるため、エラーが出たときは使用中のClaude CodeのバージョンとAperture公式手順を照合するのが安全です。

出典URL: https://tailscale.com/docs/aperture/how-to/use-claude-code

Aperture CLIなら環境変数をまとめて設定できる

設定ファイルを手で編集したくない場合は、Aperture CLIからClaude Codeを起動できます。CLIはApertureのエンドポイントとプロバイダーを選び、選択内容に応じた環境変数を設定してからClaude Codeを立ち上げる仕組みです。まずターミナルで aperture を実行し、初回はAperture URLを登録します。保存済みのエンドポイントがあれば、次回から自動的に接続できます。

プロバイダーごとに設定される主な変数は次のとおりです。

接続先 主な環境変数 用途
Anthropic API ANTHROPIC_BASE_URLANTHROPIC_AUTH_TOKENANTHROPIC_MODEL ApertureでAPIキーを集約する
Amazon Bedrock ANTHROPIC_BEDROCK_BASE_URLCLAUDE_CODE_USE_BEDROCK AWS側のモデルを使う
Google Vertex CLOUD_ML_REGIONANTHROPIC_VERTEX_PROJECT_IDANTHROPIC_VERTEX_BASE_URL Google Cloud側のモデルを使う

CLI経由では、Anthropic API向けの認証トークンに - が設定され、実際の認証はApertureが行います。モデルを選択したときは ANTHROPIC_MODEL も設定されます。環境変数を表示する診断コマンドを共有すると、値の取り扱いに注意が必要です。ログやスクリーンショットへトークンを含めないでください。

Tailscaleが端末にインストールされていないCIやコンテナでは、Aperture CLIのブリッジ機能を使える場合があります。ブリッジはプロセス内のTailscaleノードを起動し、ローカルのプロキシを通してApertureへ接続する方式です。すでに端末のTailscale接続が動いているなら、通常は直接接続で足ります。

出典URL: https://tailscale.com/docs/aperture/cli

Claude Pro・Maxを使う場合のパススルー設定

Apertureでは、Anthropic APIの集中管理と、Claude ProやMaxなどのサブスクリプションをそのまま通すパススルーを分けて考えます。パススルーでは、Claude Code自身のOAuthトークンをApertureがAnthropicへ転送します。そのため、APIキー方式の設定を混ぜないことが重要です。

パススルーを使う場合の要点は次のとおりです。

  1. Aperture側でAnthropicプロバイダーをパススルーモードにする。
  2. Claude Code側には ANTHROPIC_BASE_URL だけを設定する。
  3. ANTHROPIC_API_KEYANTHROPIC_AUTH_TOKEN は設定しない。
  4. Claude CodeをClaudeアカウントのOAuth認証で起動する。

APIキーまたは認証トークンを設定すると、Claude Codeが本来転送すべきOAuthトークンの代わりに、その値を送ろうとします。ログインできない、想定と違う課金先になる、Apertureのログに出ないといった問題は、認証方式の混在から起きやすい症状です。会社の共通APIキーを使うのか、個人のサブスクリプションを使うのかを先に決め、不要な環境変数を削除してから接続してください。

BedrockやVertexを使う場合も、Anthropic API向けの変数をそのまま流用しません。公式ページにはバックエンド別の settings.json 例が掲載されているため、プロバイダーに合う接頭辞と認証スキップ設定を選びます。

GitHub ActionsからClaude Codeを経由させる方法

プルリクエストのコードレビューを自動化する場合は、CIランナーを一時的なTailscaleノードとしてtailnetへ参加させ、Apertureで呼び出し元を識別します。個々のリポジトリにAnthropic APIキーを置かず、TailscaleのアイデンティティとApertureの権限で制御できるのがポイントです。

基本的な作業手順は次のとおりです。

  1. tailnetポリシーに tag:ci を定義し、CIノードがApertureへ接続できるネットワーク許可と、利用可能なモデルの許可を追加する。
  2. GitHub Actions用のフェデレーションID、またはOAuthクライアントを作成し、リポジトリにはTailscale接続用の TS_OAUTH_CLIENT_IDTS_AUDIENCE などだけを登録する。
  3. ワークフローで tailscale/github-action@v4 を先に実行し、tags: tag:ciping: <aperture-hostname> を指定する。
  4. 続くClaude Code Actionで ANTHROPIC_BASE_URL をApertureへ向け、必要な最小権限だけを与える。
  5. テスト用のプルリクエストを開き、Tailscale接続、Claude Codeの応答、Apertureの利用ログを順番に確認する。
name: AI code review
on:
  pull_request:

permissions:
  id-token: write
  pull-requests: write
  contents: read

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: tailscale/github-action@v4
        with:
          oauth-client-id: ${{ secrets.TS_OAUTH_CLIENT_ID }}
          audience: ${{ secrets.TS_AUDIENCE }}
          tags: tag:ci
          ping: <aperture-hostname>
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: "-"
        env:
          ANTHROPIC_BASE_URL: "http://<aperture-hostname>"
          CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: "1"

anthropic_api_key: "-" はActionの空欄チェックを通すための値で、実際のAnthropicキーではありません。Tailscaleのアクションが一時ノードを作成し、Apertureがそのノードのタグと許可を確認してから中央管理のキーでAnthropicへ転送します。ping は接続が成立するまで待つ指定なので、ネットワーク接続前にClaude Codeの処理が始まる問題も防げます。

出典URL: https://tailscale.com/docs/solutions/route-ai-code-reviews-through-aperture

つながらないときに確認するポイント

接続失敗時は、Claude Codeの認証だけを疑うと原因を見失います。次の順番で、ネットワーク、権限、接続先、プロバイダーを切り分けます。

  1. Tailscaleの端末一覧で、実行端末とApertureホストが同じtailnetに参加しているか確認する。
  2. tailscale ping <aperture-hostname> 相当の疎通確認を行い、名前解決と到達性を確認する。
  3. ANTHROPIC_BASE_URL のホスト名とプロトコルを確認し、公式手順どおり http:// を使う。
  4. Apertureのポリシーで利用者、tag:ci、対象ホスト、対象モデルの許可がそろっているか確認する。
  5. パススルーならAPIキー変数を、API方式ならプロバイダー設定とキーの有効性を確認する。
  6. Claude Codeのリクエストを送り、ApertureのLogsに届いているかを管理者画面で確認する。

ログに何も出ない場合は、Claude CodeがApertureへ到達する前に止まっています。逆にログへ出ているのに応答が失敗する場合は、Apertureのモデル許可、プロバイダー認証、モデル名を調べます。GitHub Actionsだけ失敗する場合は、id-token: write の権限、Tailscale接続用シークレット、ping のホスト名を確認してください。診断のためにAPIキーをチャットやIssueへ貼り付けるのは避けます。

Tailscale経由が向く人と、向かない使い方

複数人でClaude Codeを使い、APIキーの配布、利用量の可視化、費用上限、CIの認証をまとめて管理したい組織には、TailscaleとApertureの組み合わせが向いています。ネットワーク上の呼び出し元をTailscaleのタグで識別できるため、リポジトリごとに同じ秘密情報を複製する運用から移行しやすくなります。

一方、個人が1台のPCでClaude Codeを使うだけなら、Apertureの導入・ポリシー・プロバイダー管理が余分な作業になることがあります。スマートフォンから自宅PCのセッションを操作したいだけなら、Remote ControlやSSHのほうが目的に合う場合もあります。また、Apertureはベータ提供のため、重要な開発環境ではログの保持、障害時の迂回経路、権限変更の承認者を決めておくと安心です。

最初はテスト用のモデルとリポジトリで、端末からApertureへ届くこと、認証方式が一つに定まること、ログで利用者と費用を追えることを順番に確認します。問題がなければ対象ユーザーやCIへ広げ、tailnetポリシーは必要なホスト・ポート・モデルだけに絞るのが現実的です。

まとめ

tailscale claude codeの中心的な設定は、Claude Codeの ANTHROPIC_BASE_URL をTailscaleネットワーク内のApertureへ向けることです。APIキー方式ではApertureに認証を集約し、Pro・MaxのパススルーではAPIキー変数を設定しません。GitHub ActionsではTailscaleの一時ノードとApertureの許可を組み合わせることで、秘密情報を各リポジトリへ配らずコードレビューを実行できます。

まずは公式手順の settings.json で単発の接続とログを確認し、その後にAperture CLIやGitHub Actionsへ拡張すると、原因を追いやすく安全に運用できます。

参考になったら ♡
Clauder Navi 編集部
@clauder_navi

Anthropic の Claude / Claude Code を中心に、日本のエンジニア向けに最新動向と実務 を毎日発信。運営方針 は メディアについて をご覧ください。