Skip to content

リンク、トークン、SSH

それ自体が認証情報になる、サンドボックスのポートへのリンク、公開ポート、1 つのサンドボックスを一定期間開くトークン、自前のキーによる SSH。

更新

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 個です(超えると 409 too_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 キーを登録できるキーは、プロジェクトのすべてのサンドボックスに入れるためです。
ナビゲーション

キーワードを入力して検索…

↑↓ 移動↵ 選択Esc 閉じる