モデルアクセスを制御する
最終検証日:
翻訳: 竹洞 陽一郎
Aperture by Tailscaleは、現在ベータ版です。
Apertureはデフォルトで拒否(deny-by-default)です。
グラントがなければ、ユーザーはApertureデバイスに接続はできても、どのモデルにもアクセスできません。
このガイドでは、Apertureへのネットワークアクセスの設定方法と、各ユーザーまたはグループがどのモデルを使えるかを制御するグラントの設定方法を説明します。
ApertureがTailscaleのアイデンティティを認証とアクセス制御にどう使うかの詳細については、Apertureの仕組みを参照してください。
前提条件
始める前に、次のものが揃っていることを確認してください。
- 少なくとも1つのプロバイダーが設定済みのApertureインスタンス。
- Apertureダッシュボードへの管理者アクセス。
- Tailscale管理コンソールへのアクセス。
ステップ1: Apertureデバイスへのネットワークアクセスを許可する
ユーザーがモデルにアクセスする前に、tailnetを通じてApertureデバイスへのネットワーク接続が必要です。
- Tailscale管理コンソールにサインインします。
- 「Access controls(アクセス制御)」ページに移動します。
- アクセス制御ルールが、ユーザーによるApertureデバイスへの接続を許可していることを確認します。
次の例は、group:ai-users のすべてのユーザーに、ホスト名 ai のApertureインスタンスへの接続を許可するものです。
{
"groups": {
"group:ai-users": [
"dave@example.com",
"alice@example.com"
]
},
"hosts": {
"ai": "<YOUR_APERTURE_IP_ADDRESS>"
},
"grants": [
{
"src": ["group:ai-users"],
"dst": ["ai"],
"ip": ["tcp:80", "tcp:443", "icmp:*"]
}
]
}
<YOUR_APERTURE_IP_ADDRESS> は、ApertureデバイスのTailscale IPアドレスに置き換えてください。
Apertureインスタンスへのアクセス管理には、Tailscaleのタグを使うこともできます。
Apertureデバイスにタグ(たとえば tag:ai)を割り当て、グラントルールの dst として使用します。
ステップ2: グラントを設定してモデルアクセスを制御する
ユーザーがApertureデバイスに到達できるようになったら、グラントを設定して、どのモデルにアクセスできるかを定義します。
グラントは、Apertureダッシュボードか、tailnetポリシーファイルのいずれかで設定できます。
Apertureダッシュボードの場合: 「設定(Settings)」ページを開き、「ビジュアルエディタ」または「JSONエディタ」を使用します。
tailnetポリシーファイルの場合: tailscale.com/cap/aperture ケイパビリティを持つグラントを追加します。この方法では、Tailscaleのグループやタグを使用できます。完全な構文については、グラントの構成リファレンスを参照してください。
次の例は、すべてのユーザーに標準的なユーザーアクセスを付与し、すべてのAnthropicモデルの使用を許可するものです。
この例はApertureの構成形式を使用しています。
{
"grants": [
{
"src": ["*"],
"app": {
"tailscale.com/cap/aperture": [
{ "role": "user" },
{ "models": "anthropic/**" }
]
}
}
]
}
特定のユーザーにアクセスを制限するには、"*" を個別のログイン名(たとえば "alice@example.com")に置き換えてください。
代わりにtailnetポリシーファイルを使う場合は、Tailscaleのグループやタグで照合できます。
次の例は、group:ai-users のメンバーに、すべてのAnthropicモデルへのアクセスを付与するものです。
{
"grants": [
{
"src": ["group:ai-users"],
"dst": ["tag:aperture"],
"app": {
"tailscale.com/cap/aperture": [
{ "role": "user" },
{ "models": "anthropic/**" }
]
}
}
]
}
tailscale.com/cap/aperture 配下の各ケイパビリティエントリには、次のフィールドがあります。
role: 必須。標準アクセスには"user"、管理アクセスには"admin"を設定します。roleグラントがなければ、モデルのグラントがあってもユーザーはHTTP 403応答を受け取ります。models: ユーザーがアクセスできるモデルをprovider/model形式で指定するグロブパターン。たとえば"anthropic/**"はすべてのAnthropicモデルに、"**"はすべてのプロバイダーのすべてのモデルに一致します。
モデルパターンの例
次の例は、パターンを使って特定のモデルへのアクセスを付与する方法を示しています。
| パターン | 一致対象 |
|---|---|
"**" |
すべてのプロバイダーのすべてのモデル |
"anthropic/**" |
すべてのAnthropicモデル |
"openai/gpt-5" |
openai/gpt-5 に完全一致 |
"*/claude-sonnet*" |
任意の単一プロバイダーの claude-sonnet* モデル |
グループ(たとえば group:engineering)は、tailnetポリシーファイルで指定したグラントでのみ使用できます。
Apertureの構成では、個別のログイン名またはタグでのみ照合できます。
アクセスを検証する
グラントを設定したら、ユーザーが期待どおりのモデルにアクセスできることを検証します。
tailnetに接続されたデバイスから、テストリクエストを送信します。
これは curl や任意のHTTPクライアントで実行できます。
たとえば、次のようにします。
curl -s http://ai/v1/messages \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-20250514",
"max_tokens": 25,
"messages": [{"role": "user", "content": "respond with: hello"}]
}'
リクエストが成功応答を返せば、グラントは機能しています。
HTTP 403エラーを受け取った場合は、ユーザーが role グラントと、一致する models グラントの両方を持っているかを確認してください。
アクセスの問題の診断については、Apertureのトラブルシューティングを参照してください。
次のステップ
- MCPツールへのアクセスを許可する: ユーザーがどのMCPツールにアクセスできるかを制御します。
- ユーザーごとの支出上限を設定する: コストを管理します。
- LLMクライアントをセットアップする: Aperture経由で接続します。