ポートへのリンク
GET /v1/sandboxes/{id}/url?port=3000(glac sandboxes url web 3000)は、そのポートへのリンク https://<port>-<sandbox id>-<signature>.glac.run/ を返します。SDK は、リクエストなしで自らリンクに署名します(sbx.url(3000))。
- **リンクが認証情報です。**リンクを持つ人なら誰でもポートを開けますが、1 つのポートのリンクから別のポートのリンクを割り出すことはできません。事前の登録は不要で、リンクを開いた人がサンドボックスを復帰させます。
- 新しいリンク。
POST /v1/sandboxes/{id}/url-secretでシークレットを変えると、古いリンクはすべて使えなくなります。 - 公開ポート。
public_ports(--public-port 8080)のポートには、署名のない短いリンクhttps://<port>-<sandbox id>.glac.run/もあり、誰でも開けます。 - 独自ドメインをサンドボックスのポートに向けることもできます。アプリと同じく、
{domain, sandbox, port}を付けたPOST /v1/domainsを使います(アドレス)。 - **ダイレクト。**リンクはプラットフォームの前段にあるプロキシを通ってサンドボックスに届きます。同じ先頭部分を
direct.glac.runの下に置くとプロキシを通らず、より大きなアップロード、より長いレスポンス、プロキシが運ばないプロトコルに使えます(アドレス)。
リンクを通じたリクエストはリクエストとして数えられ、レスポンスは送信トラフィックになります。リンクは、Glac 自身のサイトとは別の glac.run の下で配信されます。glac.run が Public Suffix List に載るまでは、1 つの名前の下で配信されるページが glac.run 全体に対する Cookie を設定でき、ほかの顧客のページがそれを読めます。ドメイン全体を対象とする Cookie は信用しないでください。
1 つのサンドボックス用のトークン
トークンは、1 つのサンドボックスだけを、一定期間開きます。このサンドボックスには届くべきでも、プロジェクトには届くべきでないブラウザ、ユーザー、プログラムに渡してください。
curl -X POST https://api.glac.ai/v1/sandboxes/web/tokens \
-H "Authorization: Bearer $GLAC_API_KEY" -H 'Content-Type: application/json' \
-d '{"scopes": ["exec", "files"], "expires_in_seconds": 3600}'token = sbx.token(scopes=["url", "tty"], expires_in_seconds=600)- スコープ:
url(ポートへのリンク)、exec(コマンド)、files、tty(ターミナル)。指定しなければurlです。 - 有効期間:指定しなければ 1 時間、最長 30 日です。
- 使い方:キーの代わりに
Authorization: Bearer st_…を使います。EventSource や WebSocket にヘッダーを設定できないブラウザのために、GETでは代わりに?sandbox_token=で渡すこともできます。リンクでは、アドレスにトークンを付けて来たブラウザは、トークンのないアドレスに転送され、トークンはスクリプトから読めない Cookie に保存されます。 - コマンドラインで:
GLAC_API_KEY=st_… glac sandboxes exec web lsは、そのサンドボックスに対するexec、cp、shell、urlで使えます。 - トークンは、期限が切れるまで、またはサンドボックスのトークンが無効にされるまで有効です。
POST /v1/sandboxes/{id}/tokens/revoke(glac sandboxes tokens revoke web、Python ではsbx.revoke_tokens())は、それまでにそのサンドボックス用に署名されたトークンをすべて拒否し、その後に求めたトークンはそれまでどおり使えます。 - 個別のトークン:同じ呼び出しに
{"token": "st_…"}、または{"token_id": "tok_…"}(トークンとともに返されたid)を付けると、そのトークンだけを、再起動、スリープ、移動を経ても、本来の期限まで拒否します。glac sandboxes tokens revoke web tok_…、Python ではsbx.revoke_token(token)、MCP サーバーではtokenを付けたsandbox_revoke_tokensです。1 つのサンドボックスで保持できる、個別に無効にしたトークンは最大 1,000 個です(超えると 409too_many_revoked_tokens)。すべてのトークンを無効にすれば、また空きができます。
SSH
公開鍵を登録すると(POST /v1/ssh-keys)、どの SSH クライアントからでも、SSH ゲートウェイを通じてプロジェクトのサンドボックスに入れます。
glac sandboxes ssh-keys add ~/.ssh/id_ed25519.pub --name laptop
glac sandboxes ssh web --gateway ssh.glac.ai # prints the ssh, scp and sftp command lines
ssh web@ssh.glac.ai # a shell in the sandbox web
ssh web@ssh.glac.ai 'make test' # one command; its exit code is ssh's- ユーザー名はサンドボックス(ID か名前)です。
<user>+<sandbox>で、その中の別のユーザーとして実行します。 - キーは、
--expires-atまで、プロジェクトのすべてのサンドボックス、または指定した 1 つ(--sandbox web)だけを開きます。読み取られるのは公開鍵の部分だけで、秘密鍵を含むファイルは拒否されます。 glac sandboxes ssh-keys rmは、そのキーのセッションを 30 秒以内に終了させます。- **セッションは、サンドボックスのマシンの再起動(リリースなど)をまたいで続きます。**サンドボックスは中で動いているものを保ったまま、その間スリープし、セッションはマシンが戻るのを待って、中断したところから続きます。コマンドの出力が失われたり 2 回表示されたりすることはなく、その間に入力したものは、マシンが戻った時点で送られます。1 分以内に戻らなければ、セッションはそう伝えて終了します。
- サンドボックスが別のマシンへ移動した場合や、マシンが撤去された場合、セッションには理由が伝えられて終了し、
sshは 255 で終了します。撤去されたマシンを通じた新しいセッションは、理由とともに拒否されます。接続し直してください。移動の後なら、セッションは現在の場所にあるサンドボックスに、プロセスごと届きます。 - キーの登録と削除には
adminスコープを持つキーが必要です。SSH キーを登録できるキーは、プロジェクトのすべてのサンドボックスに入れるためです。